评测记录
#include<bits/stdc++.h>
#define MAXN 100010
using namespace std;
int c,t,n,m,a[MAXN],b[MAXN];
struct tribool{
char u;
int x,y;
}record[MAXN];
int tmp[MAXN];
int main(){
cin>>c>>t;
if(c==1||c==2||c>=5){
while(t--){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>record[i].u>>record[i].x;
if(record[i].u=='+'||record[i].u=='-') cin>>record[i].y;
}
for(int ans=0;ans<=n;ans++){
bool flag=true;
for(int i=0;i<=n-ans;i++){
for(int j=1;j<=ans;j++) tmp[j]=0;
for(int j=ans+1;j<=ans+i;j++) tmp[j]=1;
for(int j=ans+i+1;j<=n;j++) tmp[j]=-1;
next_permutation(tmp+1,tmp+1+n);
do{
for(int j=1;j<=n;j++) a[j]=tmp[j],b[j]=tmp[j];
for(int j=1;j<=m;j++){
if(record[j].u=='U') b[record[j].x]=0;
if(record[j].u=='T') b[record[j].x]=1;
if(record[j].u=='F') b[record[j].x]=-1;
if(record[j].u=='+') b[record[j].x]=b[record[j].y];
if(record[j].u=='-') b[record[j].x]=(-1)*b[record[j].y];
}
flag=true;
for(int j=1;j<=n;j++){
if(a[j]!=b[j]){
flag=false;
break;
}
}
if(flag) break;
}while(next_permutation(tmp+1,tmp+1+n));
if(flag) break;
}
if(flag){
cout<<ans<<endl;
break;
}
}
}
}
if(c==3||c==4){
while(t--){
char u;
int x,ans=0;
memset(a,0,sizeof(a));
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>x;
if(u=='T') a[x]=1;
if(u=='F') a[x]=0;
if(u=='U') a[x]=-1;
}
for(int i=1;i<=n;i++) if(a[i]==-1) ans++;
cout<<ans<<endl;
}
}
return 0;
}