打卡信奥刷题(609)用C++信奥P7917[普及组/提高] [Kubic] Addition
·
[Kubic] Addition
题目背景
建议先看 B 题题目背景。
题目描述
有一个初始长度为 nnn 的序列 aaa。你需要进行 n−1n-1n−1 次操作。每一次操作先在当前序列中选出两个相邻的数 x,yx,yx,y 并删除(原序列中 xxx 在 yyy 左边),再往原位置插入一个 x+yx+yx+y 或一个 x−yx-yx−y。n−1n-1n−1 次操作之后最终只会剩下恰好一个数,求这个剩下的数的最大值。
输入格式
第一行,一个整数 nnn。
第二行,共 nnn 个整数 iii 个表示 aia_iai。
输出格式
共一行,一个整数,表示答案。
样例 #1
样例输入 #1
5
-1 1 1 -1 1
样例输出 #1
3
提示
对于 100%100\%100% 的数据,1≤n≤105,∣ai∣≤1091\le n\le 10^5,|a_i|\le 10^91≤n≤105,∣ai∣≤109。
| 分值 | nnn | ∣ai∣\vert a_i\vert∣ai∣ | 特殊性质 | |
|---|---|---|---|---|
| Subtask1\operatorname{Subtask}1Subtask1 | 101010 | ≤2\le 2≤2 | 无特殊限制 | 无 |
| Subtask2\operatorname{Subtask}2Subtask2 | 202020 | ≤100\le 100≤100 | 无特殊限制 | 无 |
| Subtask3\operatorname{Subtask}3Subtask3 | 555 | 无特殊限制 | 无特殊限制 | ai≥0a_i\ge 0ai≥0 |
| Subtask4\operatorname{Subtask}4Subtask4 | 303030 | 无特殊限制 | ≤1\le 1≤1 | 无 |
| Subtask5\operatorname{Subtask}5Subtask5 | 353535 | 无特殊限制 | 无特殊限制 | 无 |
样例解释
一种操作过程如下:
-1 1 1 -1 1
-1 1 1 -2
-1 1 3
-1 4
3
可以证明没有更优的方案。
C++实现
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n, x, ans;
signed main()
{
scanf(“%lld%lld”, &n, &x);
ans = x;
for (int i = 2; i <= n; i++)
{
scanf(“%lld”, &x);
ans += x < 0 ? -x : x;
}
printf(“%lld\n”, ans);
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐



所有评论(0)