1. 程式人生 > >PAT 1083 是否存在相等的差 (列舉 難度2) - 詳細題解

PAT 1083 是否存在相等的差 (列舉 難度2) - 詳細題解

陣列開大點, 列舉模擬即可

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