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 模拟)的更多相关文章

  1. Codeforces 528A Glass Carving STL模拟

    题目链接:点击打开链接 题意: 给定n*m的矩阵.k个操作 2种操作: 1.H x 横向在x位置切一刀 2.V y 竖直在y位置切一刀 每次操作后输出最大的矩阵面积 思路: 由于行列是不相干的,所以仅 ...

  2. stl+模拟 CCF2016 4 路径解析

    // stl+模拟 CCF2016 4 路径解析 // 一开始题意理解错了.... #include <iostream> #include <string> #include ...

  3. CodeForces.158A Next Round (水模拟)

    CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...

  4. [Codeforces 1246B] Power Products (STL+分解质因数)

    [Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ...

  5. 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 ...

  6. 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 ...

  7. Codeforces 799B - T-shirt buying(STL)

    题目链接:http://codeforces.com/problemset/problem/799/B 题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种 ...

  8. Codeforces 747C:Servers(模拟)

    http://codeforces.com/problemset/problem/747/C 题意:有n台机器,q个操作.每次操作从ti时间开始,需要ki台机器,花费di的时间.每次选择机器从小到大开 ...

  9. Codeforces 740A. Alyona and copybooks 模拟

    A. Alyona and copybooks time limit per test: 1 second memory limit per test: 256 megabytes input: st ...

随机推荐

  1. Python之日志处理(logging模块)《转载》

    Python之日志处理(logging模块): https://www.cnblogs.com/yyds/p/6901864.html

  2. C语言-逃逸字符、类型转换和布尔类型

    C语言-逃逸字符 逃逸字符是用来表达无法印出来的控制字符或者特殊字符,它由一个反斜杠""开头,后面跟上另一个字符,这两个字符合起来,组成一个字符. \b是backspace,在su ...

  3. Python 官方推荐的一款打包工具

    译者:Jiong 链接: https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipenv 在thoughtbo ...

  4. “设计型web前端与开发型web前端”有哪些区别?

    学web前端,你弄懂开发型web前端和设计型web前端的区别了吗?今天给大家梳理一下设计型web前端做什么?都要学习什么? 想必大家也会遇到这种情况,要做一个项目,产品经理说产品原型图已经画好了,让我 ...

  5. 吴裕雄--天生自然C++语言学习笔记:C++ 修饰符类型

    C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. 下面列出了数据类型修饰符: signed unsigned lo ...

  6. Firefly-RK3399 上编译安装 OpenCV 3

    原文转自:http://dev.t-firefly.com/thread-12143-1-1.html OS:官方固件 Xubuntu 16.04 1) Install 1.1) Required P ...

  7. CSS(3)之 less 和rem

    less 预编译脚本语言. LESS 语法 less语法2 LESS中文 rem rem的适配原理 rem 是相对于页面根源素html的字体大小的一个尺寸单位 页面内容可以使用rem为单位,那么htm ...

  8. 1.4CAD2017绘图基础

    1.新建(ctrl+n) 命令:new 回车——默认样板(acadiso.dwt) 2.打开(ctr+o) 3.保存(ctrl+S) 4.鼠标的应用: 左键:点击拖选等: 中间滚轮:a.滚动,放大缩小 ...

  9. git commit 后 尚未push到远程,撤销commit

    执行commit后,还没执行push时,想要撤销这次的commit,该怎么办? 解决方案: 使用命令: git reset --soft HEAD^ 这样就成功撤销了commit,如果想要连着add也 ...

  10. 18. docker 容器部署 python-redis

    1. 编写 Vagrantfile 并创建虚拟机 并虚拟机绑定外部 192.168.205.10:8888 ip:port # -*- mode: ruby -*- # vi: set ft=ruby ...