1083 是否存在相等的差 (20 分)
题目链接
算法分析
一个on数组来存结构体数组的下标,顺便用来判断是否已经读入过,然后结构体排序。
代码实现
#include<bits/stdc++.h>
using namespace std;
#define N 10005
struct mis{
int cnt;
int value;
};
struct mis ans[N];
int cnt, on[N];
bool cmp(mis a, mis b){
return a.value > b.value;
}
int main(){
int n, x;
scanf("%d", &n);
for(int i = 1; i <= n; ++ i){
scanf("%d", &x);
int cal = abs(x - i);
if(on[cal]) ans[on[cal]].cnt ++;
else{
on[cal] = ++ cnt;
ans[cnt].cnt ++;
ans[cnt].value = cal;
}
}
sort(ans + 1, ans + cnt + 1, cmp);
for(int i = 1; i <= cnt; ++ i)
if(ans[i].cnt >= 2)
printf("%d %d\n", ans[i].value, ans[i].cnt);
return 0;
}