QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#329497#8257. Marathon Race 2unputdownable0 0ms8532kbC++173.0kb2024-02-16 19:50:262024-02-16 19:50:27

Judging History

你现在查看的是最新测评结果

  • [2024-02-16 19:50:27]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:8532kb
  • [2024-02-16 19:50:26]
  • 提交

answer

// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2")
#include <bits/stdc++.h>
// #define int long long
#define i64 long long
#define pii pair <int, int> 
using namespace std;
inline int read(void) {
    int x=0,sgn=1; char ch=getchar();
    while(ch<48||57<ch) {if(ch==45)sgn=0;ch=getchar();}
    while(47<ch&&ch<58) {x=x*10+ch-48;   ch=getchar();}
    return sgn? x:-x;
}
void write(int x) {
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
/*
    write((Ans%p+p)%p); pls
*/
int n,m,L;
int a[500005];
int pos[1003],val[1003],f[1003][1003],preval[1003];
int resl[1003],resr[1003];
inline void chkmin(int&x,i64 y) { x=min((i64)x,y); }
inline int dis(int x,int y) { return pos[y]-pos[x]; }
inline void calc(void) {
    for(int len=m-1; len>=1; --len) {
        for(int l=1,r; l+len<=m; ++l) {
            r=l+len; int hei=n-(preval[r]-preval[l-1])+1;
            chkmin(f[l+1][r],f[l][r]+1ll*dis(l,l+1)*(hei+val[l]));
            chkmin(f[r][l+1],f[l][r]+1ll*dis(l,r)*(hei+val[l]));
            chkmin(f[r-1][l],f[r][l]+1ll*dis(r-1,r)*(hei+val[r]));
            chkmin(f[l][r-1],f[r][l]+1ll*dis(l,r)*(hei+val[r]));
        }
    }
} 
inline void work(int*A) {
    for(int i=2; i<=m; ++i) A[i]=min((i64)A[i],A[i-1]+1ll*n*dis(i-1,i));
    for(int i=m-1; i>=1; --i) A[i]=min((i64)A[i],A[i+1]+1ll*n*dis(i,i+1));
}
signed main() {
    // freopen("localinput","r",stdin);
    // freopen("localoutput","w",stdout);
    n=read(); L=read(); a[0]=-1;
    for(int i=1; i<=n; ++i) a[i]=read();
    sort(a+1,a+n+1);
    for(int i=1; i<=n; ++i) if(a[i]!=a[i-1]) {
        pos[++m]=a[i]; val[m]=1;
        if(m>=1000) {
            int q=read();
            for(int i=1; i<=q; ++i) puts("No");
            return 0;
        }
    } else ++val[m];
    for(int i=1; i<=m; ++i) preval[i]=preval[i-1]+val[i];
    memset(f,0x3f,sizeof f);
    f[1][m]=0; calc();
    for(int i=1; i<=m; ++i) resl[i]=f[i][i];
    memset(f,0x3f,sizeof f);
    f[m][1]=0; calc();
    for(int i=1; i<=m; ++i) resr[i]=f[i][i];
    work(resl); work(resr);
    int q=read();
    for(int i=1,s,t,lim; i<=q; ++i) {
        s=read(); t=read(); lim=read()-n;
        i64 Ans;
        if(t<=pos[1]) Ans=min(resl[1]+abs(s-pos[1]),resr[1]+abs(s-pos[m]))+1ll*(n+1)*(pos[1]-1); 
        else if(t>=pos[m]) Ans=min(resl[m]+abs(s-pos[1]),resr[m]+abs(s-pos[m]))+1ll*(n+1)*(t-pos[m]);
        else {
            int p=lower_bound(pos+1,pos+m+1,t)-pos;
            int q=p-1;
            assert(pos[q]<=t&&t<=pos[p]);
            Ans=min(
                min(resl[q]+abs(s-pos[1]),resr[q]+abs(s-pos[m]))+1ll*n*(t-pos[q]),
                min(resl[p]+abs(s-pos[1]),resr[p]+abs(s-pos[m]))+1ll*n*(pos[p]-t)
            );
        }
        if(Ans>lim) puts("No");
        else puts("Yes");
    }
    // fprintf(stderr,"%.4lf\n",1.0*clock()/CLOCKS_PER_SEC);
    return 0;
}
/*
3 100
30 80 30
3
0 100 403
0 100 300
0 100 262
*/

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 8532kb

input:

1 500000
166666
10
0 0 500000
0 0 499999
0 0 499998
0 0 499997
0 0 499996
0 0 5
0 0 4
0 0 3
0 0 2
0 0 1

output:

Yes
Yes
Yes
Yes
No
No
No
No
No
No

result:

wrong answer expected NO, found YES [3rd token]

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #1:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

0%