uva 10763 Foreign Exchange <"map" ,vector>
Foreign Exchange
Your non-profit organization (iCORE - international Confederation of Revolver Enthusiasts) coordinates a very successful foreign student exchange program. Over the last few years, demand has sky-rocketed and now you need assistance with your task.
The program your organization runs works as follows: All candidates are asked for their original location and the location they would like to go to. The program works out only if every student has a suitable exchange partner. In other words, if a student wants to go from A to B, there must be another student who wants to go from B to A. This was an easy task when there were only about 50 candidates, however now there are up to 500000 candidates!
Input
The input file contains multiple cases. Each test case will consist of a line containing n - the number of candidates (1≤n≤500000), followed by n lines representing the exchange information for each candidate. Each of these lines will contain 2 integers, separated by a single space, representing the candidate's original location and the candidate's target location respectively. Locations will be represented by nonnegative integer numbers. You may assume that no candidate will have his or her original location being the same as his or her target location as this would fall into the domestic exchange program. The input is terminated by a case where n = 0; this case should not be processed.
Output
For each test case, print "YES" on a single line if there is a way for the exchange program to work out, otherwise print "NO".
Sample Input
10
1 2
2 1
3 4
4 3
100 200
200 100
57 2
2 57
1 2
2 1
10
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
0
Sample Output
YES
NO
用map写,写了一大截才发现不可以用map的,因为 map不可以存储相同的键值,这是用map写了一半的代码
#include <cstdio>
#include <iostream>
#include <map>
using namespace std; map<int,int> students;
map<int,int>::iterator t, pos1, pos2; int main()
{
int T;
while(scanf("%d",&T) == ){
if(T == )break;
int a,b; for(int i = ; i < T; i++){
scanf("%d%d",&a,&b);
students[a]=b;
} int n = students.size(), i = ; for(t = students.begin(); i < n; t++, i++){ cout<<"begin-----------------------"<<endl;
if((*t).second == )continue; if(students[(*t).second] == NULL){
cout<<(*t).second<<" "<<students[(*t).second]<<endl;
cout<<"NO"<<endl;
break;
} else{ a = students[(*t).second];
cout<<a<<" ++ "<<students[a]<<" -- "<<(*t).first<<endl; if(a == (*t).first){
//cout<<"111 "<<(*t).second<<endl; pos1 = students.find((*t).second);
pos2 = students.find((*t).first);
(*pos1).second = ;
(*pos2).second = ; //cout<<"222 "<<(*t).first<<endl;
}
} } if(students.empty())cout<<"YES"<<endl; }
//system("pause");
return ;
}
用vector做即可
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std; vector<int>student1;
vector<int>student2; int main()
{
int T;
while(scanf("%d",&T) == ){
if(T == )break; student1.clear();
student2.clear(); int a,b; for(int i = ;i < T; i++){
cin>>a>>b;
student1.push_back(a);
student2.push_back(b);
} for(int i = ;i < T; i++){ if(student1[i] == )continue; for(int j = i+;j <T; j++){ if(student2[j] == )continue; if(student1[i] == student2[j]){ if(student2[i] == student1[j])student1[i] = student1[j] = student2[i] = student2[j] = ;
else{
student2[j] = student2[i];
student1[i] = student2[i] = ;
}
}
}
} int k = ; for(int i = ;i < T; i++){
if(student1[i] != &&student2[i] != ){
k = ;
break;
}
} if(k)cout<<"YES"<<endl;
else cout<<"NO"<<endl; }
//system("pause");
return ;
}
uva 10763 Foreign Exchange <"map" ,vector>的更多相关文章
- UVA 10763 Foreign Exchange 出国交换 pair+map
题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a). 放在贪心这其实有点像检索. 用stl做,map+pair. 记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己 ...
- uva 10763 Foreign Exchange(排序比较)
题目连接:10763 Foreign Exchange 题目大意:给出交换学生的原先国家和所去的国家,交换成功的条件是如果A国给B国一个学生,对应的B国也必须给A国一个学生,否则就是交换失败. 解题思 ...
- UVA 10763 Foreign Exchange
Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description Your non- ...
- UVa 10763 Foreign Exchange(map)
Your non-profitorganization (iCORE - international Confederationof Revolver Enthusiasts) coordinates ...
- uva:10763 - Foreign Exchange(排序)
题目:10763 - Foreign Exchange 题目大意:给出每一个同学想要的交换坐标 a, b 代表这位同学在位置a希望能和b位置的同学交换.要求每一位同学都能找到和他交换的交换生. 解题思 ...
- 【UVA】10763 Foreign Exchange(map)
题目 题目 分析 没什么好说的,字符串拼接一下再放进map.其实可以直接开俩数组排序后对比一下,但是我还是想熟悉熟悉map用法. 呃400ms,有点慢. 代码 #include < ...
- Foreign Exchange
10763 Foreign ExchangeYour non-profit organization (iCORE - international Confederation of Revolver ...
- UVA Foreign Exchange
Foreign Exchange Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Your non ...
- Foreign Exchange(交换生换位置)
Foreign Exchange Your non-profit organization (iCORE - international Confederation of Revolver Enth ...
随机推荐
- poj3579 二分搜索+二分查找
Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5468 Accepted: 1762 Descriptio ...
- C语言中的memset函数和数组指针
代码: #include <iostream> #include <cstring> using namespace std; int main(){ ] = {}; mems ...
- python进行base64编解码
[转] 直接上代码 import base64 fin = open(r"D:\2.zip", "rb") fout = open(r"D:\2.x. ...
- 我的django之旅(二)模板和静态文件
我的django之旅(二)模板和静态文件 标签(空格分隔): django 1.为什么要使用模板 在上一篇博文中,提到了HttpReponse,但是HttpReponse只能传送字符串,如果要构建一个 ...
- JS继承六大模式
1.原型链 function SuperType(){this.property = true;} SuperType.prototype.getSuperValue = function(){ret ...
- ByteArrayOutputStream的用法
ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的 ...
- LeetCode_Surrounded Regions
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 做10年Windows程序员与做10年Linux程序员的区别(附无数评论)(开源软件相当于熟读唐诗三百首,不会作诗也会吟)
如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章 ...
- Controller 中Action 返回值类型 及其 页面跳转的用法
•Controller 中Action 返回值类型 View – 返回 ViewResult,相当于返回一个View 页面. -------------------------------- ...
- ListView之SimpleAdapter
SimpleAdapter是安卓内置的适配器,本文展示的是listview的子项为{图片,文件}组合 如下图所示: 具体代码: SimpleAdapter_test.java /* ListView ...