95pts求助 WA on #2
查看原帖
95pts求助 WA on #2
473639
M00R楼主2023/12/23 19:06

也不清楚是哪里出了问题,调了好久

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,l,r,a,b,ans,f[9000001],vis[9000001];
ll cnt,nxt[9000001],head[1000001],to[9000001],val[9000001];
queue<ll>q;
void add(ll x,ll y,ll v){
	nxt[++cnt]=head[x];
	head[x]=cnt;
	to[cnt]=y;
	val[cnt]=v;
}
int main(){
	scanf("%lld%lld%lld%lld",&n,&l,&r,&a);l--;
	for(ll j=1;j<n;j++){
		scanf("%lld",&b);
		for(ll i=0;i<a;i++)
			add(i,(i+b)%a,b),f[i]=1e18;
	}
	f[0]=0;
	q.push(0);
	while(!q.empty()){
		ll x=q.front();q.pop();
		vis[x]=0;
		for(ll i=head[x];i;i=nxt[i]){
			ll v=to[i],w=f[x]+val[i];
			if(w<f[v]){f[v]=w;if(!vis[v]) vis[v]=1,q.push(v);}
		}
	}
	for(ll i=0;i<a;i++){
		if(r>=f[i]) ans+=(r-f[i])/a+1;
		if(l>=f[i]) ans-=(l-f[i])/a+1;
	}
	printf("%lld",ans);
} 
2023/12/23 19:06
加载中...