思路:
我想将一对数映射到一个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;
}