QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#71566#3236. Hills And Valleyschenshi#AC ✓143ms19616kbC++1.2kb2023-01-11 11:59:402023-01-11 11:59:42

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-11 11:59:42]
  • Judged
  • Verdict: AC
  • Time: 143ms
  • Memory: 19616kb
  • [2023-01-11 11:59:40]
  • Submitted

answer

#include<cstdio>
#include<iostream>
using namespace std;
const int o=1e5+10;
int T,n,a[o],ans,L,R,f[o][10],h[o][10],g[o][10],p[o][10];char s[o];
int main(){
	for(scanf("%d",&T);T--;printf("%d %d %d\n",ans,L,R)){
		scanf("%d%s",&n,s+1);ans=0;L=R=1;
		for(int i=1;i<=n;++i) a[i]=s[i]-48;
		for(int i=0;i<=n+1;++i) for(int j=0;j<10;++j) f[i][j]=g[i][j]=h[i][j]=0;
		for(int i=1;i<=n;++i){
			for(int j=0;j<10;++j) f[i][j]=f[i-1][j];
			for(int j=a[i];j+1;--j) f[i][a[i]]=max(f[i][a[i]],f[i-1][j]+1);
		}
		for(int i=n;i;--i){
			for(int j=0;j<10;++j) h[i][j]=h[i+1][j];
			for(int j=a[i];j<10;++j) h[i][a[i]]=max(h[i][a[i]],h[i+1][j]+1);
		}
		for(int i=0;i<10;++i) ans=max(ans,f[n][i]);
		for(int l=0;l<10;++l) for(int r=l+1;r<10;++r){
			for(int i=1;i<=n;++i){
				for(int j=l;j<=r;++j) g[i][j]=g[i-1][j],p[i][j]=p[i-1][j];
				if(l<=a[i]&&a[i]<=r) for(int j=0;j<=l;++j)
					if(f[i-1][j]>=g[i][a[i]]) g[i][a[i]]=f[i-1][j]+1,p[i][a[i]]=i;
				for(int j=a[i];j<=r;++j) if(g[i-1][j]&&g[i-1][j]>=g[i][a[i]]) g[i][a[i]]=g[i-1][j]+1,p[i][a[i]]=p[i-1][j];
				if(l<=a[i]&&a[i]<=r) for(int j=r;j<10;++j)
					if(g[i][a[i]]&&g[i][a[i]]+h[i+1][j]>ans) ans=g[i][a[i]]+h[i+1][j],L=p[i][a[i]],R=i;
			}
		}
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 143ms
memory: 19616kb

input:

100
564
3348010339062339968164170543732424036101480063385567796871300633327190066610177797479597931706239956680908434521050648311220502482402268964497684451036156162125014743550622955579737715237323508714467463047351532756224409691528642332476831673220319724437158730801472447651264708417183934709815...

output:

108 78 492
296 760 1295
1419 1 1585
92 46 399
888 745 1073
262 626 1212
338 190 971
258 950 1736
848 2 382
1804 43 1416
102 2 504
103 11 420
99 16 497
263 375 1113
1306 441 488
301 113 851
100 4 199
107 177 471
362 28 281
1108 1 1778
96 293 476
1094 538 1098
1039 63 69
706 533 1340
573 186 1381
91 9...

result:

ok correct answer! (100 test cases)