交换学生

思路:
最开始我是这样想的,将所有的组合保存在map中,key值为本校value为目标学校,将所有的值保存好后,用map[i]的值和map[map[i]]的值比较如果相等说明是可以交换的,直到全部比较完,但后来发现每个学校不只有一个人去交换,map的key不能保存相同的值,所以在这个的基础上,将map的第一个值改为pair,将每一组都保存下来,每次相同的时候只需要将该value++就可以
代码如下:
#include<iostream> using namespace std; #include<cstdio> #include<map> typedef pair<int, int> pa; int main(void) { int n; while (cin >> n && n) { int a, b; map<pa, int> mp; while (n--) { cin >> a >> b; mp[{a, b}]++; } int q = 1;//记录是否可以交换 for (map<pa, int>::iterator it = mp.begin(); it != mp.end(); it++) { if (mp.count({ it->first.second,it->first.first })) { if (mp[{it->first.first, it->first.second}] != mp[{it->first.second, it->first.first}]) { q = 0; break; } } else { q = 0; break; } } if (q)cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号