欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

CF374 Maxim and Array

发布时间:2023/12/9 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 negfor(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\n",id,A[id]);Q.push(Node(Abs(A[id]),id)); K--;}for(int i = 1; i <= N; ++i) printf("%lld ",A[i]); printf("\n");}return 0; }

转载于:https://www.cnblogs.com/Basasuya/p/8433742.html

总结

以上是生活随笔为你收集整理的CF374 Maxim and Array的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。