Acwing 5471. 数对推理【思维+模拟】

原题链接:https://www.acwing.com/problem/content/5474/

题目描述:

奶牛贝茜和奶牛贝蒂各有一个整数数对。

每个数对都包含两个 1∼9 之间的不同整数。

这两个数对恰好包含一个公共数,即恰好有一个整数同时包含于这两个数对。

初始时,贝茜和贝蒂都只知道自己拥有的数对,而不清楚对方拥有的数对。

它们希望通过网络交流来获知彼此数对的公共数

但是,它们清楚所有交流信息一定会被农夫约翰截获,且约翰也知道这两个数对恰好包含一个公共数。

为了让截获到交流信息的约翰无法获知这个公共数,它们决定采用如下方式加密信息。

贝茜会准备 n 个两两不同的数对,这些数对均包含两个 1∼9 之间的不同整数,其中一个数对恰好是它拥有的数对,它会将这些数对全部发送给贝蒂。

贝蒂会准备 m 个两两不同的数对,这些数对均包含两个 1∼9 之间的不同整数,其中一个数对恰好是它拥有的数对,它会将这些数对全部发送给贝茜。

当然,约翰会将这些数对(以及是谁发送的)全部获知。

请你对给定信息进行判断,并按要求输出:

  • 如果这些信息足以令约翰准确地推断出公共数字,则输出这个公共数字。
  • 如果这些信息不足以令约翰准确地推断出公共数字,但是不论两头奶牛各自拥有哪个数对,都足以令两头奶牛都准确地推断出公共数字,则输出 0
  • 以上都不是,则输出 -1

输入输出描述:

输入格式

第一行包含两个整数 n,m。

第二行包含 n 个两两不同的数对,这些数对均包含两个 1∼9 之间的不同整数,表示贝茜准备的数对。

第三行包含 m 个两两不同的数对,这些数对均包含两个 1∼9 之间的不同整数,表示贝蒂准备的数对。

在本题中,(1,2) 和 (2,1) 视为同一数对。

数据保证双方拥有的数对包含于各自给出的数对当中,且双方拥有的数对恰好包含一个公共数。

输出格式

按照题目要求,输出公共数字或 0 或 -1

数据范围

前 4 个测试点满足 1≤n,m≤3。
所有测试点满足 1≤n,m≤12

输入样例1:
2 2
1 2 3 4
1 5 3 4
输出样例1:
1
输入样例2:
2 2
1 2 3 4
1 5 6 4
输出样例2:
0
输入样例3:
2 3
1 2 4 5
1 2 1 3 2 3
输出样例3:
-1

解题思路:

这个题目的特点就是题目比较长,理解题意比较困难,感觉就是一个阅读理解题,题读懂了就是很简单的一道题,读不懂就会一直wa,这个题目是很容易wa的,我们对三种情况进行分开分析。

首先我们考虑第一种情况,什么时候农夫约翰可以截取到他们的各自数对的公共数呢,我们来画一个图分析一下,分析图如下所示:

如上图所示,上边是a的数对,下边是b的数对,我们对所有数对进行编号,同时红色线连接表示俩个数对恰好有一个公共数,那么什么时候农夫约翰可以截取到俩人的数对的公共数呢,肯定是当a中的每一个数对和b中的数对的所有有红色线连接数对的公共数只有一种,此时可以通过a连接到b的红线知道他们俩个人数对的公共数,或者是当b中的每一个数对和a中的数对的所有有红色线连接数对的公共数只有一种,此时可以通过b连接到a的红线知道他们俩个人数对的公共数。

当上面的第一种情况不成立时,下面分析第二种情况,什么时候俩头牛都可以知道他们的公共数呢,上面图中,1分别和5,6,7都有一个公共数,当这三个公共数不相同时,那么如果a拿出编号为1的数对时,此时a无法知道俩人的公共数是啥,只有当三个数都一样时,a才能知道公共数是啥,也就是说只有a中的每一个数对,该数对和连出去的红线对应数对的公共都一样,此时a才能推断出俩人的公共数,否咋a无法推断出俩人的公共数,b同理。

上述第二种情况不满足,就是第三种情况了,直接输出-1。

时间复杂度:O(n+m)。

空间复杂度:O(n+m)。

cpp代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N=100;int n,m;
int a[N],b[N];void solve(int a[],int b[],int n,int m,unordered_map<int,int>&mp,bool& ok)
{for(int i=1;i<=n*2;i+=2){int x1=a[i],y1=a[i+1];int v1=0,v2=0;for(int j=1;j<=m*2;j+=2){int x2=b[j],y2=b[j+1];if(x1==x2 && y1!=y2){v1++;}if(x1!=x2 && y1==y2){v2++;}if(x1==y2 && y1!=x2){v1++;}if(x1!=y2 && y1==x2){v2++;}}if(v1!=0 && v2!=0){  //当出现某个数对连出去的红线,出现了俩种公共线,说明情况二肯定是不满足的ok=true;}if(v1!=0){mp[x1]++;}if(v2!=0){mp[y1]++;}}
}
int main()
{cin>>n>>m;for(int i=1;i<=n*2;i++)cin>>a[i];for(int i=1;i<=m*2;i++)cin>>b[i];unordered_map<int,int>mp1,mp2; //mp1记录a连出去的红线对应数对的公共数,mp2记录b的。bool ok1=false,ok2=false;  //ok1记录a每个数对连出去的红线对应数对的公共数是否相同,b同理对应b连出去红线到asolve(a,b,n,m,mp1,ok1),solve(b,a,m,n,mp2,ok2);  //对a,b分别进行处理if(mp1.size()==1 || mp2.size()==1){ //情况一if(mp1.size()==1)cout<<mp1.begin()->first<<endl;else cout<<mp2.begin()->first<<endl;}else if(!ok1 && !ok2){ //情况2cout<<0<<endl;}else {  //情况3cout<<-1<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/475185.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL有哪些优化方式

参考&#xff1a;等不及了&#xff0c;冲字节去了&#xff01;

基于SpringBoot+Vue的零食零售管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

利用 pt-archiver 实现数据库归档功能

文章目录 一、前言关于Percona 二、Percona Toolkit安装 percona-toolkit&#xff1a;pt-archiver 归档命令的使用格式&#xff1a;示例&#xff1a; 三、归档步骤&#xff1a;1&#xff09;、创建归档数据库和归档表方式一(推荐)&#xff1a;这种方式的优缺点&#xff1a; 方式…

代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 细节&#xff1a; 1. 首先根据题意就是只有5.的成本&#xff0c;然后就开始找钱&#xff0c;找钱也是10.和5. 2. 直接根据10 和 5 进行变量定义&#xff0c;然后去循环…

阿里云短信验证码的两个坑

其它都参照官网即可&#xff0c;其中有两个坑需要注意&#xff1a; 1、除去官网pom引用的包之外&#xff0c;还需要引用以下包&#xff1a; <dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifact…

21种matlab信号分解方法汇总

21中信号分解方法汇总 CEEMD(互补集合经验模态分解)CEEMDAN(自适应噪声完备集合经验模态分解) EEMD(集合经验模态分解&#xff09;EMD(经验模态分解)ESMD(极点对称模态分解&#xff09;EWT(经验小波变换分解)FEEMD(快速EEMD分解)ICEEMDAN(改进自适应噪声完备集合经验模态分解)L…

实现项目干系人间的共同利益 5大方法

项目干系人是那些对项目有直接或间接利益关系的个人、团队或组织。实现项目干系人间的共同利益&#xff0c;可以促进各方之间的合作和协调&#xff0c;有助于及时解决问题&#xff0c;减少冲突&#xff0c;可能会提供更多的支持和资源&#xff0c;有助于项目按计划顺利进行&…

数据结构与算法java—算法时间复杂度计算

课程安排 一、数据结构与算法的重要性 数据结构&#xff1a;数据与数据间的关系 1.1、数据结构的研究内容 数据结构&#xff1a;研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。 非数值计算问题中的数学模型不是数学方程&#xff0c;而是诸如…

Linux第58步_备份busybox生成rootfs根文件系统

备份busybox生成rootfs根文件系统 打开终端 输入“ls回车” 输入“cd linux/回车” 输入“ls回车”&#xff0c;产看“linux”目录下的文件和文件夹 输入“cd nfs/回车”&#xff0c;切换到“nfs”目录 输入“ls回车”&#xff0c;产看“nfs”目录下的文件和文件夹 输入…

前端vue金额用逗号分隔

实现效果 代码 template部分 <el-input v-model"state.val"></el-input><div>{{ priceFor(state.val) }}</div> js部分 const state reactive({ val: });const priceFor (val)> {if(!val){return }else if(val.length<4){return…

day 20 (标准IO 与 文件IO)

标准IO与文件IO的区别 标准IO和文件IO的区别&#xff1a;1.标准IO是库函数,是对系统调用的封装2.文件IO是系统调用,是Linux内核中的函数接口3.标准IO是有缓存的4.文件IO是没有缓存的IO:b cd - 标准IOl s p文件IO:1.操作步骤&#xff1a;打开 -> 读/写 -> 关闭2.打开文件…

在线js代码格式化美化工具

在线js代码格式化 - BTool在线工具软件&#xff0c;为开发者提供方便。在线js代码格式化工具&#xff0c;可以对一段无格式的js代码进行格式化操作。本工具提供了多种格式化选项&#xff08;如&#xff1a;缩进、空格、括号位置等&#xff09;&#xff0c;使您能够根据自己的编…