ICPCに向けて。

ICPCに向けて。

とあるFラン大学3年生の勉強記録日記。
ACM-ICPCに向けて日々勉強した記録をまとめて残す。

主にjavaを使用しています。

Amebaでブログを始めよう!
早速第1回目の更新。

・問題
Vampirish Night
URL:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1019&lang=jp
あるところに、N 人家族の吸血鬼がいました。
吸血鬼はたいへんグルメなことで知られています。
吸血鬼の食べるものと言えばもちろん血液なのですが、どんな血液でもいいというわけではありません。
K 種類の血液型の血液を混ぜ合わせたものを飲みますが、どの血液型をどれだけ使用するのかは、個人によって全く異なります。

一家の食事当番であるあなたは、晩御飯の支度をしようと冷蔵庫を覗き込みました。
あなたの最初の仕事は、冷蔵庫にある血液を使って、家族全員の食事を用意できるか判定するプログラムを書くことです。

input/output等はURLから。


・解答
とりあえず問題文を解読する所から。毎度の事だけど日本語がややこしいよね。
よく読むと、1人1人の好みに合ったN人分の食事を作らなければならない。
冷蔵庫に入ってるk種類の血を使って全員分の食事が作れるかどうか。
ってことがわかる。

次にinputを見た感じ
x列:
血の種類

y列:
0が冷蔵庫の中身
1~Nが○番目の人の食事に使うレシピ
だということがわかる。

プログラムの流れとしては、
1:
NとKを入れる(どちらも0なら終了)
2:
残りのデータを入れる
3:
冷蔵庫列から各吸血鬼の食事に必要な分の値を引く
4:
冷蔵庫列内にマイナスの値の血があるかどうか調べる。
1個でも発見出来たらNo
全て正の値ならYesを出力後1の処理に戻る

という単純な構造でした。
java言語でのソースを貼っておきます。


import java.util.Scanner;

/**
 * Vampirish Night
 *  URL:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1019&lang=jp
 *
 * @author iga-c
 */
public class P1019_Vampirish_Night {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Scanner sc = new Scanner(System.in);
int n,k;
while(true){
n = sc.nextInt();
k = sc.nextInt();

if(n==0 && k==0){
break;
}

int[][] array = new int[n+1][k];
for(int i=0;i<n+1;i++){
for(int j=0;j<k;j++){
array[i][j] = sc.nextInt();
}
}

for(int i=1;i<n+1;i++){
for(int j=0;j<k;j++){
array[0][j] -= array[i][j];
}
}

boolean flag = true;
for(int i=0;i<k;i++){
if(array[0][i] < 0){
flag = false;
}
}

if(flag){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}

}

はじめまして。いがです。

ここのブログにはACM/ICPCに向けて、過去問やAOJの問題を解いていき
解法とソースコードをブログにまとめて読めるようにしようかなと思い作りました。

問題を考えるのが好きな人、ICPCに出る人(主に初心者というか俺が難問を解けない)向けの記事を書いていきます。

過去の出場結果は
2年 1問(他のメンバーは4年,4年,自分)
3年 2問(他のメンバーは2年,2年,自分)
です。

他にも日常的な事を更新したりするかもしれません。
早速明日から更新していきたいと思います。
ではでは。