PAT 1083 是否存在相等的差 (列舉 難度2) - 詳細題解
阿新 • • 發佈:2019-01-14
陣列開大點, 列舉模擬即可
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <stdlib.h> #include <vector> #include <queue> #include <map> #include <cmath> using namespace std; #define ms(x, n) memset(x,n,sizeof(x)); typedef long long LL; const LL maxn = 1e4+10; int n, card[maxn]; struct ans{ int d; int n; }cont[maxn]; int len = 0; bool cmp(ans a, ans b) { if(a.d == b.d) return a.n > b.n; else return a.d > b.d; } int main() { cin >> n; int dif; ms(cont, 0); for(int i = 1; i <= n; i++){ cin >> card[i]; dif = fabs(card[i]-i); if(cont[dif].n > 0) cont[dif].n++; else cont[dif].d = dif, cont[dif].n++, len++; } sort(cont, cont+maxn-1, cmp); for(int i = 0; i < len; i++){ if(cont[i].n == 1) continue; else printf("%d %d\n",cont[i].d,cont[i].n); } return 0; }