思路:
我想将一对数映射到一个int上,结果发现不知道怎么处理这一对数。。。后来发现居然有一个pair的东西可以存一个二元组。。。
这里是关于pair的用法:http://blog.csdn.net/oceanlight/article/details/7890537
主要学习的就是pair和map的混用。。。
后来我搜了下题解发现居然还可以用分别排序,然后如果两个序列都一模一样的话,说明是YES。
代码:
#include<iostream> #include<cstring> #include<algorithm> #include<map> #define BIG 100000 using 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; }