1083 是否存在相等的差 (20 分)

55 阅读1分钟

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