トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF 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);
}