请加Hack
查看原帖
请加Hack
892084
xinxin2022楼主2025/1/23 16:06

这份代码认为猎人死后被女巫救活,再被杀死,然后再带走玩家的情况是不成立的,但能AC。

#include<bits/stdc++.h>
using namespace std;
int t,op,id1,id2,p;
int n,m,die_people;
struct node{
    int c,k,g,b;
}a[25],b[25];
bool vis[25];
signed main(){
    cin>>t>>n;
    for(int i=1;i<=n;i++) cin>>a[i].c,a[i].k=1;
    for(int i=1;i<=n;i++) if(a[i].c==4) a[i].g=1,a[i].b=1;
    while(t--){
        memset(vis,0,sizeof(vis));
        die_people=0;p=0;
        cin>>m;
        for(int i=1;i<=n;i++) b[i]=a[i];
        while(m--){
            cin>>op>>id1>>id2;
            if(p) continue;
            if(id1>n||id2>n||id1<1||id2<1){
                p=1;
                continue;
            }
            if(vis[id1]){
                p=1;
                continue;
            }
            vis[id1]=1;
            if(op==0){
                if(id1==id2) p=1;
                if(b[id1].k==0||b[id2].k==0) p=1;
                if(b[id1].c!=1) p=1;
                b[id2].k=0;
            }else if(op==1){
                if(id1==id2) p=1;
                if(b[id1].k==0||b[id2].k==0) p=1;
                if(b[id1].c!=4) p=1;
                if(b[id1].b==0) p=1;
                b[id2].k=0;
                b[id1].b--;
            }else if(op==2){
                if(b[id1].k==0&&id1!=id2) p=1;
                if(b[id2].k) p=1;
                if(a[id2].k==0) p=1;
                if(b[id1].c!=4) p=1;
                if(b[id1].g==0) p=1;
                b[id2].k=1;
                b[id1].g--;
            }else if(op==3){
                if(id1==id2) p=1;
                if(b[id1].k) p=1;
                if(b[id2].k==0) p=1;
                if(b[id1].c!=3) p=1;
                b[id2].k=0;
            }
            //cout<<p<<'\n';
        }
		for(int i=1;i<=n;i++){
            if(b[i].c==3&&b[i].k!=a[i].k&&!vis[i]) p=1;
        }
        if(p){
            puts("Wrong");
            continue;
        }
		for(int i=1;i<=n;i++){
            if(a[i].k!=b[i].k) die_people++;
        }
        if(die_people==0){
            puts("Safe");
        }else{
            cout<<die_people<<' ';
            for(int i=1;i<=n;i++){
                if(a[i].k!=b[i].k) cout<<i<<' ';
            }
            cout<<'\n';
        }
		for(int i=1;i<=n;i++) a[i]=b[i];
    }
    return 0;
}

Hack:

1 5
1 1 4 4 3
6
0 1 5
3 5 1
2 3 5
0 2 5
3 5 2
2 4 5

输出:

2 1 2
2025/1/23 16:06
加载中...