zoukankan      html  css  js  c++  java
  • CF374 Maxim and Array

    贪心
    如果有0先变成非0
    如果负数的个数 应该变为偶数
    之后就是每次将绝对值最小的值加K

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN = 2e5+5;
    typedef long long ll;
    
    int N,K,X;
    ll A[MAXN];
    int tag[MAXN];
    struct Node{
        ll x; int id;
        Node(ll a=0, int b=0):x(a),id(b){}
        bool operator <(const Node &T) const {
            return x > T.x;
        }
    };
    ll Abs(ll x) {
        if(x < 0) x *= -1;
        return x;
    }
    void doo(int id,ll num) {
        if(A[id] > 0) A[id] += num;
        else A[id] -= num;
    }
    priority_queue<Node> Q;
    int main(){
        while(~scanf("%d %d %d",&N,&K,&X)) {
            memset(tag,0,sizeof(tag));
            while(!Q.empty()) Q.pop();
    
        //  int c1 = 0; int c2 = 0; 
            int c3 = 0; // pos zero neg
            for(int i = 1; i <= N; ++i) {
                scanf("%lld",&A[i]);
                Q.push(Node(Abs(A[i]), i));
            }
            for(int i = 1; i <= N; ++i) {
                if(A[i] < 0) c3 ++; 
            }
            while(K) {
                ll x = Q.top().x; int id = Q.top().id;
                Q.pop();
                if(x == 0) {
                    if(~c3&1) {
                        A[id] = -X;
                        c3 ++;
                    }else {
                        A[id] = X; 
                    }
                }else if(~c3&1){
                    ll tt = (x+X)/X; 
                    if(tt > K) {
                        doo(id, -1ll*K*X);
                        break;
                    }else {
                        doo(id,-1ll*tt*X); K -= tt; K++;
                    }
                    c3 ++;
                }else {
                    doo(id,X);
                }
    //          printf("%d %lld
    ",id,A[id]);
                Q.push(Node(Abs(A[id]),id)); K--;
            }
    
            for(int i = 1; i <= N; ++i) printf("%lld ",A[i]); printf("
    ");
        }
        return 0;   
    }
    
  • 相关阅读:
    jenkins 安装插件失败
    win10 右键新建卡顿
    Linux发布java jar包
    Linux搭建java环境
    java代码检出打包
    虚拟机Vmware使用记录
    地图坐标
    vs2019 扩展工具
    服务器内网穿透
    intelliJ 软件项目打开运行
  • 原文地址:https://www.cnblogs.com/Basasuya/p/8433742.html
Copyright © 2011-2022 走看看