トップ 一覧 Farm 検索 ヘルプ RSS ログイン

2006ra3.cの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 // 2次元配列を使わない例
 // 下方向を北と考えている(コンピュータとy軸は下方向がプラスだから)
 main()
 {
 	int n,m,i,j,k,x,y,ryo,takara;
 	int tx[20], ty[20]; // 宝石の場所を覚えておく
 	char muki;
 	
 	while(1){
 		// 文字と数字が混在した入力はうまく行かないことが多いが、
 		// scanfを使ってみた
 		scanf("%d", &n);
 		if(n==0) break;
 		
 		// 宝石のx座標とy座標を覚える
 		for(i=0; i<n; i++){
 			scanf("%d %d", &tx[i], &ty[i]);
 		}
 		
 		scanf("%d", &m);;
 		
 		takara=0; // 見つけた宝石を数えてみた
 		x=10; y=10;
 		for(i=0; i<m; i++){
 			scanf("%c", &muki); // 改行読み飛ばし
 			scanf("%c %d", &muki, &ryo);
 			for(j=0; j<ryo; j++){
 				switch(muki){
 					case 'N': y++; break;
 					case 'E': x++; break;
 					case 'W': x--; break;
 					case 'S': y--; break;
 				}
 				// 移動した位置が宝石の位置かどうか全部調べる
 				for(k=0; k<n; k++){
 					// 一度訪れたかどうか(訪れたらtxにマイナス1を入れておく)
 					if(tx[k]>0){
 						if(tx[k]==x && ty[k]==y){
 							takara++;
 							tx[k]=-1; // 2回宝石を拾わないように
 						}
 					}
 				}
 			}
 		}
 		if(takara==n){
 			puts("Yes");
 		}else{
 			puts("No");
 		}
 	}
 	
 	return(0);
 }