• 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/

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

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

  • 相关阅读:
    友元函数和友元类
    进程和线程的区别
    用WAP手机远程遥控电脑
    多态的实现方式
    Windows 消息机制
    c\c++调google map api
    我的航拍直升机 控制基站软件的编写历程(3.5)—分析界面
    让成员函数可以成为回调函数
    几种排序算法
    windows下建立QTVS2005集成开发环境
  • 原文地址:https://www.cnblogs.com/SutsuharaYuki/p/12317275.html
Copyright © 2020-2023  润新知