zoukankan      html  css  js  c++  java
  • Make Product Equal One CodeForces

    https://vjudge.net/contest/356807#problem/G

    题意

      给定一组数 每次操作可以选定一个数进行+1或者-1,

      至少进行多少次可以让所有的数成绩为1

    思路

      1. 负数全部自增变为 -1;正数自减变为 1;0不变;

      2.  -1为偶数个时,0全部变为1;

        -1为奇数个时:

          有0就变一个0为 -1,回到前一种情况

          没有0,变一个 -1为 1,回到前一种情况

      可以多得到最优的cost

    代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<bitset>
     6 #include<cassert>
     7 #include<cctype>
     8 #include<cmath>
     9 #include<cstdlib>
    10 #include<ctime>
    11 #include<deque>
    12 #include<iomanip>
    13 #include<list>
    14 #include<map>
    15 #include<queue>
    16 #include<set>
    17 #include<stack>
    18 #include<vector>
    19 #include <vector>
    20 #include <iterator>
    21 #include <utility>
    22 #include <sstream>
    23 #include <limits>
    24 #include <numeric>
    25 #include <functional>
    26 using namespace std;
    27 #define gc getchar()
    28 #define mem(a) memset(a,0,sizeof(a))
    29 //#define sort(a,n,int) sort(a,a+n,less<int>())
    30 
    31 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    32 
    33 typedef long long ll;
    34 typedef unsigned long long ull;
    35 typedef long double ld;
    36 typedef pair<int,int> pii;
    37 typedef char ch;
    38 typedef double db;
    39 
    40 const double PI=acos(-1.0);
    41 const double eps=1e-6;
    42 const ll mod=1e9+7;
    43 const int inf=0x3f3f3f3f;
    44 const int maxn=1e5+10;
    45 const int maxm=100+10;
    46 
    47 
    48 bool compare(int a, int b)
    49 {
    50     return a < b;//升序
    51 }
    52 
    53 ll num[100000] = {0};
    54 int main()
    55 {
    56     int n;
    57     ll cost_p = 0, cost_n = 0, cost_0 = 0;
    58     ll counter = 0;
    59     ll cost = 0;
    60     cin >> n;
    61     for(int i = 1; i<=n;i++)
    62     {
    63         cin >> num[i];
    64     }
    65     for(int i = 1;i<=n;i++)
    66     {
    67         if(num[i] > 0)
    68         {
    69             cost_p += num[i]-1;
    70         }
    71         else if(num[i] < 0)
    72         {
    73             cost_n += -num[i]-1;
    74             counter++;
    75         }
    76         else if(num[i] == 0)
    77         {
    78             cost_0 += 1;
    79         }
    80     }
    81     if(counter % 2 == 0 || cost_0)
    82     {
    83         cost = cost_n + cost_p + cost_0;
    84     }
    85     else
    86     {
    87         cost = cost_n + cost_p + 2;
    88     }
    89     cout << cost;
    90     return 0;
    91 }

    作者:YukiRinLL

    出处:YukiRinLL的博客--https://www.cnblogs.com/SutsuharaYuki/

    您的支持是对博主最大的鼓励,感谢您的认真阅读。

    本文版权归作者所有,欢迎转载,但请保留该声明。

  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/SutsuharaYuki/p/12317275.html
Copyright © 2011-2022 走看看