1.第一反应是用map,结果Wrong Answer,检查漏了花括号,加上之后依然Wrong Answer
2.数据会有重复的,不能用map,::>_<::,改用multimap,遍历比较,忽略了相同key,不同value的排序问题
3.不再考虑排序,找到一个,剔除一个,避免重复查找,Accepted
思路:
用两个multimap A、B,正序反序分别存入,如果可行两者完全相等(不考虑顺序),遍历A,在B中找完全相同的元素并erase掉,找不到直接退出遍历
代码:
#include<map>
#include<stdio.h>
#include<iterator>
#include<iostream>
using namespace std;
multimap<int,int> students1,students2;
multimap<int,int>::iterator itr1;
multimap<int,int>::iterator itr2;
int main() {
int n,original,target;
while(cin >> n) {
if (n == 0) {
break;
}
bool ans = true ;
bool flag = false ;
students1.clear();
students2.clear();
for(int i = 0; i < n; i++) {
cin >> original >> target;
students1.insert(make_pair(original,target));
students2.insert(make_pair(target,original));
}
for(itr1 = students1.begin(); itr1 != students1.end(); itr1++) {
flag = false;
for(itr2 = students2.find(itr1->first); itr2 != students2.end(); itr2++) {
if(itr1->second == itr2->second) {
students2.erase(itr2);
flag = true;
break;
}
}
if(flag == false) {
ans = false;
break;
}
}
printf("%s\n",ans ? "YES":"NO");
}
return 0;
}