QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#609483#9417. Palindromic PolygonKanate#TL 445ms20016kbC++142.7kb2024-10-04 13:12:372024-10-04 13:12:37

Judging History

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

  • [2024-10-04 13:12:37]
  • 评测
  • 测评结果:TL
  • 用时:445ms
  • 内存:20016kb
  • [2024-10-04 13:12:37]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define rint int
#define endl '\n'
#define uint unsigned long long
void debug(int *a,int n){for(rint i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;}
void debug(int *a){for(rint i=1;a[i];i++) cout<<a[i]<<" ";cout<<endl;}
void debug(int x){cout<<"debug: "<<x<<endl;}
int read(){
    int x=0,f=1;char c=getchar();
    while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
    while(isdigit(c))x=x*10+c-48,c=getchar();
    return x*f;
}const int N=1010,p=1e9,mod=998244353;

int n,a[N],cnt,b[N],nxt[N][N],pre[N][N];
struct Point{
	int x,y;
	Point operator-(const Point &A)const{return {x-A.x,y-A.y};}
	int   operator^(const Point &A)const{return abs(x*A.y-y*A.x);}
}P[N];
inline Point adjus(int x,int y){
	swap(x,y);
	if(x>n) x-=n;
	if(y<x) y+=n;
	return {x,y};
}

inline int cal(int x,int y,int z,int k)
{
	// puts("cal");
	return ((P[x]-P[y])^(P[x]-P[k]))+((P[z]-P[y])^(P[z]-P[k]));
}

int f[N][N];
int dfs(int l,int r)
{
	if(f[l][r]!=-1) return f[l][r];
	int res=0;
	// for(rint k=1;k<=cnt;k++)
	// {
	// 	const int i=nxt[l][k],j=pre[r][k];
	// 	if(i<j) res=max(res,dfs(i,j)+cal(l,i,j,r));
	// }
	for(rint i=l+1;i<r;i++)
	for(rint j=i+1;j<r;j++)
	if(a[i]==a[j])
		res=max(res,dfs(i,j)+cal(l,i,j,r));
	return f[l][r]=res;
}

void Work()
{
	n=read(),cnt=0;
	for(rint i=1;i<=n;i++) a[i]=a[i+n]=read(),b[++cnt]=a[i];
	sort(b+1,b+cnt+1);
	cnt=unique(b+1,b+cnt+1)-b-1;
	for(rint i=1;i<=n<<1;i++) a[i]=lower_bound(b+1,b+cnt+1,a[i])-b;
	
	static int c[N];
	for(rint i=1;i<=cnt;i++) c[i]=n*2+1;
	for(rint i=n<<1;i;i--)
	{
		for(rint j=1;j<=cnt;j++) nxt[i][j]=c[j];
		c[a[i]]=i;
	}
	for(rint i=1;i<=cnt;i++) c[i]=0;
	for(rint i=1;i<=n<<1;i++)
	{
		for(rint j=1;j<=cnt;j++) pre[i][j]=c[j];
		c[a[i]]=i;
	}
	
	
	for(rint i=1;i<=n;i++) P[i]=P[i+n]={read(),read()};
	
	for(rint i=0;i<=n*2;i++)
	for(rint j=0;j<=n*2;j++) f[i][j]=-1;
	// memset(f,-1,sizeof f);
	
	int ans=0;
	for(rint i=1;i<=n;i++)
	for(rint j=i+1;j<i+n;j++)
	if(a[i]==a[j])
	{
		// cout<<i<<" "<<j<<" "<<dfs(i,j)<<endl;
		ans=max(ans,dfs(i,j));
	}	
	
	for(rint i=1;i<=n;i++)
	for(rint j=i+1;j<i+n;j++)
	if(a[i]==a[j])
		assert(P[i].x==P[adjus(i,j).y].x),
		assert(P[i].y==P[adjus(i,j).y].y),
		assert(P[j].x==P[adjus(i,j).x].x),
		assert(P[j].y==P[adjus(i,j).x].y);
	
	for(rint i=1;i<=n;i++)
	for(rint j=i+1;j<i+n;j++)
	if(a[i]==a[j])
	for(rint k=i+1;k<j;k++)
		ans=max(ans,((P[i]-P[k])^(P[j]-P[k]))+dfs(adjus(i,j).x,adjus(i,j).y));
	
	cout<<ans<<endl;
}

signed main()
{
    #ifndef ONLINE_JUDGE
	freopen("1.in", "r", stdin);
	// freopen("1.out", "w", stdout);
	#else
	#endif
    
	// int T=1;
	int T=read();
	while(T--) Work();
	
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7768kb

input:

3
8
2 4 2 4 3 4 5 3
2 3
0 6
-3 3
-3 0
-2 -3
1 -5
3 -3
4 0
3
1 2 3
0 0
1 0
0 1
3
1 1 1
0 0
1 0
0 1

output:

84
0
1

result:

ok 3 number(s): "84 0 1"

Test #2:

score: 0
Accepted
time: 0ms
memory: 7700kb

input:

1
4
1000000000 1000000000 1000000000 1000000000
-1000000000 -1000000000
1000000000 -1000000000
1000000000 1000000000
-1000000000 1000000000

output:

8000000000000000000

result:

ok 1 number(s): "8000000000000000000"

Test #3:

score: 0
Accepted
time: 1ms
memory: 7816kb

input:

129
10
604040473 604040473 287094217 682965575 70435786 287094217 604040473 287094217 682965575 92620053
-193 -184
-200 -200
-125 -169
-120 -157
-120 -145
-124 -139
-137 -136
-155 -149
-172 -163
-187 -177
5
346787871 346787871 113397429 113397429 346787871
-173 -181
-186 -166
-200 -195
-194 -200
-17...

output:

3857
1068
877
516
2668
3559
1165
3468
560
925
3502
696
3824
1746
2970
1826
613
2221
1130
4677
1900
1646
564
273
3203
6572
1070
3330
1024
765
142
3038
1615
9445
2122
320
1741
2561
1145
480
2094
5119
5458
2446
3929
2249
4378
4927
2356
1473
3152
1574
1990
1609
3367
2298
1459
2663
2617
2298
4048
215
546...

result:

ok 129 numbers

Test #4:

score: 0
Accepted
time: 1ms
memory: 7724kb

input:

135
5
1 1 2 113253381 2
-187 -200
-185 -199
-172 -161
-192 -163
-200 -181
6
2 1 558119535 2 681168219 1
-159 -157
-200 -181
-197 -188
-190 -200
-179 -187
-164 -169
9
330122537 1 43508877 1 330122537 2 43508877 43508877 2
-115 -171
-127 -160
-140 -158
-153 -161
-170 -166
-190 -181
-200 -200
-126 -197...

output:

1199
1019
4995
993
374
2202
5999
2738
1610
287
2402
2421
1968
2253
889
2109
3594
1369
660
3823
1039
779
1068
1961
793
4749
906
1528
834
1125
244
532
1943
999
2279
274
1928
1969
3195
4189
762
1266
1330
6496
550
1452
2392
5402
246
1504
1603
1190
2002
2010
3855
5341
1096
730
4077
1005
368
2383
2465
278...

result:

ok 135 numbers

Test #5:

score: 0
Accepted
time: 0ms
memory: 7804kb

input:

68
18
177729849 694994462 698865345 342457858 192803483 342457858 666388583 192803483 981906585 981906585 477960944 666388583 477960944 666388583 279990638 192803483 666388583 378306063
-247299689 -596018085
-257763469 -530664858
-307204843 -477869906
-830737754 -587840234
-915132692 -619194354
-100...

output:

454110023930570607
183756804328850070
298315022228123202
307512523943663260
356398611422117225
175693541183498183
85435294912017589
90055534959464621
470255288030458232
72285943569225582
93246116205839344
204734350926653941
181050899065321759
92595596931349298
252462643584630356
170478369910592368
2...

result:

ok 68 numbers

Test #6:

score: 0
Accepted
time: 2ms
memory: 9864kb

input:

68
17
4 5 364570994 3 364570994 922037103 1 2 1 3 4 922037103 348120378 922774606 2 5 348120378
-944527911 -585310186
-985388783 -648105509
-996957301 -724274531
-1000000000 -776231334
-987660458 -849026993
-956240043 -910614062
-921236523 -949464303
-824975533 -1000000000
-758560856 -997163831
-685...

output:

283257114140518651
196218877050842110
222494863055424896
205446281561853782
250005106663316430
97542520284278361
366125469664341547
45201313979184996
302406140775158311
273846619401894473
114076427182578290
296093289576963628
314427730122999682
275016401751244176
113458042513568150
65331043997675878...

result:

ok 68 numbers

Test #7:

score: 0
Accepted
time: 6ms
memory: 20016kb

input:

5
200
609999526 472639833 217024831 181719265 607443350 247865634 182637039 952698029 667998662 552937384 309920961 395554742 529168804 633125523 572946770 964103704 809297865 675769477 8628527 954614525 607443350 402709616 933276333 156118214 382882490 982120770 8449875 613209070 635469591 90592427...

output:

26672937937698
21734491556698
26790824844133
30739464810342
25766825658360

result:

ok 5 number(s): "26672937937698 21734491556698 ...3 30739464810342 25766825658360"

Test #8:

score: 0
Accepted
time: 14ms
memory: 14908kb

input:

5
200
492204292 199500284 956414792 947905664 397147741 584603063 477504704 67732501 947905664 168522928 23355651 717940721 618420996 23355651 850784605 928119758 717940721 375517624 745458203 790993066 558764624 889247289 690761448 654316570 720267356 380473009 294135686 730680716 871352642 7131338...

output:

25179077707847
24610803287778
27879482074960
26586509092648
23860637721112

result:

ok 5 number(s): "25179077707847 24610803287778 ...0 26586509092648 23860637721112"

Test #9:

score: 0
Accepted
time: 4ms
memory: 18688kb

input:

5
200
84 35 20 33 36 78 24 47 5 18 90 100 48 99 17 86 92 42 22 22 91 15 16 34 61 2 52 72 31 71 24 67 10 64 72 81 56 47 34 58 75 46 59 85 27 14 14 83 30 42 13 89 38 52 51 66 44 51 62 41 28 40 12 79 23 56 81 8 60 69 65 68 26 96 55 68 46 70 1 21 84 44 62 4 23 99 69 18 35 54 37 19 39 93 48 8 43 53 16 93...

output:

25742598865692
23940201061139
21774320032543
29925923291252
25943299932354

result:

ok 5 number(s): "25742598865692 23940201061139 ...3 29925923291252 25943299932354"

Test #10:

score: 0
Accepted
time: 7ms
memory: 14992kb

input:

5
200
30 1 9 6 855627481 44 807240211 19 328678825 43 2 611193007 21 1 17357465 777452512 296168618 293501368 41887972 16 460434285 25 17 2 820070575 32 49 11 50 7 876136756 48 167436795 18 44 9 32 34 492450178 92584206 117799001 753835505 447351438 293501368 14 45 17357465 47 419370691 820070575 8 ...

output:

25588520303771
24556295312210
22684955350359
25702614992989
26005004619374

result:

ok 5 number(s): "25588520303771 24556295312210 ...9 25702614992989 26005004619374"

Test #11:

score: 0
Accepted
time: 90ms
memory: 17412kb

input:

5
200
8 870822545 888011437 384726727 366602674 888011437 384726727 384726727 366602674 870822545 870822545 384726727 651014332 10 888011437 411902203 611980057 910184732 411902203 651014332 411902203 723545326 5 3 319317853 476997146 910184732 8 888011437 651014332 611980057 7 611980057 910184732 5...

output:

26138916026487
24620851403857
25071187076679
25469429774328
30775803237893

result:

ok 5 number(s): "26138916026487 24620851403857 ...9 25469429774328 30775803237893"

Test #12:

score: 0
Accepted
time: 445ms
memory: 16812kb

input:

5
200
817980653 817980653 125172097 125172097 817980653 163615641 163615641 817980653 817980653 668379506 817980653 125172097 163615641 163615641 125172097 125172097 125172097 125172097 668379506 817980653 817980653 163615641 817980653 817980653 817980653 817980653 817980653 163615641 163615641 6683...

output:

26176012030413
25187907268116
26211235264533
24618377847566
26109975005241

result:

ok 5 number(s): "26176012030413 25187907268116 ...3 24618377847566 26109975005241"

Test #13:

score: -100
Time Limit Exceeded

input:

5
200
212397750 992618221 212397750 992618221 992618221 212397750 992618221 992618221 992618221 992618221 992618221 212397750 2 992618221 992618221 992618221 212397750 212397750 992618221 212397750 212397750 992618221 212397750 212397750 992618221 992618221 992618221 992618221 212397750 212397750 21...

output:


result: