ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#199723 | #2606. 取石子 | tkswls | 100 | 595ms | 9064kb | C++11 | 1.4kb | 2023-12-19 09:13:57 | 2023-12-19 12:50:14 |
answer
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
int n, a[1000006], r, p, ans, sum, l;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> p;
sum += p;
a[++r] = p;
while (r >= 3 && a[r - 2] < a[r - 1] && a[r - 1] >= a[r]) {
a[r - 2] = (a[r - 2] + a[r] - a[r - 1]);
r -= 2;
}
}
l = 1;
int op = 1;
while (l <= r) {
if (a[l] > a[r]) {
ans += op * a[l];
l++;
} else {
ans += op * a[r];
r--;
}
op = -op;
}
cout << (sum + ans) / 2;
}
//sub1,2 dp,白送
//sub3 直接取左右两边较大的
//感觉很对,证明不清楚
//然后正解
//可以说明在左右两侧都是间隔取
//因为非间隔一定会有一个人利益受损,那么这个人就不会让对方非间隔取(在对方后面直接跟)
//如果自己不优自己更不会非间隔取
//所以一定是交错的取的
//然后就两种思路
//第一种是把v形段缩到一起
//第二种是把原序列缩成v形段
//显然,第一种思路太naive了,我们考虑第二种
//怎么才能让原序列变成一个v形段呢
//如果有 ^ 存在,考虑等效权值,肯定是两边的数减去中间的
//所以不会再有^状的出现,就再按照sub3做就好了
//然后等号是可以取的吧,应该
详细
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 5
Accepted
Test #1:
score: 5
Accepted
time: 0ms
memory: 1248kb
input:
20 34609193 3798235 593299601 475645303 888195631 659454499 551037978 596032266 394004781 307877719 ...
output:
5176695914
result:
ok single line: '5176695914'
Test #2:
score: 0
Accepted
time: 0ms
memory: 1252kb
input:
20 257837297 981007596 247719754 572613679 890525438 193092208 382562531 813994741 736265810 9411386...
output:
5999233923
result:
ok single line: '5999233923'
Test #3:
score: 0
Accepted
time: 0ms
memory: 1248kb
input:
20 728075060 566324636 299668530 361377217 995240088 303157214 468025638 233 693207134 233 43707398 ...
output:
5655468652
result:
ok single line: '5655468652'
Subtask #2:
score: 16
Accepted
Test #4:
score: 16
Accepted
time: 0ms
memory: 1252kb
input:
5000 831868113 83247241 7008654 71622129 276964969 769109493 716836035 409056337 945188562 701720531...
output:
1270112927250
result:
ok single line: '1270112927250'
Test #5:
score: 0
Accepted
time: 0ms
memory: 1256kb
input:
5000 536798484 742306105 665837174 306216323 848574467 177488740 356435718 404320671 381065694 75267...
output:
1236468303162
result:
ok single line: '1236468303162'
Test #6:
score: 0
Accepted
time: 0ms
memory: 1256kb
input:
5000 561205591 773453801 163616606 94979862 472927133 287520978 441866057 164826861 371112170 803598...
output:
1242244929142
result:
ok single line: '1242244929142'
Subtask #3:
score: 23
Accepted
Test #7:
score: 23
Accepted
time: 104ms
memory: 9064kb
input:
1000000 999998295 999997633 999997288 999996499 999995245 999993138 999989907 999989340 999988536 99...
output:
249810344147441
result:
ok single line: '249810344147441'
Test #8:
score: 0
Accepted
time: 88ms
memory: 9060kb
input:
1000000 999998340 999997539 999997129 999996027 999995490 999990654 999987196 999985596 999985211 99...
output:
249912278151408
result:
ok single line: '249912278151408'
Test #9:
score: 0
Accepted
time: 103ms
memory: 9064kb
input:
1000000 999999396 999998733 999992278 999989607 999983083 999975800 999975116 999956557 999955866 99...
output:
249932893118783
result:
ok single line: '249932893118783'
Subtask #4:
score: 56
Accepted
Test #10:
score: 56
Accepted
time: 98ms
memory: 1252kb
input:
1000000 985047382 509193839 986465526 583993613 889445095 656624416 109977936 722619615 924421147 71...
output:
250065483816919
result:
ok single line: '250065483816919'
Test #11:
score: 0
Accepted
time: 101ms
memory: 1252kb
input:
1000000 309366426 786066196 259041687 594566187 112300217 85424331 323093652 693198640 485030445 759...
output:
250138218389114
result:
ok single line: '250138218389114'
Test #12:
score: 0
Accepted
time: 101ms
memory: 1256kb
input:
1000000 615867790 223539795 478898165 782641633 313755728 441721617 704485768 458874871 57982460 447...
output:
250377842811779
result:
ok single line: '250377842811779'