QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#609998#9417. Palindromic PolygonUESTC_NLNS#WA 1ms9984kbC++141.9kb2024-10-04 14:40:112024-10-04 14:40:14

Judging History

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

  • [2024-10-04 14:40:14]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:9984kb
  • [2024-10-04 14:40:11]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1005;
const ll INF=0x3f3f3f3f3f3f3f3f;
struct point{
	int x,y;
	ll operator ^ (const point &t) const{
		return 1ll*x*t.y-1ll*y*t.x;
	}
}p[N];
struct node{
	int l,r;
};
queue<node> q;
int T,n,cnt,f[N],L[N][N],R[N][N],P[N];
__int128 F[N][N];
ll ans;
bool vis[N][N];
unordered_map<int,int> mp; 

void BFS(int sl,int sr)
{
	for(int i=sl;i<=sr;i++) for(int j=i;j<=sr;j++) F[i][j]=-INF,vis[i][j]=false;
	F[sl][sr]=p[sr]^p[sl];
	q.push({sl,sr});vis[sl][sr]=true;
	node now;int lst,l,r;
	while(!q.empty())
	{
		now=q.front();q.pop();lst=0;
		l=now.l;r=now.r;
		ans=max(ans,(ll)(F[l][r]+(p[l]^p[r])));
		for(int i=l+1;i<r;i++)
		{
			if(L[r][f[i]]<i||L[r][f[i]]<=lst||L[i][f[i]]>l) continue;
			for(lst=i;lst<r;++lst)if(f[i]==f[lst]){
				F[i][lst]=max(F[i][lst],F[l][r]+(p[l]^p[i])+(p[lst]^p[r]));
				if(!vis[i][lst]) q.push({i,lst}),vis[i][lst]=true;
			}
			
		}
	}
	return;
}
int g(int x)
{
	if(mp.find(x)==mp.end()) mp[x]=++cnt;
	return mp[x];
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>T;
	while(T--)
	{
		cin>>n;cnt=0;ans=-INF;
		for(int i=1;i<=n;i++) cin>>f[i],f[i]=g(f[i]),f[n+i]=f[i];
		for(int i=1;i<=n;i++) cin>>p[i].x>>p[i].y,p[n+i]=p[i];
		for(int i=1;i<=cnt;i++) P[i]=0;
		for(int i=1;i<=n*2;i++)
		{
			for(int j=1;j<=cnt;j++) L[i][j]=P[j];
			P[f[i]]=i;
		}
		for(int i=1;i<=cnt;i++) P[i]=n*2+1;
		for(int i=n*2;i>=1;i--)
		{
			for(int j=1;j<=cnt;j++) R[i][j]=P[j];
			P[f[i]]=i;
		}
		for(int i=1;i<=n;i++)
		{
			if(R[i][f[i]]>=n+i) continue;
			if(R[i][f[i]]<=n) BFS(R[i][f[i]],i+n);
			else BFS(R[i][f[i]]-n,i);
		}
		if(ans==-INF) cout<<"0\n";
		else cout<<ans<<"\n";
		mp.clear();
	}
	return 0;
}
/*
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
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 7932kb

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: 1ms
memory: 9984kb

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: -100
Wrong Answer
time: 1ms
memory: 7756kb

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:

3573
1068
877
402
1760
2418
1165
3240
390
435
2804
444
3653
1393
2970
1586
202
1996
1083
4558
1798
1646
489
273
2716
6400
849
3258
438
575
142
2445
1615
9445
1400
220
1634
2561
1145
232
1102
5119
5214
990
3929
1671
4378
4927
2356
1473
2944
1168
1856
1609
2105
2298
770
2276
2617
1845
3763
215
344
136...

result:

wrong answer 1st numbers differ - expected: '3857', found: '3573'