第一题 模拟即可。具体解释看注释
using namespace std;
const int N=100010;
int a[N],ton1[N],ton2[N]; //ton1询问次数,ton2回答次数
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
memset(ton1,0,sizeof(ton1));
memset(ton2,0,sizeof(ton2));
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
ton1[a[i]]++;
}
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
ton2[a[i]]+=x;
}
int sum1=0,sum2=0,sum3=0,id=1; //sum1全回答个数,sum2不回答个数,sum3询问问题个数
bool pd=true; //如果回答次数不等于询问次数直接修改
for(int i=1;i<=m;i++)
{
if(ton1[i]) //有询问
{
sum3++;
if(ton1[i]==ton2[i]) //全部回答
{
sum1++;
id=i;
}
if(ton2[i]==0) sum2++; //全部不回答
if(ton1[i]!=ton2[i]&&ton2[i]>0) //有的回答有的不回答
{
pd=false;
puts("^v^");
break;
}
}
}
if(pd)
{
if(sum1==1) printf("%d\n",id); //表示只有一个全回答
if(sum1>1) puts("^v^"); //表示有两个或以上回答
if(sum2==sum3) puts(">-<"); //表示全部不回答
}
}
return 0;
}