CodeForces 993B Open Communication(STL 模拟)
https://codeforces.com/problemset/problem/993/b


这题不难,暴力就能过,主要是题意太难懂了
题意:
现在有两个人,每个人手中有一对数,第一个人手中的数是n组数中的一对,第二个人手中的数是m组数中的一对
如果这两组数中只有一个数字相等,这该数为共享数字,怎样输出看思路吧
思路:
其实就是n对和m对数中,找共享数字,直接看样例吧:
在第一示例中,第一参与者通信对(1,2)和(3,4),第二参与者通信对(1,5),(3,4)。因为我们知道,他们收到的实际对共享一个数字,这不可能是他们都有(3,4)。因此,第一个参与者有(1,2),第二个参与者有(1,5),此时您已经知道共享号码是1。
在第二个例子中,第一个参与者有(1,2),第二个有(1,5),或者第一个有(3,4),第二个有(6,4)。在第一种情况下,他们都知道共享号码是1,在第二种情况下,他们都知道共享号码是4。你没有足够的信息来区分1和4。
在第三种情况下,如果第一个参与者被给予(1,2),他们不知道共享号码是什么,因为从他们的角度来看,第二个参与者可能被给予(1,3),在这种情况下共享号码是1,或者(2,3),在这种情况下共享号码是2。虽然第二个参与者确实知道数字,但您和第一个参与者都不知道,因此输出为-1。
比如 第一个人有一对数(a,b),第二个人有一对数(c,d)假设没对数第一个数均小于第二个数,题目保证a!=b&&c!=d;
如果出现a==c&&b==d,则直接跳过这组去判断下一组;
如果a==c&&b!=d || a==d&&b!=c ,则a为一个共享数字
同理b==d&&a!=c || b==d&&a!=d ,b为一个共享数字
如果在比较时,一组数(x,y)中x和y均为共享数字,则输出-1;
否则看共享数字的个数,如果只有一个共享数字,则输出这个共享数字,否则输出0;
注意:两个人都要遍历对方一遍
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+;
//const double PI=acos(-1);
#define Bug cout<<"---------------------"<<endl
const int maxn=1e5+;
using namespace std; vector<pair<int,int> > vt1;//第一个人的数
vector<pair<int,int> > vt2;//第二个人的数 int main()
{
int n,m;
scanf("%d %d",&n,&m);
//输入
for(int i=;i<=n;i++)
{
int x,y;
scanf("%d %d",&x,&y);
vt1.push_back(make_pair(min(x,y),max(x,y)));//pair的first中为小的数
}
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d %d",&x,&y);
vt2.push_back(make_pair(min(x,y),max(x,y)));
}
int f1[]={};
int tag=;//判断一组中两个数是否均为共享数字
for(vector<pair<int,int> >::iterator it1=vt1.begin();it1!=vt1.end();it1++)//遍历第一个人
{
int a=it1->first;//第一个人这对数中的较小值
int b=it1->second;//第一个人这对数中的较大值
int f[]={};//看该组两个数字是否均为共享数字
for(vector<pair<int,int> >::iterator it2=vt2.begin();it2!=vt2.end();it2++)
{
int c=it2->first;//第二个人这对数中的较小值
int d=it2->second;//第二个人这对数中的较大值
if(a==c&&b==d)
continue;
if(a==c&&b!=d)
{
f1[a]++;//共享数字a出现次数增加
f[]=;//第一个数为共享数字
}
else if(b==c)
{
f1[b]++;//共享数字b出现次数增加
f[]=;//第二个数为共享数字
}
else if(a==d)
{
f1[a]++;//共享数字a出现次数增加
f[]=;//第一个数为共享数字
}
else if(b==d)
{
f1[b]++;//共享数字b出现次数增加
f[]=;//第二个数为共享数字
}
}
if(f[]&&f[])//如果第一个人该组数字两个数均为共享数字,结果为-1
tag=;
}
int f2[]={};//其实没用
for(vector<pair<int,int> >::iterator it1=vt2.begin();it1!=vt2.end();it1++)//再从第二个人跑一遍
{
int a=it1->first;
int b=it1->second;
int f[]={};
for(vector<pair<int,int> >::iterator it2=vt1.begin();it2!=vt1.end();it2++)
{
int c=it2->first;
int d=it2->second;
if(a==c&&b==d)
continue;
if(a==c&&b!=d)
{
f2[a]++;
f[]=;
}
else if(b==c)
{
f2[b]++;
f[]=;
}
else if(a==d)
{
f2[a]++;
f[]=;
}
else if(b==d)
{
f2[b]++;
f[]=;
}
}
if(f[]&&f[])
tag=;
}
int num=;//共享数字的个数
int ans=;//如果共享数字只有一个,ans则为该共享数字
for(int i=;i<=;i++)
{
if(f1[i])
{
num++;
ans=i;
}
}
if(tag)
printf("-1\n");
else
{
if(num==)//共享数字有且只有一个
printf("%d\n",ans);
else//共享数字有多个
printf("0\n");
}
return ;
}
CodeForces 993B Open Communication(STL 模拟)的更多相关文章
- Codeforces 528A Glass Carving STL模拟
题目链接:点击打开链接 题意: 给定n*m的矩阵.k个操作 2种操作: 1.H x 横向在x位置切一刀 2.V y 竖直在y位置切一刀 每次操作后输出最大的矩阵面积 思路: 由于行列是不相干的,所以仅 ...
- stl+模拟 CCF2016 4 路径解析
// stl+模拟 CCF2016 4 路径解析 // 一开始题意理解错了.... #include <iostream> #include <string> #include ...
- CodeForces.158A Next Round (水模拟)
CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...
- [Codeforces 1246B] Power Products (STL+分解质因数)
[Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ...
- Educational Codeforces Round 24 A 水 B stl C 暴力 D stl模拟 E 二分
A. Diplomas and Certificates time limit per test 1 second memory limit per test 256 megabytes input ...
- CF--思维练习--CodeForces - 220C Little Elephant and Shifts (STL模拟)
ACM思维题训练集合 The Little Elephant has two permutations a and b of length n, consisting of numbers from ...
- Codeforces 799B - T-shirt buying(STL)
题目链接:http://codeforces.com/problemset/problem/799/B 题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种 ...
- Codeforces 747C:Servers(模拟)
http://codeforces.com/problemset/problem/747/C 题意:有n台机器,q个操作.每次操作从ti时间开始,需要ki台机器,花费di的时间.每次选择机器从小到大开 ...
- Codeforces 740A. Alyona and copybooks 模拟
A. Alyona and copybooks time limit per test: 1 second memory limit per test: 256 megabytes input: st ...
随机推荐
- Python之日志处理(logging模块)《转载》
Python之日志处理(logging模块): https://www.cnblogs.com/yyds/p/6901864.html
- C语言-逃逸字符、类型转换和布尔类型
C语言-逃逸字符 逃逸字符是用来表达无法印出来的控制字符或者特殊字符,它由一个反斜杠""开头,后面跟上另一个字符,这两个字符合起来,组成一个字符. \b是backspace,在su ...
- Python 官方推荐的一款打包工具
译者:Jiong 链接: https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipenv 在thoughtbo ...
- “设计型web前端与开发型web前端”有哪些区别?
学web前端,你弄懂开发型web前端和设计型web前端的区别了吗?今天给大家梳理一下设计型web前端做什么?都要学习什么? 想必大家也会遇到这种情况,要做一个项目,产品经理说产品原型图已经画好了,让我 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 修饰符类型
C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. 下面列出了数据类型修饰符: signed unsigned lo ...
- Firefly-RK3399 上编译安装 OpenCV 3
原文转自:http://dev.t-firefly.com/thread-12143-1-1.html OS:官方固件 Xubuntu 16.04 1) Install 1.1) Required P ...
- CSS(3)之 less 和rem
less 预编译脚本语言. LESS 语法 less语法2 LESS中文 rem rem的适配原理 rem 是相对于页面根源素html的字体大小的一个尺寸单位 页面内容可以使用rem为单位,那么htm ...
- 1.4CAD2017绘图基础
1.新建(ctrl+n) 命令:new 回车——默认样板(acadiso.dwt) 2.打开(ctr+o) 3.保存(ctrl+S) 4.鼠标的应用: 左键:点击拖选等: 中间滚轮:a.滚动,放大缩小 ...
- git commit 后 尚未push到远程,撤销commit
执行commit后,还没执行push时,想要撤销这次的commit,该怎么办? 解决方案: 使用命令: git reset --soft HEAD^ 这样就成功撤销了commit,如果想要连着add也 ...
- 18. docker 容器部署 python-redis
1. 编写 Vagrantfile 并创建虚拟机 并虚拟机绑定外部 192.168.205.10:8888 ip:port # -*- mode: ruby -*- # vi: set ft=ruby ...