QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#329497 | #8257. Marathon Race 2 | unputdownable | 0 | 0ms | 8532kb | C++17 | 3.0kb | 2024-02-16 19:50:26 | 2024-02-16 19:50:27 |
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%