95pts 求帮忙
查看原帖
95pts 求帮忙
1396482
Ptll楼主2025/1/19 10:54

求大佬帮帮忙(95pts Wa#1#21)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=7e6+5;
ll n,l,r,dis[N],b[N],mn=N*N;
struct data {
    ll v,w;
};
priority_queue<data> q;
bool operator < (data xxx,data yyy) {
    return xxx.w>yyy.w;
}
vector<data> v[N];
void dij() {
    while(!q.empty()) q.pop();
    memset(dis,0x3f,sizeof(dis));
    q.push({1,0});
    dis[1]=0;
    while(!q.empty()) {
        ll x=q.top().v,y=q.top().w;
        q.pop();
        for(ll i=0;i<v[x].size();i++) {
            data num=v[x][i];
            ll xx=num.v,yy=num.w;
            if(dis[xx]>y+yy) {
                dis[xx]=y+yy;
                q.push({xx,y+yy});
            }
        }
    }
}
ll add(ll x) {
    ll ans=0;
    for(ll i=0;i<mn;i++) {
        if(dis[i]<=x) ans+=(x-dis[i])/mn+1;
    }
    return ans;
}
int main() {
    cin>>n>>l>>r;
    for(ll i=1;i<=n;i++) {
        cin>>b[i];
        mn=min(mn,b[i]);
    }
    for(ll i=0;i<mn;i++) {
        for(ll j=1;j<=n;j++) {
            v[i].push_back({(i+b[j])%mn,b[j]});
        }
    }
    dij();
    cout<<add(r)-add(l-1);
    return 0;
}
2025/1/19 10:54
加载中...