- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
#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);
}