码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 993B Open Communication(STL 模拟)

时间:2019-10-20 18:09:55      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:tac   共享   color   fir   mmu   参与者   tor   ==   math   

 

https://codeforces.com/problemset/problem/993/b

技术图片

 

 技术图片

 

题意:

现在有两个人,每个人手中有两个数,其中两个人手中的数有一个是相同的(另一个不一样),

现在第一个人会给你n对数,保证其中一对就是他手上的两个数,第二个人会给你m对数,保证其中一对是他手上的两个数。

现在你作为一个旁观者,如果能分辨出相同的数,则输出它,如果你知道手上有牌的人知道相同的数,那么输出0,其余则输出-1。

 

思路:

其实就是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。

 

注意:要跑两遍

 

代码如下:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <iostream>
  4 #include <string>
  5 #include <math.h>
  6 #include <algorithm>
  7 #include <vector>
  8 #include <stack>
  9 #include <queue>
 10 #include <set>
 11 #include <map>
 12 #include <sstream>
 13 const int INF=0x3f3f3f3f;
 14 typedef long long LL;
 15 const int mod=1e9+7;
 16 //const double PI=acos(-1);
 17 #define Bug cout<<"---------------------"<<endl
 18 const int maxn=1e5+10;
 19 using namespace std;
 20 
 21 vector<pair<int,int> > vt1;
 22 vector<pair<int,int> > vt2;
 23 
 24 int main()
 25 {
 26     int n,m;
 27     scanf("%d %d",&n,&m);
 28     for(int i=1;i<=n;i++)
 29     {
 30         int x,y;
 31         scanf("%d %d",&x,&y);
 32         vt1.push_back(make_pair(min(x,y),max(x,y)));
 33     }
 34     for(int i=1;i<=m;i++)
 35     {
 36         int x,y;
 37         scanf("%d %d",&x,&y);
 38         vt2.push_back(make_pair(min(x,y),max(x,y)));
 39     }
 40     int f1[10]={0};
 41     int tag=0;//判断一组中两个数是否均为共享数字    
 42     for(vector<pair<int,int> >::iterator it1=vt1.begin();it1!=vt1.end();it1++)
 43     {
 44         int a=it1->first;
 45         int b=it1->second;
 46         int f[2]={0};//看该组两个数字是否均为共享数字 
 47         for(vector<pair<int,int> >::iterator it2=vt2.begin();it2!=vt2.end();it2++)
 48         {
 49             int c=it2->first;
 50             int d=it2->second;
 51             if(a==c&&b==d)
 52                 continue;
 53             if(a==c&&b!=d)
 54             {
 55                 f1[a]++;
 56                 f[0]=1;
 57             }
 58             else if(b==c)
 59             {
 60                 f1[b]++;
 61                 f[1]=1;
 62             }    
 63             else if(a==d)
 64             {
 65                 f1[a]++;
 66                 f[0]=1;
 67             }
 68             else if(b==d)
 69             {
 70                 f1[b]++;
 71                 f[1]=1;    
 72             }
 73         }
 74         if(f[0]&&f[1])
 75             tag=1;
 76     }
 77     int f2[10]={0};
 78     for(vector<pair<int,int> >::iterator it1=vt2.begin();it1!=vt2.end();it1++)//再从第二个人跑一遍 
 79     {
 80         int a=it1->first;
 81         int b=it1->second;
 82         int f[2]={0};
 83         for(vector<pair<int,int> >::iterator it2=vt1.begin();it2!=vt1.end();it2++)
 84         {
 85             int c=it2->first;
 86             int d=it2->second;
 87             if(a==c&&b==d)
 88                 continue;
 89             if(a==c&&b!=d)
 90             {
 91                 f2[a]++;
 92                 f[0]=1;
 93             }
 94             else if(b==c)
 95             {
 96                 f2[b]++;
 97                 f[1]=1;
 98             }    
 99             else if(a==d)
100             {
101                 f2[a]++;
102                 f[0]=1;
103             }
104             else if(b==d)
105             {
106                 f2[b]++;
107                 f[1]=1;    
108             }
109         }
110         if(f[0]&&f[1])
111             tag=1;
112     }
113     int num=0;
114     int ans=0;
115     for(int i=1;i<=9;i++)
116     {
117         if(f1[i])
118         {
119             num++;
120             ans=i;
121         }
122     }
123     if(tag)
124         printf("-1\n");
125     else
126     {
127         if(num==1)
128             printf("%d\n",ans);
129         else
130             printf("0\n");    
131     }
132     return 0;
133 }

 

CodeForces 993B Open Communication(STL 模拟)

标签:tac   共享   color   fir   mmu   参与者   tor   ==   math   

原文地址:https://www.cnblogs.com/jiamian/p/11708145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!