WA 了4个点,多日苦思,终无果,以待高人相助。
  • 板块P4933 大师
  • 楼主喵喵喵__
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/6/7 15:55
  • 上次更新2023/11/4 22:11:30
查看原帖
WA 了4个点,多日苦思,终无果,以待高人相助。
429572
喵喵喵__楼主2021/6/7 15:55
#include<stdio.h>
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
const int MAXn = 1e6 + 5;
const int MOD =  998244353;
int read(){
	int w = 0, r = 0;char ch = getchar();
	while(ch <'0' || ch > '9')w|=ch == '-', ch = getchar();
	while(ch >= '0' && ch <= '9')r = (r<<1)+(r<<3)+(ch^48), ch = getchar();
	return w ? ~r + 1 : r;
}
int n, a[MAXn], b[1005][40010];
int sta[MAXn], top;
bool vis[40010];
int main(){
	n = read();
	//for(int i = 1; i <= n; i++)b[i][0] = 1;
	int ans = 0;
	for(int i = 1; i <= n; i++)a[i] = read();
	for(int i = 2; i <= n; i++){
		for(int j = 1; j <= i - 1; j++){
			int variance = a[i] - a[j];
			if(variance < 0)variance += 20005;
			b[i][variance] += b[j][variance] + 1;
			b[i][variance] %= MOD;
		//	printf("%d==%d ", variance, b[i][variance]); 
		//	ans += b[i][variance];//这里会多加 
		//	ans%=MOD;
		vis[variance] = 1;
		sta[++top] = variance;
		}
		do{
			int p = sta[top--];
			if(vis[p]){
				ans += b[i][p];
				ans %= MOD;
				vis[p] = false;
			}
		}while(top);
	}
	printf("%d", (ans + n)%MOD);
	return 0;
}
2021/6/7 15:55
加载中...