https://codeforces.com/problemset/problem/797/B

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given sequence a1, a2, ..., an of integer numbers of length n. Your task is to find such subsequence that its sum is odd and maximum among all such subsequences. It's guaranteed that given sequence contains subsequence with odd sum.

Subsequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements.

You should write a program which finds sum of the best subsequence.

Input

The first line contains integer number n (1 ≤ n ≤ 105).

The second line contains n integer numbers a1, a2, ..., an ( - 104 ≤ ai ≤ 104). The sequence contains at least one subsequence with odd sum.

Output

Print sum of resulting subseqeuence.

Examples
input
4
-2 2 -3 1
output
3
input
3
2 -5 -3
output
-1

  求子序列,其和为最大奇数。根据题意,序列内元素是可以随意组合的。
  题解::要想求最大,肯定得先把所有正数加起来,为sum,看看他是不是奇数,如果是,直接输出。否则
      令sum2=sum,sum1=sum;
      对数组排个序;
      正数搞完了,不是奇数,所以要对负数下手。但是对负数可不是随便搞的,要知道,sum2每次加一个负数,都会变小。我们的目的是让sum2变成奇数,根据偶数-奇数=奇数以及贪心的思想,
我们需要最大的负奇数,找到后,sum2+=它,即可。
      但是刚进行的是一个减的操作,并不能保证它是最大,因为在sum加的过程中,可能会出现奇数,那么sum此时的状态并不一定比sum2小。所以:
       sum1=sum,根据贪心思想,且偶-奇=奇,找到最小正奇数,sum1-=它。
      再对sum1,sum2进行一个比较即可,但是,根据样例2,sum1可能为偶,因为sum在加的过程中肯不出现奇数,判断即可了。同理sum2也是。
    坑死我了....
    上代码
  
#include<iostream>
#include<cstring>
#include<set>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#include<map>
const int maxn=1e5+;
int maxx=-2e4+;
int a[maxn];
int main() //qq as a
{
int n;
cin>>n;
int sum=;
for(int i=;i<n;i++)
{
cin>>a[i];
if(a[i]>)
sum+=a[i];
// cout<<"sum: "<<sum<<" a:"<<a[i]<<endl;
}
if(sum%!=)
cout<<sum<<endl;
else
{
sort(a,a+n);
int sum1=sum;
for(int i=;i<n;i++)
{
if(a[i]>&&a[i]%!=)
{
sum1-=a[i];break;
}
}
int sum2=sum;
for(int i=n-;i>=;i--)
{
if(a[i]<&&(-a[i])%!=)
{
sum2+=a[i];break;
}
}
// cout<<sum1<<" "<<sum2<<endl;
if(sum1%==)
cout<<sum2<<endl;
else if(sum2%==)
cout<<sum1<<endl;
else if(sum1<sum2)
cout<<sum2<<endl;
else
cout<<sum1<<endl;
}
return ;
}
      

Odd sum (对本菜鸡来说是个极坑题)的更多相关文章

  1. 记录一下寄几个儿的greendao数据库升级,可以说是非常菜鸡了嗯

    之前使用的greendao数据库存储服务器所有的历史推送消息,但是后来消息需要加几个新的字段 举个栗子,比如要新增红色框住的字段到数据库中: 本仙女作为一只思想成熟的菜鸡,当然是加了字段就赶紧重新往里 ...

  2. ACM菜鸡退役帖——ACM究竟给了我什么?

    这个ACM退役帖,诸多原因(一言难尽...),终于决定在我大三下学期开始的时候写出来.下面说两个重要的原因. 其一是觉得菜鸡的ACM之旅没人会看的,但是新学期开始了,总结一下,只为了更好的出发吧. 其 ...

  3. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 菜鸡只会ABC!

    Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 全场题解 菜鸡只会A+B+C,呈上题解: A. Bear and ...

  4. Html菜鸡大杂烩

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. HDU 2064 菜鸡第一次写博客

    果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...

  6. 菜鸡谈OO 第二单元总结

    “欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...

  7. 菜鸡谈OO 第一单元总结

    “OOP永远是我的好朋友爸爸!” ——来自某无能狂怒的菜鸡 身处在OO的第一个摸鱼黄金周中的我,感觉到了巨大的满足感.如果写博客这种充满意义的事情可以代替我们亲爱的作业,那么我提议每周来两个:)下面开 ...

  8. 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记

    一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...

  9. Codeforces 797B - Odd sum

    B. Odd sum 题目链接:http://codeforces.com/problemset/problem/797/B time limit per test 1 second memory l ...

随机推荐

  1. js数字排序方法

    function bubbleSort(arr){ var flag = false; // 定义一个变量为false,未交换位置 for(var i=0;i<arr.length-1;i++) ...

  2. Oracle SQL 异常处理

    今天学了异常处理 有预定义异常 与 用户自定义异常 还有 raise_application_error()函数raise_application_error() 只能把异常抛出而不能处理异常. 预定 ...

  3. [洛谷Luogu]P1803 线段覆盖问题

    贪心想法题解的各位dalaodalaodalao都讲得很清楚了,在下就提供一种桶排的做法吧. 因为给出数据范围 0≤ai<bi≤10000000≤ai<bi≤10000000≤ai< ...

  4. Biu一Biu--GDB

    gcc常见编译选项 ** -c **:只激活预处理.编译和汇编,也就是生成obj文件 ** -S **:只激活处理和编译,把文件编译成汇编代码 ** -o **:定制目标名称,缺省的时候编译出来的可执 ...

  5. Redis哨兵机制原理

    1.概述 Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案.可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip p ...

  6. IDEA 分屏显示

    效果: 步骤: 对着某个标签页单击右键,选择Split Vertically或者Split Horizontally即可.

  7. 039-PHP使用闭包函数来进行父实例的变量自增,错误示例

    <?php // 如何使用闭包函数来进行父实例的变量自增,错误示例 function demo(){ $num = 1; $func = function() use($num){ echo $ ...

  8. Swift 类的使用class

    /* 类属性的介绍 Swift中类的属性有多种 1.存储属性:存储示例的常量和变量 2.计算属性:通过某种方式计算出来的属性 3.类属性:与整个类自身相关的属性 存储属性 存储属性是最简单的属性,它作 ...

  9. silicon射频发射器 SI4010-C2-GSR

    Si4010是第一款系统级的自动天线调谐发射器,具有专利的调谐电路,可自动微调天线以达到最佳效果,以及恒定的输出功耗.PCB环形天线的制造公差和环境改变,将会引起发射频率的变化,从而可能导致天线的效率 ...

  10. scp、wget

    scp使用方法 -1  强制scp命令使用协议ssh1 -2  强制scp命令使用协议ssh2 -4  强制scp命令只使用IPv4寻址 -6  强制scp命令只使用IPv6寻址 -B  使用批处理模 ...