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 ...
随机推荐
- 【pwnable.kr】passcode
pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是‘&’的锅. #include <stdio.h> ...
- Kali桥接模式下配置静态ip
以管理员身份运行虚拟机 打开控制面板-->网络和Internet-->更改适配器 再在虚拟机处桥接到这个WLAN2 点击 编辑-->编辑虚拟网卡 没有网卡就点上图的添加网络作为桥接网 ...
- [Python3] RSA的加解密和签名/验签实现 -- 使用pycrytodome
Crypto 包介绍: pycrypto,pycrytodome 和 crypto 是一个东西,crypto 在 python 上面的名字是 pycrypto 它是一个第三方库,但是已经停止更新,所以 ...
- JVM探秘:jinfo查看JVM运行时参数
本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 如何查看JVM运行时参数,对于线上JVM调优是很关键的,因为只有知道了当前使用的JVM ...
- 51Nod1085 0-1背包(一维和二维数组实现)
背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细) 题目如下: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积 ...
- Day 1:线程与进程系列问题(一)
一.进程与线程 进程:正在执行的程序称为一个线程,主要负责内存空间的划分. 线程:线程在一个进程中负责代码的执行,就是进程中的一个执行路径. 多线程:在一个进程中有多个线程同时在执行不同的任务(同时指 ...
- pytorch学习问题汇总
问题六: 问题五:这里是怎么得到的? 问题四:为什么会是如下结果? torch.bernoulli(a)怎么是这个结果? 问题1:torch各个类型数据格式如何转换?数据类型在官方文档torch.Te ...
- 面试题:你使用过concurrent包下的那些类?
1.executor接口,使用executor接口的子接口ExecutorService用来创建线程池2.Lock接口下的ReentrantLock类,实现同步,比如三个线程循环打印ABCABCABC ...
- cmd 进入指定文件夹
1.通常情况下,我们要进入其他盘符下的任意目录,需要在CMD窗口运行两次命令:第一次,进入盘符,第二次进入指定目录 #进入D盘 d: #进入D盘下的anaconda目录 cd anacond 2.通过 ...
- vue表单选项框
选项框选的内容在下面显示 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...