第一题 模拟即可。具体解释看注释

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;
}