QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#706304#9537. Chinese Chessucup-team1134#WA 2ms3832kbC++2312.2kb2024-11-03 10:15:012024-11-03 10:15:01

Judging History

你现在查看的是最新测评结果

  • [2024-11-03 10:15:01]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3832kb
  • [2024-11-03 10:15:01]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
#define vi vector<int>
#define vl vector<ll>
#define vii vector<pair<int,int>>
#define vll vector<pair<ll,ll>>
#define vvi vector<vector<int>>
#define vvl vector<vector<ll>>
#define vvii vector<vector<pair<int,int>>>
#define vvll vector<vector<pair<ll,ll>>>
#define vst vector<string>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define mkunique(x) sort(all(x));(x).erase(unique(all(x)),(x).end())
#define fi first
#define se second
#define mp make_pair
#define si(x) int(x.size())
const int mod=998244353,MAX=300005,INF=15<<26;

vi dh[6],dw[6];
string U="JSCMWB";

int dis[6][10][9][10][9];
int H=10,W=9;

void init(){
    {
        int q=0;
        dh[q]={0,1,0,-1};
        dw[q]={1,0,-1,0};
    }
    
    {
        int q=1;
        dh[q]={-1,1,1,-1};
        dw[q]={1,1,-1,-1};
    }
    
    {
        int q=2;
        for(int h=-9;h<=9;h++){
            if(h==0) continue;
            dh[q].pb(h);
            dw[q].pb(0);
        }
        for(int w=-8;w<=8;w++){
            if(w==0) continue;
            dh[q].pb(0);
            dw[q].pb(w);
        }
    }
    
    {
        int q=3;
        dh[q]={-2,-1,1,2,2,1,-1,-2};
        dw[q]={1,2,2,1,-1,-2,-2,-1};
    }
    
    {
        int q=4;
        dh[q]={-2,2,2,-2};
        dw[q]={2,2,-2,-2};
    }
    
    {
        int q=5;
        dh[q]={1,0,0};
        dw[q]={0,-1,1};
    }
    
    for(int q=0;q<6;q++){
        for(int i=0;i<H;i++){
            for(int j=0;j<W;j++){
                for(int s=0;s<H;s++){
                    for(int t=0;t<W;t++){
                        dis[q][i][j][s][t]=INF;
                    }
                }
                dis[q][i][j][i][j]=0;
                queue<pair<int,int>> Q;
                Q.push(mp(i,j));
                
                while(!Q.empty()){
                    auto [h,w]=Q.front();Q.pop();
                    for(int k=0;k<si(dh[q]);k++){
                        if(q==5&&h<=4&&k) continue;
                        int toh=h+dh[q][k],tow=w+dw[q][k];
                        if(toh<0||toh>=H||tow<0||tow>=W) continue;
                        if(chmin(dis[q][i][j][toh][tow],dis[q][i][j][h][w]+1)) Q.push({toh,tow});
                    }
                }
                
                for(int s=0;s<H;s++){
                    for(int t=0;t<W;t++){
                        if(dis[q][i][j][s][t]==INF) dis[q][i][j][s][t]=-1;
                        //dis[q][i][j][s][t]=INF;
                    }
                }
            }
        }
    }
}

int main(){
    
    init();
    
    int N;cin>>N;
    
    vii cand;
    for(int i=0;i<N;i++){
        int a,b;//cin>>a>>b;
        a=i/W;b=i%W;
        cand.pb(mp(a,b));
    }
    
    for(int s1=0;s1<H;s1++){
        for(int t1=0;t1<W;t1++){
            map<vi,int> MA;
            bool ok=true;
            for(int q=0;q<6;q++){
                for(auto [i,j]:cand){
                    if(MA.count(vi{dis[q][i][j][s1][t1]})){
                        if(MA[vi{dis[q][i][j][s1][t1]}]!=q){
                            ok=false;
                        }
                    }
                    if(!ok) break;
                    MA[vi{dis[q][i][j][s1][t1]}]=q;
                }
                if(!ok) break;
            }
            if(ok){
                cout<<1<<endl;
                vi X;
                cout<<"? "<<s1<<" "<<t1<<endl;
                int z;cin>>z;
                X.pb(z);
                cout<<"! "<<U[MA[X]]<<endl;
                return 0;
            }
        }
    }
    
    for(int s1=0;s1<H;s1++){
        for(int t1=0;t1<W;t1++){
            map<int,vector<array<int,3>>> MA;
            bool ff=true;
            for(int q=0;q<6;q++){
                for(auto [i,j]:cand){
                    MA[dis[q][i][j][s1][t1]].pb({q,i,j});
                }
            }
            for(auto ddd:MA){
                bool ok=false;
                for(int s2=0;s2<H;s2++){
                    for(int t2=0;t2<W;t2++){
                        bool sei=true;
                        map<int,int> MA;
                        for(auto [q,i,j]:ddd.se){
                            if(MA.count(dis[q][i][j][s2][t2])){
                                if(MA[dis[q][i][j][s2][t2]]!=q) sei=false;
                            }
                            if(!sei) break;
                            MA[dis[q][i][j][s2][t2]]=q;
                        }
                        if(sei){
                            ok=true;
                        }
                        if(ok) break;
                    }
                    
                    if(ok) break;
                }
                ff&=ok;
            }
            
            if(ff){
                cout<<2<<endl;
                cout<<"? "<<s1<<" "<<t1<<endl;
                int z;cin>>z;
                
                {
                    bool ok=false;
                    for(int s2=0;s2<H;s2++){
                        for(int t2=0;t2<W;t2++){
                            bool sei=true;
                            map<int,int> MAA;
                            for(auto [q,i,j]:MA[z]){
                                if(MAA.count(dis[q][i][j][s2][t2])){
                                    if(MAA[dis[q][i][j][s2][t2]]!=q) sei=false;
                                }
                                if(!sei) break;
                                MAA[dis[q][i][j][s2][t2]]=q;
                            }
                            
                            if(sei){
                                cout<<"? "<<s2<<" "<<t2<<endl;
                                int z;cin>>z;
                                cout<<"! "<<U[MAA[z]]<<endl;
                                return 0;
                            }
                        }
                        
                        if(ok) break;
                    }
                }
            }
        }
    }
    
    for(int s1=0;s1<H;s1++){
        for(int t1=0;t1<W;t1++){
            map<int,vector<array<int,3>>> MA;
            bool ff=true;
            for(int q=0;q<6;q++){
                for(auto [i,j]:cand){
                    MA[dis[q][i][j][s1][t1]].pb({q,i,j});
                }
            }
            for(auto ddd:MA){
                bool ok=false;
                for(int s2=0;s2<H;s2++){
                    for(int t2=0;t2<W;t2++){
                        for(int s3=0;s3<H;s3++){
                            for(int t3=0;t3<W;t3++){
                                bool sei=true;
                                map<int,int> MA;
                                for(auto [q,i,j]:ddd.se){
                                    if(MA.count(dis[q][i][j][s2][t2]*10000+dis[q][i][j][s3][t3])){
                                        if(MA[dis[q][i][j][s2][t2]*10000+dis[q][i][j][s3][t3]]!=q) sei=false;
                                    }
                                    if(!sei) break;
                                    MA[dis[q][i][j][s2][t2]*10000+dis[q][i][j][s3][t3]]=q;
                                }
                                if(sei){
                                    ok=true;
                                }
                                if(ok) break;
                            }
                        }
                        
                    }
                    
                    if(ok) break;
                }
                ff&=ok;
            }
            
            if(ff){
                cout<<3<<endl;
                cout<<"? "<<s1<<" "<<t1<<endl;
                int z;cin>>z;
                
                {
                    for(int s2=0;s2<H;s2++){
                        for(int t2=0;t2<W;t2++){
                            for(int s3=0;s3<H;s3++){
                                for(int t3=0;t3<W;t3++){
                                    bool sei=true;
                                    map<int,int> MAA;
                                    for(auto [q,i,j]:MA[z]){
                                        if(MAA.count(dis[q][i][j][s2][t2]*10000+dis[q][i][j][s3][t3])){
                                            if(MAA[dis[q][i][j][s2][t2]*10000+dis[q][i][j][s3][t3]]!=q) sei=false;
                                        }
                                        if(!sei) break;
                                        MAA[dis[q][i][j][s2][t2]*10000+dis[q][i][j][s3][t3]]=q;
                                    }
                                    
                                    if(sei){
                                        cout<<"? "<<s2<<" "<<t2<<endl;
                                        int z;cin>>z;
                                        cout<<"? "<<s3<<" "<<t3<<endl;
                                        int zz;cin>>zz;
                                        cout<<"! "<<U[MAA[z*10000+zz]]<<endl;
                                        return 0;
                                    }
                                }
                            }
                            
                        }
                    }
                }
            }
        }
    }
    
    return 0;
    for(int s1=0;s1<H;s1++){
        for(int t1=0;t1<W;t1++){
            for(int s2=0;s2<H;s2++){
                for(int t2=0;t2<W;t2++){
                    for(int s3=0;s3<H;s3++){
                        for(int t3=0;t3<W;t3++){
                            if(mp(s1,t1)>=mp(s2,t2)) continue;
                            if(mp(s2,t2)>=mp(s3,t3)) continue;
                            map<vi,int> MA;
                            bool ok=true;
                            for(int q=0;q<6;q++){
                                for(auto [i,j]:cand){
                                    if(MA.count(vi{dis[q][i][j][s1][t1],dis[q][i][j][s2][t2],dis[q][i][j][s3][t3]})){
                                        if(MA[vi{dis[q][i][j][s1][t1],dis[q][i][j][s2][t2],dis[q][i][j][s3][t3]}]!=q){
                                            ok=false;
                                        }
                                    }
                                    if(!ok) break;
                                    MA[vi{dis[q][i][j][s1][t1],dis[q][i][j][s2][t2],dis[q][i][j][s3][t3]}]=q;
                                }
                                if(!ok) break;
                                
                            }
                            if(ok){
                                cout<<3<<endl;
                                vi X;
                                cout<<"? "<<s1<<" "<<t1<<endl;
                                int z;cin>>z;
                                X.pb(z);
                                cout<<"? "<<s2<<" "<<t2<<endl;
                                cin>>z;
                                X.pb(z);
                                cout<<"? "<<s3<<" "<<t3<<endl;
                                cin>>z;
                                X.pb(z);
                                cout<<"! "<<MA[X]<<endl;
                                return 0;
                            }
                        }
                    }
                    
                }
            }
        }
    }
    
    {
        vii ans={mp(0,0),mp(0,1),mp(9,0),mp(9,3)};
        
        map<vi,int> MA;
        for(int q=0;q<6;q++){
            for(auto [i,j]:cand){
                vi z;
                for(int k=0;k<4;k++){
                    z.pb(dis[q][i][j][ans[k].fi][ans[k].se]);
                }
                MA[z]=q;
            }
        }
        if(1){
            cout<<4<<endl;
            vi X;
            for(int k=0;k<4;k++){
                cout<<"? "<<ans[k].fi<<" "<<ans[k].se<<endl;
                int z;cin>>z;
                X.pb(z);
            }
            cout<<"! "<<MA[X]<<endl;
            return 0;
        }
    }
    
    
}



详细

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 3832kb

input:

1
9 0
-1

output:

1
? 2 6
! J

result:

wrong answer guessed type is incorrect.