UVA10763 交换学生 Foreign Exchange 题解
题目链接:
https://www.luogu.org/problemnew/show/UVA10763
题目分析:
本题我首先想到的做法是把每一个数都map一下,然后互相判断,例如a,b两人准备交换,那么m[a]=b,m[b]=a,最后再判断如果m[m[a]]=a就行,但是因为一个学生在双方都同意的情况下可以先后与多个学生交换,所以我的做法是:
先把每对学生都按照先小后大的顺序排好
if(a[i].x>a[i].y)swap(a[i].x,a[i].y);
然后把所以学生交换对都进行排序
sort(a+1,a+n+1,cmp);
其中排序按照先看第一个学生编号的大小,再看第二个。
int cmp(const ben &a,const ben &b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
然后,即使有一人同多人交换,那么此时一对学生交换对的下一对应该是相同的了。
当然,因为交换是双向的,我们可以中间加一个特判
if(n%2==1)
{
printf("NO\n");
continue;
}
从而省去没必要的计算(注意此判断要在一组输入结束后)
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct ben
{
int x,y;
}a[500005];
int cmp(const ben &a,const ben &b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int main()
{
int n;
while(scanf("%d",&n)==1&&n!=0)
{
int cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
if(a[i].x>a[i].y)swap(a[i].x,a[i].y);
}
if(n%2==1)
{
printf("NO\n");
continue;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i=i+2)
{
if(a[i].x==a[i+1].x&&a[i].y==a[i+1].y)
{
cnt++;
}
}
if(cnt==n/2)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
求赞~
UVA10763 交换学生 Foreign Exchange 题解的更多相关文章
- UVA10763交换学生
题意: 给你N组关系,每组关系是a,b,最后问你所有的a,b出现的次数和所有的b,a出现的此时是否全部都一样. 思路: 水题,直接开了个二维的map标记,map<int ...
- Foreign Exchange(交换生换位置)
Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enth ...
- [刷题]算法竞赛入门经典(第2版) 5-4/UVa10763 - Foreign Exchange
题意:有若干交换生.若干学校,有人希望从A校到B校,有的想从B到C.C到A等等等等.如果有人想从A到B也刚好有人想从B到A,那么可以交换(不允许一对多.多对一).看作后如果有人找不到人交换,那么整个交 ...
- UVA 10763 Foreign Exchange 出国交换 pair+map
题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a). 放在贪心这其实有点像检索. 用stl做,map+pair. 记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己 ...
- 算法习题---5-4交换学生(UVa10763)
一:题目 有一组学生,他们手中分别有自己学校和想要去的目标学校(A,B).为了成功的交换学生,必须保证这一组学生中必须每两个人之间满足 s1 (A,B) 和 s2 (B,A).即两者原来和目标学校相对 ...
- uva 10763 Foreign Exchange(排序比较)
题目连接:10763 Foreign Exchange 题目大意:给出交换学生的原先国家和所去的国家,交换成功的条件是如果A国给B国一个学生,对应的B国也必须给A国一个学生,否则就是交换失败. 解题思 ...
- uva:10763 - Foreign Exchange(排序)
题目:10763 - Foreign Exchange 题目大意:给出每一个同学想要的交换坐标 a, b 代表这位同学在位置a希望能和b位置的同学交换.要求每一位同学都能找到和他交换的交换生. 解题思 ...
- UVA Foreign Exchange
Foreign Exchange Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Your non ...
- Foreign Exchange
10763 Foreign ExchangeYour non-profit organization (iCORE - international Confederation of Revolver ...
随机推荐
- C# System.Windows.Forms.WebBrowser中判断浏览器内核和版本
参考 [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器 利用js来判断 namespac ...
- Android实现dialog时候弹出软键盘dialog移位问题
Window win = getWindow(); WindowManager.LayoutParams params = win.getAttributes(); win.setSoftInputM ...
- nyoj7——街区最短问题
描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相等. 用(x,y)来表示住户坐在的街区. 例如(4,20),表示用户在东西方向第4个街道, ...
- Java Date Calendar DateFormat Details
From https://www.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html Date and Time - Creat ...
- SSL Converter & Formats
https://www.sslshopper.com/ssl-converter.html PEM Format The PEM format is the most common format th ...
- QAbstractItemView为截断的项显示ToolTip(使用事件过滤)
在Qt中想要为QAbstractItemView中长度不够而使得内容被截断的项显示ToolTip,Qt官网有一篇文章介绍使用事件过滤器来显示太长的项,但是没有涵盖图标的情况.显示列头项太长的情况等等, ...
- QtZint编译过程记录(要使用 QTMAKE_CFLAGS += /TP 参数)
1,下载zint后,在zint-2.4.3\win32\vcx目录下找到zlib.props和libpng.props文件,分别改为zlib和libpng的源码目录.这2个开源库最好是找工程中使用的版 ...
- Z Order of Controls in Delphi VCL
Get and set the Z Order of controls at runtime in Delphi VCL. If you are looking for a FireMonkey so ...
- 凤年读史27:普鲁士vs德意志
孙宇 普鲁士,是熟悉历史的人都知道的一个名词,它与德国关系密切.似乎在某些情境中,普鲁士就是德国,而在另一些场合,普鲁士和德国又不一样,有所区别.那么普鲁士到底是什么?它和德国到底是什么关系? 普鲁士 ...
- OSGEarth环境搭建
1.下载OsgEaarth2.8源码 https://codeload.github.com/gwaldron/osgearth/legacy.zip/osgearth-2.8 2.下载perl 编译 ...