QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#694501#7075. Let's Play Jigsaw Puzzles!ucup-team4352#WA 2709ms449872kbC++231.8kb2024-10-31 18:05:272024-10-31 18:05:27

Judging History

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

  • [2024-10-31 18:05:27]
  • 评测
  • 测评结果:WA
  • 用时:2709ms
  • 内存:449872kb
  • [2024-10-31 18:05:27]
  • 提交

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;
	// 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;
}
/*
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 2709ms
memory: 449872kb

input:

2
-1 3 -1 2
-1 4 1 -1
1 -1 -1 4
2 -1 3 -1

output:

8999
8998
8997
8996
8995
8994
8993
8992
8991
8990
8989
8988
8987
8986
8985
8984
8983
8982
8981
8980
8979
8978
8977
8976
8975
8974
8973
8972
8971
8970
8969
8968
8967
8966
8965
8964
8963
8962
8961
8960
8959
8958
8957
8956
8955
8954
8953
8952
8951
8950
8949
8948
8947
8946
8945
8944
8943
8942
8941
8940
...

result:

wrong answer 1st lines differ - expected: '1 2', found: '8999'