zoukankan      html  css  js  c++  java
  • Codeforces Round #569 (Div. 2) B. Nick and Array

    原文链接:https://codeforces.com/contest/1180/problem/B

    题意:给你n个数,你要进行一次或者多次操作(操作的方式a[i]=-a[i]-1),让它们的乘积最大,当然也可以不进行操作,答案有多组。
    思路:根据(操作的方式a[i]=-a[i]-1),我们发现,正数进行操作后,绝对值变大了,那么想让全部数乘积最大,就让这组数全变成负数(是不是好奇,如果存在0的问题,0进行操作可以变为(-1)),然后判断个数n的奇偶,偶数就直接输出,奇数的话把最小(除去-1)的变为正数就行了.
    代码:

     1 #include"iostream"
     2 #include"algorithm"
     3 #include"cstring"
     4 #include"cstdio"
     5 #include"cmath" 
     6 using namespace std;
     7 #define ll long long
     8 int main(){
     9     std::ios::sync_with_stdio(false);
    10     ll n;
    11     while(cin>>n){
    12      ll a[n],b[n];
    13      for(int i=0;i<n;i++) {
    14          cin>>a[i];
    15          if(a[i]==0) a[i]=-1;
    16          if(a[i]>0) a[i]=a[i]*(-1)-1;
    17          b[i]=a[i];
    18      }
    19      sort(b,b+n);
    20      if(n%2==0){
    21          for(int i=0;i<n;i++) cout<<a[i]<<" ";
    22          cout<<endl;
    23      }
    24      else{
    25          int flag=0,tt=0; 
    26          for(int i=0;i<n;i++){
    27              if(b[i]!=1){
    28                  tt=b[i];
    29                  break;
    30              }
    31          }
    32         for(int i=0;i<n;i++){
    33         if(a[i]==tt&&flag==0){
    34            a[i]=a[i]*(-1)-1;
    35             cout<<a[i]<<" ";
    36             flag++;}
    37         else{
    38           cout<<a[i]<<" ";    
    39         } 
    40       }
    41      }
    42     cout<<endl;
    43    }
    44    return 0;
    45 }
  • 相关阅读:
    Django之ORM基础
    Django基本命令
    Django知识总汇
    Linux Shell 自动化之让文本飞
    伪类link,hover,active,visited,focus的区别
    小记 Linux 之 Vim
    恢复 MSSQL bak 文件扩展名数据(上)
    小记一次shellscript的麻烦
    Java 之多态
    Java 之封装
  • 原文地址:https://www.cnblogs.com/huangdf/p/12222397.html
Copyright © 2011-2022 走看看