QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#719174 | #9417. Palindromic Polygon | puremg | WA | 2ms | 3964kb | C++23 | 3.5kb | 2024-11-06 23:05:15 | 2024-11-06 23:05:15 |
Judging History
answer
//Author: Puremg
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC optimize(3,"Ofast")
#include <bits/stdc++.h>
#define deg(a) cout<<#a<<'='<<a<<"\n"
#define int long long
#define all(a) a.begin(), a.end()
#define db double
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 2e5+10;
const db eps = 1e-10;
mt19937_64 rng(random_device{}());
int sgn(db x) {
if (fabs(x) < eps) return 0;
else if (x > 0) return 1;
else return -1;
}
struct P {
db x, y;
P(){}
P(db x, db y):x(x), y(y){}
bool operator < (const P &tmp) const{return (x==tmp.x ? y<tmp.y : x<tmp.x);}
P operator - (const P &tmp) const{return P(x - tmp.x, y - tmp.y);}
int sign() const {
if (y < 0 or (x > 0 and y == 0)) return 0;
return 1;
}
int cross(const P &p) const {return x*p.y - y*p.x;}
};
int cross(P a, P b, P c) {
P ab = b - a;
P bc = c - b;
return ab.x*bc.y-ab.y*bc.x;
}
db dis(P a, P b) {
return sqrtl((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int dot(P a, P b, P c) {
P ab = b - a;
P bc = c - b;
return ab.x*bc.x+ab.y*bc.y;
}
int dot(P a, P b, P c, P d) {
P ab = b - a;
P cd = d - c;
return ab.x*cd.x+ab.y*cd.y;
}
void solve() {
int n;
cin >> n;
vector<int> f(n * 2 + 10);
vector<int> ok;
for (int i = 1; i <= n; i ++) {
cin >> f[i];
ok.push_back(f[i]);
f[i + n] = f[i];
}
sort(all(ok));
ok.erase(unique(all(ok)), ok.end());
for (int i = 1; i <= n * 2; i ++) {
f[i] = lower_bound(all(ok), f[i]) - ok.begin() + 1;
}
vector<P> a(n * 2 + 10);
for (int i = 1; i <= n; i ++) {
cin >> a[i].x >> a[i].y;
a[i + n] = a[i];
}
vector<vector<int>> lst(n * 2 + 10, vector<int>(2 * n + 10, 0));
vector<vector<int>> nxt(n * 2 + 10, vector<int>(2 * n + 10, 2 * n + 1));
for (int i = 1; i <= 2 * n; i ++) {
lst[i] = lst[i - 1];
lst[i][f[i]] = i;
}
for (int i = 2 * n; i >= 1; i --) {
nxt[i] = nxt[i + 1];
nxt[i][f[i]] = i;
}
vector<vector<int>> dp(n * 2 + 10, vector<int>(n * 2 + 10, -1));
auto dfs = [&](auto dfs, int l, int r) -> int {
if (dp[l][r] != -1) return dp[l][r];
if (f[l] != f[r]) return dp[l][r] = 0;
if (l + 1 >= r) return dp[l][r] = 0;
int res = 0;
for (int L = l + 1; L < r; L ++) {
int R = lst[r - 1][f[L]];
res = max(res, dfs(dfs, L, R) + abs(cross(a[L], a[l], a[r])) + abs(cross(a[L], a[R], a[r])));
}
for (int R = r - 1; R > l; R --) {
int L = nxt[l + 1][f[R]];
res = max(res, dfs(dfs, L, R) + abs(cross(a[L], a[l], a[r])) + abs(cross(a[L], a[R], a[r])));
}
return dp[l][r] = res;
};
int ans = 0;
for (int l = 1; l <= 2 * n; l ++) {
for (int r = l; r <= min(l + n - 1, 2 * n); r ++) {
if (f[l] == f[r])
ans = max(ans, dfs(dfs, l, r));
}
}
cout << ans << '\n';
}
signed main()
{
// auto start_time = std::chrono::high_resolution_clock::now();
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
cin.tie(nullptr)->sync_with_stdio(false);
cout << fixed << setprecision(15);
int T = 1;
cin >> T;
while (T--) solve();
// auto end_time = std::chrono::high_resolution_clock::now();
// auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
// std::cout << "程序运行时间:" << duration.count() << "毫秒" << std::endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3952kb
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: 3936kb
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: 2ms
memory: 3760kb
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: 2ms
memory: 3964kb
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: -100
Wrong Answer
time: 2ms
memory: 3860kb
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:
454110023930570616 183756804328850072 298315022228123224 307512523943663276 356398611422117232 175693541183498184 85435294912017590 90055534959464627 470255288030458235 72285943569225582 93246116205839343 204734350926653944 181050899065321753 92595596931349296 252462643584630353 170478369910592366 2...
result:
wrong answer 1st numbers differ - expected: '454110023930570607', found: '454110023930570616'