大问题,蒟蒻样例没过
查看原帖
大问题,蒟蒻样例没过
245019
Glass_Testament楼主2023/3/20 15:54

我的思路是枚举公差,然后有点类似背包

然鹅第一个样例都没过,输出是33

应该是我的思路有问题吧QWQ

但我想了好久觉得没问题啊((

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
ll n,ans;
ll a[1003],p[20500],vis[20005];
void clear(){
	for(int i=1;i<=n;i++) {
		p[a[i]]=0;
		vis[a[i]]=0;
	}
}
int main(){
	scanf("%lld",&n);
	ans=n;
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=20005;i++){//公差
		ll x=i;
		clear();
		//if(i<=35) cout<<i<<" "; 
		for(int j=1;j<=n;j++){//找是否前面是否出现过符合公差的数
			ll v=a[j];
			if(v-x>=0){
				ans=(ans+p[v-x])%mod,p[v]+=p[v-x]+1;
			} 
			//if(i<=35) cout<<ans<<" "; 
		}
		clear();
		for(int j=1;j<=n;j++){
			ll v=a[j];
			if(v+x>=0&&v+x<=25005) ans=(ans+p[v+x])%mod,p[v]+=p[v+x]+1;
			//if(i<=35) cout<<ans<<" "; 
		}
		//if(i<=35) cout<<"\n";
	}
	printf("%lld",ans);
	return 0;
} 
2023/3/20 15:54
加载中...