#13WA,求hack
查看原帖
#13WA,求hack
1041666
Jerry555楼主2025/1/23 23:03
#include <iostream>
using namespace std;
struct Witch{
    bool anti=1,pois=1,tpois=1,tanti=1;
};
int main(){
    int t,n,m;
    cin >> t >> n;
    int role[n+1];
    Witch witch[n+1];
    bool life[n+1],nowdie[n+1];
    for(int i=1;i<=n;i++)cin >> role[i],life[i]=1;
    while(t--){
        for(int i=1;i<=n;i++)nowdie[i]=0;
        bool isWrong=false,skill3=false;
        cin >> m;
        int ans=0;
        bool rec[4][n+1];
        for(int j=0;j<4;j++)for(int k=1;k<=n;k++)rec[j][k]=0;
        for(int i=0;i<m;i++){
            int a,id1,id2;
            cin >> a >> id1 >> id2;
            if(id1>n or id1<1 or id2>n or id2<1)isWrong=true;
            if(isWrong)continue;
            if(role[id1]==4)if(rec[2][id1]!=0 or rec[1][id1]!=0)isWrong=true;
            if(rec[a][id1]!=0)isWrong=true;
            else rec[a][id1]=1;
            if(role[id1]==2)isWrong=true;
            else switch(a){
                case 0:{if((nowdie[id1] or !life[id1] or nowdie[id2] or !life[id2]) or
                       (id1==id2) or (role[id1]!=1))isWrong=true;break;
                }case 1:{if((nowdie[id1] or !life[id1] or nowdie[id2] or !life[id2]) or
                       (id1==id2) or (role[id1]!=4) or !witch[id1].pois)isWrong=true;break;
                }case 2:{if((!nowdie[id2]) or
                       (role[id1]!=4)or !witch[id1].anti or (nowdie[id1] && id2!=id1))isWrong=true;break;
                }case 3:{if((!nowdie[id1] or nowdie[id2] or !life[id2]) or
                       (role[id1]!=3))isWrong=true;break;
                }
            }
            if(!isWrong)switch(a){
                case(0):nowdie[id2]=true,ans++;break;
                case(1):nowdie[id2]=true,witch[id1].tpois=false,ans++;break;
                case(2):nowdie[id2]=false,witch[id1].tanti=false,ans--;break;
                case(3):nowdie[id2]=true,ans++,skill3=true;break;
            }
        }
        bool Wrong1=false;
        for(int i=1;i<=n;i++)if(role[i]==3 && nowdie[i] && !skill3)Wrong1=true;
        if(isWrong or Wrong1){
            cout << "Wrong" << endl;
            for(int i=1;i<=n;i++)if(role[i]==4)
                witch[i].tanti=witch[i].anti,witch[i].tpois=witch[i].pois;
        }else if (ans==0)cout << "Safe" << endl;
        else{
            cout << ans << ' ';
            for(int i=1;i<=n;i++){
                if(nowdie[i])cout << i << ' ',life[i]=0;
            }
            cout << endl;
        }
        if(!(isWrong or Wrong1))for(int i=1;i<=n;i++)if(role[i]==4)
            witch[i].anti=witch[i].tanti,witch[i].pois=witch[i].tpois;
    }
}
2025/1/23 23:03
加载中...