zoukankan      html  css  js  c++  java
  • Yaroslav and Sequence

    Codeforces Round #182 (Div. 1) A:http://codeforces.com/contest/301/problem/A

    题意:给你2*n-1个数,你每次可以选择n个连续的数,把这个n个数*-1,问你进行若干次操作,这2*n-1个数之和最大是多少。

    题解:结论很简单:当n是奇数的时候,那么你一次操作可以增加或者减少一个负数,所以这时候所有的负数都能变成整数。当n是偶数的时候,那么你一次操作可以增加或者减少2个负数,如果负数的个数是偶数,那么所有的负数都可以变成整数,否则,就会还剩下一个负数,显然这个负数必须是绝对值最小的那个数。所以,结果出来啦。

    思维过程;一开始也分n奇数偶数讨论,但是始终不知从哪里下手,没有进行深入分析,所以没有得到答案。最后还是问了别人,这样的思维还是不习惯。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<set>
     7 using namespace std;
     8 int ans1,ans2,sum,temp;
     9 int a1,n;
    10 int main(){
    11    while(~scanf("%d",&n)){
    12          int ans1=ans2=100000000,sum=a1=0;
    13       for(int i=1;i<=2*n-1;i++){
    14         scanf("%d",&temp);
    15         if(temp>0){
    16           sum+=temp;
    17           ans1=min(ans1,temp);
    18         }
    19         else {
    20         sum+=abs(temp);
    21         ans2=min(ans2,-temp);
    22         a1++;
    23         }
    24       }
    25      if(n&1)printf("%d
    ",sum);
    26      else if(a1&1){
    27         printf("%d
    ",sum-2*min(ans1,ans2));
    28      }
    29      else {
    30         printf("%d
    ",sum);
    31      }
    32    }
    33 }
    View Code
  • 相关阅读:
    dpdk优化相关 转
    常用的TCP Option
    c10k C10M
    Linux惊群效应详解
    bloomfilter 以及count min sketch
    Squid 搭建正向代理服务器
    Openflow的架构+源码剖析 转载
    Hyperscan与Snort的集成方案
    动态图
    psutil 模块
  • 原文地址:https://www.cnblogs.com/chujian123/p/3881517.html
Copyright © 2011-2022 走看看