zoukankan      html  css  js  c++  java
  • CF993B Solution

    题目链接

    题解

    可以发现,只有当一位测试者(设其为甲)的1对数字同时可以与另一位测试者(设其为乙)的2个在不同对中的数字相等时,乙无法确定甲的数字,应输出-1。而当甲有\(>1\)个在不同对中的数字与乙的\(>1\)个在不同对中的数字相等时,我们无法确定他们的数字,应输出0。若不符合上述条件,则输出甲、乙中唯一一个相等且在不同对的数字即可。

    具体实现:可以将甲、乙的数字分别存入两个下标从\(0\)开始的数组,与下表为\(i\)的数在同一数对中的数下标为\(i^{\wedge} 1\),这样不用将数对中的数分开处理。注意当数据同时满足-1和0的条件时,-1的优先级大于0的优先级,因此需存储当前满足的条件,最后输出。此外,相同数字可能会在同一人的不同数对中出现多次,需判断。甲、乙是否可以判断需分两次处理,因为可能会出现一方无法判断的情况(如题目样例3)。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=30;
    int a[N],b[N];
    bool pa[N],pb[N]; //pa/pb[i]:a/b数组中下标为i的元素是否(1/0)在b/a数组中有相同的数字
    int main()
    {
    	int n,m,ans=0; 
    	bool qwq=0,qaq=0;//qwq/qaq:是否(1/0)满足-1/0的条件
    	scanf("%d%d",&n,&m);
    	for(int i=0;i<2*n;i++) scanf("%d",&a[i]);
    	for(int i=0;i<2*m;i++) scanf("%d",&b[i]);
    	for(int i=0;i<2*n;i++)//a测试者
    	{
    		for(int j=0;j<2*m;j++)
    			if(a[i]==b[j] && a[i^1]!=b[j^1]) pa[i]=1;//需判断两个数对不完全相同
    		if(pa[i]&pa[i^1]) qwq=1;
    		if(pa[i] && ans && ans!=a[i]) qaq=1;
    		else if(pa[i]) ans=a[i];
    	}
    	for(int i=0;i<2*m;i++)//b测试者
    	{
    		for(int j=0;j<2*n;j++)
    			if(b[i]==a[j] && b[i^1]!=a[j^1]) pb[i]=1;
    		if(pb[i]&pb[i^1]) qwq=1;
            //因为输出0或结果的情况a、b的答案是一样的,不用再次更新
    	}
    	if(qwq==1) printf("-1");
    	else if(qaq==1) printf("0");
    	else printf("%d",ans);
    	return 0;	
    }
    
  • 相关阅读:
    Oracle第五周测验
    软件测试第五周
    Oracle第四周作业
    c++第二章测试
    软件测试第四章
    软件测试 第三章
    Centos 安装.NET Core环境
    .net core 集成极光推送
    Swagger添加文件上传测试
    linux firewall
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14354569.html
Copyright © 2011-2022 走看看