QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#694543 | #7075. Let's Play Jigsaw Puzzles! | ucup-team4352# | WA | 3054ms | 500008kb | C++23 | 1.8kb | 2024-10-31 18:09:34 | 2024-10-31 18:09:36 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define lowbit(x) (x&-x)
#define log(x) (31^__builtin_clz(x))
using namespace std;
const int maxn=1e4+5;
int a[maxn];
vector<int>dp[maxn];
vector<int>ans[maxn];
vector<short>loc[maxn];
int n;
int now[maxn];
short find(int x,int y,int nx,int ny){
short l=y+1,r=n+1;
while(l<r){
short mid=l+r-1>>1;
if(ans[x+1][mid-(x+1)]+nx>ans[y+1][mid-(y+1)]+ny)l=mid+1;
else r=mid;
}
return l;
}
void solve(){
n=9e3+500;
// cin>>n;
for(int i=1;i<=n;i++){
a[i]=i;
// cin>>a[i];
dp[i].resize(i+1);
}
for(int i=1;i<=n;i++){
int mn=a[i],mx=a[i];
for(int j=i;j<=n;j++){
mx=max(mx,a[j]);
mn=min(mn,a[j]);
ans[i].push_back(mx-mn);
}
}
dp[0]={0};
for(int i=1;i<=n;i++){
dp[i][1]=ans[1][i-1];
dp[i][i]=0;
loc[i]={(short)i};
for(int j=2;j<i;j++){
while(now[j-1]+1<loc[j-1].size()&&find(loc[j-1][now[j-1]],loc[j-1][now[j-1]+1],dp[loc[j-1][now[j-1]]][j-1],dp[loc[j-1][now[j-1]+1]][j-1])<=i)now[j-1]++;
dp[i][j]=dp[loc[j-1][now[j-1]]][j-1]+ans[loc[j-1][now[j-1]]+1][i-(loc[j-1][now[j-1]]+1)];
// cout<<loc[j-1][now[j-1]]<<" "<<loc[j-1].size()<<"\n";
}
// cout<<"\n";
if(i<n)
for(int j=1;j<i;j++){
while(loc[j].size()>1){
int tmp=loc[j].back(),tmp1=loc[j][loc[j].size()-2];
int nw=find(tmp,i,dp[tmp][j],dp[i][j]);
int lst=find(tmp,tmp1,dp[tmp][j],dp[tmp1][j]);
// if(0){
if(nw<=lst){
loc[j].pop_back();
}
else{
break;
}
}
loc[j].push_back(i);
}
// for(int j=1;j<=i;j++)cout<<dp[i][j]<<" ";cout<<"\n\n";
}
for(int j=1;j<=n;j++)cout<<dp[n][j]<<"\n";
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t=1;
// cin>>t;
while(t--)solve();
return 0;
}
/*
*/
详细
Test #1:
score: 0
Wrong Answer
time: 3054ms
memory: 500008kb
input:
2 -1 3 -1 2 -1 4 1 -1 1 -1 -1 4 2 -1 3 -1
output:
9499 9498 9497 9496 9495 9494 9493 9492 9491 9490 9489 9488 9487 9486 9485 9484 9483 9482 9481 9480 9479 9478 9477 9476 9475 9474 9473 9472 9471 9470 9469 9468 9467 9466 9465 9464 9463 9462 9461 9460 9459 9458 9457 9456 9455 9454 9453 9452 9451 9450 9449 9448 9447 9446 9445 9444 9443 9442 9441 9440 ...
result:
wrong answer 1st lines differ - expected: '1 2', found: '9499'