您的位置:首页 > 其它

UVa-10763 - Foreign Exchange

2015-07-17 01:44 357 查看
掌握了新姿势

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int maxx=500010;
int a[maxx],b[maxx];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
while(~scanf("%d",&n)&&n)
{
multimap<int,int> m;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
m.insert(pair<int,int>(a[i],b[i]));
}
for(int i=1;i<=n;i++)
{
/*int num=m.count(b[i]);//超时做法
if(num==0) break;
multimap<int,int>::iterator it=m.find(b[i]);
int j;
for(j=1;j<=num;j++)
{
if(it->second==a[i])
{
m.erase(it);
break;
}
it++;
}
if(j>num) break;*/
pair<multimap<int,int>::iterator,multimap<int,int>::iterator> p;
p=m.equal_range(b[i]);
if(p.first==p.second) break;
else
{
multimap<int,int>::iterator it;
for(it=p.first;it!=p.second;it++)
{
if(it->second==a[i])
{
m.erase(it);
break;
}
}
if(it==p.second) break;
}
}
puts(m.empty()?"YES":"NO");
}
}


上面的做法太耗时了,下面的是借鉴别人的算法。

//边读边判断
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
while(~scanf("%d",&n)&&n)
{
multimap<int,int> m;
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
multimap<int,int>::iterator it;
for(it=m.find(b);it!=m.end()&&it->first==b;it++)
{
if(it->second==a)
{
m.erase(it);
break;
}
}
if(it==m.end()||it->first!=b) m.insert(make_pair(a,b));
}
puts(m.empty()?"YES":"NO");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: