RT,my code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+5;
int n,l,r;
int a[20];
struct Node{
int u,d;
Node(int uu=0,int dd=0):u(uu),d(dd){}
bool operator < (const Node &n1) const{
return d>n1.d;
}
};
int dis[N];
bool vis[N];
void pre(){//去除0
int tmp=0;
for(int i=1;i<=n;i++){
if(a[i]) a[++tmp]=a[i];
}
n=tmp;
}
int d(int a,int b,int k){
if(b<=a) return a-b;
return k-(b-a);
}
int g(int l,int r,int x,int a){
if(x<l){
l+=d(x%a,l%a,a);
return (r-l)/a+1;
} else if(x>=l&&x<=r){
return (r-x)/a+1;
} else{
return 0;
}
}
void Dijkstra(){
for(int i=1;i<a[1];i++) dis[i]=10000000000000;
dis[0]=0;
priority_queue<Node> Q;
Q.push(Node(0,0));
while(!Q.empty()){
Node nn=Q.top(); Q.pop();
int u=nn.u;
if(vis[u]) continue;
vis[u]=true;
for(int i=2;i<=n;i++){
if(dis[(u+a[i])%a[1]]>dis[u]+a[i]){
dis[(u+a[i])%a[1]]=dis[u]+a[i];
Q.push(Node((u+a[i])%a[1],dis[(u+a[i])%a[1]]));
}
}
}
}
signed main(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%lld%lld%lld",&n,&l,&r);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
pre();
if(n==0){
puts("0");
return 0;
}
Dijkstra();
int ans=0;
for(int i=0;i<a[1];i++){
ans+=g(l,r,dis[i],a[1]);
}
printf("%lld\n",ans);
return 0;
}
Wrong Answer.wrong answer On line 1 column 1, read 1, expected 9.