10763--Foreign Exchange--Uva

来源:互联网 发布:java getclasspath 编辑:程序博客网 时间:2024/05/24 04:51

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;}


0 0
原创粉丝点击