WA# 1
查看原帖
WA# 1
402384
orgn楼主2023/10/31 20:37
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXX 500005
#define mp(a,b) make_pair(a,b)
ll n,l,r,x,ans,dis[MAXX],vir[MAXX];
vector<int> G[MAXX],W[MAXX];
priority_queue<pair<ll,int>> dij;
inline ll read();
void diji(){
    memset(dis,127,sizeof(dis));
    dis[1]=0,dij.push(mp(-1,1));
    while(!dij.empty()){
        int x=dij.top().second; dij.pop();
        if(vir[x]) continue; vir[x]=1;
        for(int i=0;i<G[x].size();i++){
            int tx=G[x][i];
            if(dis[tx]>dis[x]+W[x][i])
                dis[tx]=dis[x]+W[x][i],dij.push(mp(-dis[tx],tx));
        }
    }
}
ll solve(ll pos){
    ll ans=0;
    for(int i=0;i<x;i++) if(pos>=dis[i]) ans+=(pos-dis[i])/x+1;
    return ans;
}
int main (){
    n=read(),l=read()-1,r=read(),x=read();
    if(x==1) return cout<<r-l+1<<endl,0;
    for(int i=1,qwq;i<n;i++) {
        qwq=read();
        for(int j=0;j<x;j++) 
            G[j].push_back((j+qwq)%x),W[j].push_back(qwq);
    } diji();
    cout<<solve(r)-solve(l)<<endl;
    return 0;
}
inline ll read(){
    ll k=0,f=1;char ch=getchar();
    while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar();}
    while(ch>='0' && ch<='9') k=k*10+ch-'0',ch=getchar();
    return k*f;
}
2023/10/31 20:37
加载中...