调不过啊,自己搓了好几个样例都过了,但是交上去就是20分
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int night_time,player_number,m,ma[4][30];
int players[30];
bool flag,witch_use[30][4];//0--4,5 1--4,6 2--5,7 3--6,7
bool skill[30],dying[30],died[30];
int died_number;
int main()
{
cin>>night_time>>player_number;
for(int i=1;i<=player_number;i++) cin>>players[i];
while(night_time--)
{
flag=false;
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>ma[1][i]>>ma[2][i]>>ma[3][i];
if(ma[2][i]>player_number||players[ma[2][i]]==2||ma[2][i]<1)
{
cout<<"Wrong\n";
flag=true;
//break;
}
if(ma[2][i]==ma[3][i]&&ma[1][i]!=2)
{
cout<<"Wrong\n";
flag=true;
//break;
}
}
if(flag) continue;
for(int i=1;i<=m;i++)
{
if(ma[1][i]==0)
{
if(dying[ma[2][i]]||died[ma[2][i]]||players[ma[2][i]]!=1||skill[ma[2][i]]||dying[ma[3][i]]||died[ma[3][i]])
{
cout<<"Wrong\n";
flag=true;
break;
}
skill[ma[2][i]]=dying[ma[3][i]]=true;
died_number++;
}
else if(ma[1][i]==1)
{
if(players[ma[2][i]]==1||players[ma[2][i]]==2||players[ma[2][i]]==3)
{
cout<<"Wrong\n";
flag=true;
break;
}
if(players[ma[2][i]]==7||players[ma[2][i]]==5||dying[ma[2][i]]||died[ma[2][i]]||skill[ma[2][i]]||dying[ma[3][i]]||died[ma[3][i]])//4--1 1 5--0 1 6--1 0 7--0 0
{
cout<<"Wrong\n";
flag=true;
break;
}
if(players[ma[2][i]]==4)
{
skill[ma[2][i]]=dying[ma[3][i]]=true;
died_number++;
players[ma[2][i]]=5;
witch_use[ma[2][i]][0]=true;
}
else if(players[ma[2][i]]==6)
{
skill[ma[2][i]]=dying[ma[3][i]]=true;
died_number++;
players[ma[2][i]]=7;
witch_use[ma[2][i]][3]=true;
}
}
else if(ma[1][i]==2)
{
if(players[ma[2][i]]==1||players[ma[2][i]]==2||players[ma[2][i]]==3)
{
cout<<"Wrong\n";
flag=true;
break;
}
if(!dying[ma[3][i]]||died[ma[3][i]]||players[ma[2][i]]==6||players[ma[2][i]]==7||skill[ma[i][2]]||died[ma[2][i]])
{
cout<<"Wrong\n";
flag=true;
break;
}
if(players[ma[2][i]]==4)
{
skill[ma[2][i]]=true;
dying[ma[3][i]]=false;
players[ma[2][i]]=6;
witch_use[ma[2][i]][1]=true;
died_number--;
}
else if(players[ma[2][i]]==5)
{
skill[ma[2][i]]=true;
dying[ma[3][i]]=false;
players[ma[2][i]]=7;
witch_use[ma[2][i]][2]=true;
died_number--;
}
if(ma[3][i]==3) skill[ma[3][i]]=false;
}
else
{
if(players[ma[2][i]]!=3||!dying[ma[2][i]]||died[ma[2][i]]||skill[ma[2][i]]||dying[ma[3][i]]||died[ma[3][i]])
{
cout<<"Wrong\n";
flag=true;
break;
}
dying[ma[3][i]]=true;
skill[ma[2][i]]=true;
died_number++;
}
}
for(int i=1;i<=player_number;i++)
if(players[i]==3&&dying[i]&&!died[i]&&!skill[i])
{
flag=true;
cout<<"Wrong\n";
break;
}
if(flag)
{
died_number=0;
for(int i=1;i<=player_number;i++)
{
if(skill[i]||(players[i]==5||players[i]==6||players[i]==7))
{
if(witch_use[i][0])
{
players[i]=4;
witch_use[i][0]=false;
}
else if(witch_use[i][1])
{
players[i]=4;
witch_use[i][1]=false;
}
else if(witch_use[i][2])
{
players[i]=5;
witch_use[i][2]=false;
}
else if(witch_use[i][3])
{
players[i]=6;
witch_use[i][3]=false;
}
}
skill[i]=false;
dying[i]=false;
}
}
else
{
if(!died_number) cout<<"Safe\n";
else
{
cout<<died_number<<" ";
for(int i=1;i<=player_number;i++)
{
skill[i]=false;
if(dying[i]&&!died[i])
{
died[i]=true;
cout<<i<<" ";
}
}
cout<<'\n';
died_number=0;
}
}
}
}
附上自己搓的样例:
输入
8 12
1 2 3 4 1 1 2 2 3 3 4 4
6
0 1 3
0 5 4
0 6 2
2 4 4
2 11 2
3 3 1
3
0 5 9
2 12 9
3 9 5
2
2 12 12
0 5 12
2
0 5 7
1 4 7
2
0 5 7
1 4 8
2
1 11 1
2 12 1
3
0 5 9
3 9 2
2 12 9
2
0 5 9
3 9 5
输出: 2 1 3
wrong
wrong
wrong
2 7 8
wrong
1 2
2 5 9