- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 文字型2次元配列を使った方法
// 下方向を北と考えている(コンピュータとy軸は下方向がプラスだから)
main()
{
int n,m,i,j,x,y,ryo,takara;
char map[21][21], muki;
char tmp[100], *p;
while(1){
// 文字と数字が混在した入力はうまく行かないことが多いので
// 全部1行ごとに文字列として読み込んでから変換をしている
fgets(tmp, 100, stdin);
n=atoi(tmp);
if(n==0) break;
// 文字型2次元配列で地図(何もない=空白)
for(j=0; j<=20; j++){
for(i=0; i<=20; i++){
map[i][j]=' ';
}
}
// 宝石を置いている
for(i=0; i<n; i++){
fgets(tmp, 100, stdin);
sscanf(tmp, "%d %d", &x, &y);
map[x][y]='*';
}
fgets(tmp, 100, stdin);
m=atoi(tmp);
takara=n;
x=10; y=10;
for(i=0; i<m; i++){
fgets(tmp, 100, stdin);
muki=tmp[0]; // 方向の1文字文を読み込む
p=tmp; p++; // 方向の1文字を飛ばして移動量を読み込むため
ryo=atoi(p);
for(j=0; j<ryo; j++){
switch(muki){ // 方向に応じて移動する
case 'N': y++; break;
case 'E': x++; break;
case 'W': x--; break;
case 'S': y--; break;
}
if(map[x][y]=='*'){ // 移動して宝石があったら
takara--; // カウントを1減らし
map[x][y]=' '; // 地図から宝石を消す
}
}
}
if(takara==0){ // 全部の宝石を探し終わっていたら
puts("Yes");
}else{
puts("No");
}
}
return(0);
}