Loading

代码-国家集训队 墨墨的等式

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);~i;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;

//Data
const int N=5e5,M=12;
int m,a[M],n;
ll al,ar;

//Graph
vector<int> e[N],to,we;
void adde(int u,int v,int w){
    e[u].pb(sz(to)),to.pb(v),we.pb(w);
}
ll dis[N]; bool vis[N];
priority_queue<pair<ll,int>> q;
void dijkstra(int s){
    R(u,n) dis[u]=linf,vis[u]=false;
    q.push(mp(-(dis[s]=0),s));
    while(sz(q)){
        int u=q.top().y; q.pop();
        if(vis[u]) continue; vis[u]=true;
        for(int v:e[u])if(dis[to[v]]>dis[u]+we[v])
            q.push(mp(-(dis[to[v]]=dis[u]+we[v]),to[v]));
    }
}

//Main
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>m>>al>>ar,--al;
    R(i,m) cin>>a[i];
    sort(a,a+m),n=a[0];
    R(i,m)if(i)R(u,n)
        adde(u,(u+a[i])%n,a[i]);
    dijkstra(0);
    ll ns=0;
    R(u,n){
        if(al>=dis[u]) ns-=(al-dis[u])/n+1;
        if(ar>=dis[u]) ns+=(ar-dis[u])/n+1;
    }
    cout<<ns<<'\n';
    return 0;
}
posted @ 2020-11-24 16:44  George1123  阅读(47)  评论(0编辑  收藏  举报