uva 10736 Foreign Exchange

来源:互联网 发布:张孝祥javascript视频 编辑:程序博客网 时间:2024/06/09 15:54

这题真是坑啊,完全是一道水题

最开始我以为是这样的:

3

1 2

2 3

3 1

这样的数据要输出NO(虽然每个地点进来和出去的人一样多,但是每个人找不到能跟他换的)然后写了之后一直错,后来看了一下比尔的代码,才知道完全是个水题,还以为这题要考map的运用呢。

正确代码

#include<iostream>using namespace std;    #define MAX 500000    int out[MAX], in[MAX];  int main()  {      int n = 0, a = 0, b = 0, i = 0;      while (cin >> n && n)      {          int flag = 1;          memset(out, 0, sizeof(out));          memset(in, 0, sizeof(in));          for (i = 0; i < n; i++)          {              cin >> a >> b;              out[a]++, in[b]++;          }          for (i = 0; i < MAX; i++)          {              if (out[i] != in[i])              {                  flag = 0;                  break;              }          }          if (flag)              cout << "YES" << endl;          else              cout << "NO" << endl;      }  }  
在这里附个错误代码:(如果我举的那个例子是不能成功交换的话,下面这个代码应该就算是对的)。生气~

#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<cstdio>#include<map>using namespace std;map<pair<int,int>,int>m;int main(){int n;while(cin>>n,n){int N=n;while(N--){int t1,t2;scanf("%d%d",&t1,&t2);m[make_pair(t1,t2)]++;}int ans=1;for(map<pair<int,int>,int>::iterator it=m.begin();it!=m.end();it++){//cout<<(*it).first.first<<" "<<(*it).first.second<<endl;if( m[make_pair((*it).first.first,(*it).first.second)]!=m[make_pair((*it).first.second,(*it).first.first)] ){printf("NO\n");ans=0;break;}}if(ans){printf("YES\n");}}}

这里本不知道能(*it).first.first 的引用数据,然后实在不会了,网上又搜不到,然后我就蒙着试,结果给蒙对了 →_→  哈哈

2 0
原创粉丝点击