C. NEKO's Maze Game-(模拟+构造)

总结

1表示障碍 0表示空地
1:当r1一个位置被阻碍,影响的阻碍数量是左下+正下+右下的阻碍数量
2:当r2一个位置被阻碍,影响的阻碍数量是左上+正上+右上的阻碍数量

3:当r1一个位置被解除,解除的阻碍数量是左下+正下+右下的阻碍数量
4:当r2一个位置被解除,解除的阻碍数量是左上+正上+右上的阻碍数量

#include
//typedef long long ll;
//#define ull       unsigned long long
//#define int       long long
#define F           first
#define S           second
#define endl        "\n"//<
#define lowbit(x)   (x&(-x))
#define ferma(a,b)  pow(a,b-2)
#define pb          push_back
#define mp          make_pair
#define all(x)      x.begin(),x.end()
#define memset(a,b) memset(a,b,sizeof(a));
#define IOS         ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
const double PI=acos(-1.0);
const int inf=0x3f3f3f3f;
const int MAXN=0x7fffffff;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
void file()
{
#ifdef ONLINE_JUDGE
#else
    freopen("cin.txt","r",stdin);
    //  freopen("cout.txt","w",stdout);
#endif
}
const int N=1e6+5;
int dp[3][N];
signed main()
{
     IOS;
    //file();
    int n,q,ans=0;
    cin>>n>>q;
    while(q--)
    {
        int x,y;
        cin>>x>>y;
        int tx=x%2;
        x--;
        if(dp[x][y])
        {
            dp[x][y]=0;
            for(int i=-1;i<=1;i++)
                ans-=dp[tx][y+i];
        }
        else
        {
            dp[x][y]=1;
            for(int i=-1;i<=1;i++)
                ans+=dp[tx][y+i];
        }
        if(ans)
            cout<<"No"<<endl;
        else
            cout<<"Yes"<<endl;
    }

    return 0;
}

你可能感兴趣的:(#,构造)