紫書習題5-4交換學生 UVA10763
阿新 • • 發佈:2021-01-04
技術標籤:紫書
題意:給出n個二元組,對於前後互換相等的稱為匹配的二元組如(1,2)與(2,1).如果所有二元組都匹配輸出YES,否則輸出NO
思路:注意有重複的資料....
然後我們考慮匹配的二元組數目一定是相等的,比如有多少個(1,2)就一定有多少個(2,1)只要檢查每個二元組和它對應的數目是否相等,不相等就退出輸出NO.
實現方法就是用map記錄每個二元組出現的次數,遍歷一次map,每次都檢查一次二元組和它對應的匹配組數目是否相同.
for(const auto & p :stu){ PII x= make_pair(p.first.second,p.first.first); if(p.second!=stu[x]){ flag=false; break; } }
要強調下遍歷容器的簡便方法(c++11以上)使用.first .second來使用.
最後是程式碼:
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> PII; int main(){ int i,j,k,n,m,a,b; while(scanf("%d",&n)==1&&n){ map<PII,int> stu; for(i=1;i<=n;i++){ scanf("%d%d",&a,&b); stu[make_pair(a,b)]++; } if(n%2){ cout<<"NO"<<endl; } bool flag=true; for(const auto & p :stu){ PII x= make_pair(p.first.second,p.first.first); if(p.second!=stu[x]){ flag=false; break; } } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0;}