题目背景
いつまでも二人語り合おう
終わった夏を
探してた夢をそっと
終わらせよう戻らないように
お別れだね
君へ届けと願った声が
風になって心の隙間を
通り抜けた
——《消えた夏の夢》
小 T 不会出题。
题目描述
小 T 手中有一个数 �x,初始时为 �p。而小 ⊥ 手中有一个长为 �n 的序列 �a。一次操作中,小 T 需要依次进行如下的修改:
- 选中 �a 中的一个数 ��ai。
- 将 �x 加上 ��ai。
- 让 ��ai 变为自身的相反数,即 −��−ai。
小 T 想知道,在若干次操作(可以不进行操作,同一个位置可以选中多次)之后,小 T 手中的数 �x 最大是多少。
输入格式
第一行两个整数 �,�n,p。
第二行 �n 个整数 ��ai。
输出格式
输出一行仅一个整数,表示 �x 最大是多少。
输入输出样例
输入 #1复制
6 3 1 1 -4 5 1 -4
输出 #1复制
11
输入 #2复制
7 4 1 -9 -1 -9 8 -1 0
输出 #2复制
13
说明/提示
【样例解释 #1】
对于样例,你可以依次执行以下操作:
- 选中 �5=1a5=1,�x 变为 3+1=43+1=4,�5a5 变为 −1−1。
- 选中 �1=1a1=1,�x 变为 4+1=54+1=5,�1a1 变为 −1−1。
- 选中 �3=−4a3=−4,�x 变为 5−4=15−4=1,�3a3 变为 44。
- 选中 �4=5a4=5,�x 变为 1+5=61+5=6,�4a4 变为 −5−5。
- 选中 �2=1a2=1,�x 变为 6+1=76+1=7,�2a2 变为 −1−1。
- 选中 �3=4a3=4,�x 变为 7+4=117+4=11,�3a3 变为 −4−4。
可以证明 �x 的最大值为 1111。注意,并不是只有样例中展示的方案可以达到这个最大值。
【数据范围】
测试点编号 | �≤n≤ | 特殊性质 |
---|---|---|
1∼31∼3 | 2020 | |
4∼54∼5 | 105105 | ��<0ai<0 |
6∼76∼7 | 105105 | ��≥0ai≥0 |
8∼108∼10 | 105105 |
对于 100%100% 的数据,1≤�≤1051≤n≤105,∣��∣,∣�∣≤109∣ai∣,∣p∣≤109。
代码:
太简单了!!!
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N=1e5+5;
ll a[N],n,x;
void solve(){
cin>>n>>x;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<=n;++i){
if(a[i]>0) x+=a[i];
}
cout<<x;
return ;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int T = 1;
while(T--){
solve();
}
return 0;
}