A题:多国语言
思路:记录叫的次数和分别回应的次数, cnt 统计几次叫满(都回应了),k 统计几次至少回应了一次,对比即可。
代码:
#include<cstdio>
#include<iostream>
#include<map>
#include<cstring>
#include<bitset>
using namespace std;
const int N=1e5+5;
int n,m,T,cnt,a[N],b[N],v[N],num[N];
int main(){
scanf("%d",&T);
while(T--){
memset(num,0,sizeof(num));
memset(v,0,sizeof(v));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
++num[a[i]];//num[a[i]]:该语言牛牛叫了多少次
}
for(int i=1;i<=n;++i){
scanf("%d",&b[i]);
if(b[i]==1) ++v[a[i]];//v[a[i]]:被回应的次数
}
int dire=0,k=0,cnt=0;
for(int i=1;i<=m;++i)
if(v[i]>0&&num[i]>0){
++k;//该种语言至少被回应了一次
if(num[i]==v[i]) ++cnt,dire=i;//对该种语言每次都做出了回应
}
if(k>=2) printf("^v^\n");//猫对≥2种语言的叫声做出了回应
else if(k==0) printf(">-<\n");//猫根本就不回应牛牛的任意一次叫声
else {//对1种语言做出过回应
if(cnt>0) printf("%d\n",dire);//对该种语言的每次叫声都做出回应
else printf("^v^\n");//没有对每次该语言的叫声做出回应
}
}
return 0;
}