川のブログ

川の適当気ままなブログです。 

AOJ 2000 Misterious Gems

こんにちは川です。

今回は、場所をbool型で持ちます。宝石の場所はtrueとします。

もし通ったときにtrueだったら宝石の数を減算し、

最終的に宝石の数が0なったら"Yes"を出力します。

 

ソースコード

 

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    while(cin>>n,n){
        bool dia[41][41]={};
        for(int i=0,x,y;i<n;i++){
            cin>>x>>y;
            dia[y][x]=1;
        }
        int mo;
        cin>>mo;
        string di="NESW";
        int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
        for(int i=0,num,x=10,y=10;i<mo;i++){
            char direction;
            cin>>direction>>num;
            for(int j=0;j<4;j++){
                if(direction==di[j]){
                    for(int k=0;k<num;k++){
                        x+=dx[j];
                        y+=dy[j];
                        if(dia[y][x]==1){
                            dia[y][x]=0;
                            n--;
                        }
                    }
                }
            }
        }
        if(n==0)cout<<"Yes\n";
        else cout<<"No\n";
    }
}