95pts WA on Subtask #0 的 #8
查看原帖
95pts WA on Subtask #0 的 #8
378582
Jack_1218楼主2024/11/3 14:22

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.

2024/11/3 14:22
加载中...