UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#199723#2606. 取石子tkswls100595ms9064kbC++111.4kb2023-12-19 09:13:572023-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'