返回题解分享
讨论 / 题解分享/ 帖子详情

等差 - 题解

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N = 5e5+2, M = 102, mod = 1e9+7;

void add(int &a, int b) {
	if(a + b >= mod) a = a + b - mod;
	else if(a + b < 0) a = a + b + mod;
	else a = a + b;
}

int n, a[N];
int f[M];
int ans;

signed main() {
	
	cin >> n;
	for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	
	for(int d = -100; d <= 100; ++d) {
		memset(f, 0, sizeof(f));
		for(int i = 1; i <= n; ++i) {
			int val = a[i] - d;
			if(val >= 0 && val <= 100) add(f[a[i]], f[val]);
			add(f[a[i]], 1);
		}
		for(int i = 0; i <= 100; ++i) add(ans, f[i]);
		if(d != 0) add(ans, -n);
	}
	cout << ans;
	return 0;
}
0 回复 0 转发 1 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!