我是被卡常了还是写假了?
查看原帖
我是被卡常了还是写假了?
777756
UFOI楼主2023/11/16 13:36

为什么最后一个点T飞了?感觉跟第三篇题解差不多啊。

#include<bits/stdc++.h>
using namespace std;
int t,n,x[101],y[101];
bool vis[201][201];
queue<pair<int,int> >q;
int main(){
    cin>>t;
    while(t--){
        memset(vis,0,sizeof vis);
        while(q.size()) q.pop();
        cin>>n;
        for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
        q.push({100,100});
        //vis[100][100]=1;
        while(q.size()){
            pair<int,int>u=q.front();
            q.pop();
            if(vis[u.first][u.second]) continue;
            vis[u.first][u.second]=1;
            if(vis[101][100]&&vis[99][100]&&vis[100][101]&&vis[100][99]){
                puts("TAK");
                goto T2;
            }
            for(int i=1;i<=n;i++){
                if(u.first+x[i]>200||u.second+y[i]>200||u.first+x[i]<0||u.second+y[i]<0) continue;
                if(!vis[u.first+x[i]][u.second+y[i]]) q.push({u.first+x[i],u.second+y[i]});
            }
        }
        puts("NIE");
        T2:;
    }
}
2023/11/16 13:36
加载中...