紫书 习题 5-3 uva 10763

来源:互联网 发布:ps4版辐射4捏脸数据 编辑:程序博客网 时间:2024/05/19 10:38

思路:

我想将一对数映射到一个int上,结果发现不知道怎么处理这一对数。。。后来发现居然有一个pair的东西可以存一个二元组。。。

这里是关于pair的用法:http://blog.csdn.net/oceanlight/article/details/7890537

主要学习的就是pair和map的混用。。。

后来我搜了下题解发现居然还可以用分别排序,然后如果两个序列都一模一样的话,说明是YES。

代码:

#include<iostream>#include<cstring>#include<algorithm>#include<map>#define BIG 100000using namespace std;struct state {int x,y;}s[1000000];int main (){int n;while(cin >> n && n){map<pair<int,int>,int> mp;   //放在这里就避免初始化。 如果放在外面的话就要用mp.clear() memset(s,0,sizeof(s));for(int i = 0;i < n;i++){cin >> s[i].x >> s[i].y;pair<int,int> p (s[i].x,s[i].y);mp[p]++;}int ok = 1;for(int i = 0 ;i < n;i++){pair<int,int> p(s[i].x,s[i].y);pair<int,int> q(s[i].y,s[i].x);if(mp [p] != mp[q]){ok = 0;break;}}if(ok) cout << "YES\n";else cout << "NO\n";}return 0;}

用排序

#include<iostream>#include<cstring>#include<algorithm>using namespace std;int s[1000000];int a[1000000];int main (){int n;while(cin >> n && n){memset(a,0,sizeof(a));memset(s,0,sizeof(s));for(int i = 0 ;i < n;i++)cin >> s[i] >> a[i];sort(a,a+n);sort(s,s+n);int ok = 1;for(int i = 0;i < n;i++){if(s[i]!=a[i]){ok = 0;break;}}if(ok) cout << "YES\n";else cout << "NO\n";}return 0;}


0 0
原创粉丝点击