PAT 乙級 1083 是否存在相等的差
阿新 • • 發佈:2019-01-14
1083 是否存在相等的差 (20 point(s))
給定 N 張卡片,正面分別寫上 1、2、……、N,然後全部翻面,洗牌,在背面分別寫上 1、2、……、N。將每張牌的正反兩面數字相減(大減小),得到 N 個非負差值,其中是否存在相等的差?
輸入格式:
輸入第一行給出一個正整數 N(2 ≤ N ≤ 10 000),隨後一行給出 1 到 N 的一個洗牌後的排列,第 i 個數表示正面寫了 i 的那張卡片背面的數字。
輸出格式:
按照“差值 重複次數”的格式從大到小輸出重複的差值及其重複的次數,每行輸出一個結果。
輸入樣例:
8 3 5 8 6 2 1 4 7
輸出樣例:
5 2
3 3
2 2
經驗總結:
這一題也很簡單啦,使用map自動排序的特性逆向輸出,可以很方便的解決問題~(๑>ڡ<)☆
AC程式碼
#include <cstdio> #include <map> using namespace std; int main() { int n,t; map<int,int> mp; while(~scanf("%d",&n)) { for(int i=1;i<=n;++i) { scanf("%d",&t); int temp=t-i>0?t-i:i-t; if(mp.count(temp)==0) mp[temp]=1; else ++mp[temp]; } for(map<int,int>::reverse_iterator it=mp.rbegin();it!=mp.rend();++it) { if(it->second>1) printf("%d %d\n",it->first,it->second); } } return 0; }