记录编号 144603 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [国家集训队2011]墨墨的等式 最终得分 100
用户昵称 Gravatar天一阁 是否通过 通过
代码语言 C++ 运行时间 1.020 s
提交时间 2014-12-24 15:04:37 内存使用 34.65 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define Maxn 4000010
using namespace std;
int n;
long long BMin,BMax,ans=0;
int dis[Maxn],a[Maxn];
queue<int> q;
bool vis[Maxn]={0};
void spfa(int s){
    memset(dis,0x3f,sizeof(dis));
    vis[s]=true; dis[0]=0;
    q.push(s);
    while(!q.empty()){
        int now=q.front(); q.pop();
        vis[now]=false;
        for(int i=1;i<=n;i++){
            int p=(now+a[i])%a[1],len=(now+a[i])/a[1];
            if(dis[p]>dis[now]+len){
                dis[p]=dis[now]+len;
                if(!vis[p]){
                    vis[p]=true;
                    q.push(p);
                }
            }
        }
    }
    for(int i=0;i<a[1];i++){
        long long x=max(BMax/a[1]+(BMax%a[1]>=i)-dis[i],0LL);
        long long y=max((BMin-1)/a[1]+((BMin-1)%a[1]>=i)-dis[i],0LL);
        ans+=x-y;
    }
}
int main(){
	freopen("nt2011_equation.in","r",stdin);
	freopen("nt2011_equation.out","w",stdout);
    scanf("%d%lld%lld",&n,&BMin,&BMax);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    spfa(0);
    printf("%lld\n",ans);
    return 0;
}