题目描述
当两边不等重时,假币出现就一次。最后统计每个硬币不等重的次数于实验不等重次数是否相同即可。
重量不相等可以是大于或小于,二者的次数统计统计应该分开计算,否则真币也会被误加进去-_-#
C++ 代码
#include<iostream>
#include<cstring>
using namespace std;
const int N=1005;
int mright[N],mleft[N],big[N],small[N];
int main(){
int n,k,p;
cin>>n>>k;
memset(small,0,sizeof small);
memset(big,0,sizeof big);
char c;
int time=0;//假币出现次数
while(k--){
cin>>p;
for(int i=0;i<p;i++)
cin>>mleft[i];
for(int i=0;i<p;i++)
cin>>mright[i];
cin>>c;
if(c=='='){
for(int i=0;i<p;i++){
big[mright[i]]=small[mright[i]]=-1;//-1表示为真,确认了
big[mleft[i]]=small[mleft[i]]=-1;
}
}
else if(c=='<'){
time++;
for(int i=0;i<p;i++)
if(big[mleft[i]]!=-1)
small[mleft[i]]++;
for(int i=0;i<p;i++)
if(big[mright[i]]!=-1)
big[mright[i]]++;
}
else if(c=='>'){
time++;
for(int i=0;i<p;i++)
if(big[mleft[i]]!=-1)
big[mleft[i]]++;
for(int i=0;i<p;i++)
if(big[mright[i]]!=-1)
small[mright[i]]++;
}
}
int ans,co=0;
//cout<<time<<endl;
for(int i=1;i<=n;i++){
if(big[i]==time||small[i]==time){
ans=i;
co++;
if(co>1)
break;
}
}
//cout<<co<<endl;
if(co==1)
cout<<ans<<endl;
else
cout<<"0"<<endl;
return 0;
}