CF 721D贪心
2016-10-30 21:58
302 查看
——————题目链接——————
题目大意
n个数 k次操作 每次可以将n个数中任意一个数加或减x 使得k次操作后这n个数乘积最小 求每个数
思路
贪心,每次取出绝对值最小的数,如果当前负数个数为奇数个,那就将这个数背离0前进,如果负数个数为偶数个,那就将这个数朝0前进
题目大意
n个数 k次操作 每次可以将n个数中任意一个数加或减x 使得k次操作后这n个数乘积最小 求每个数
思路
贪心,每次取出绝对值最小的数,如果当前负数个数为奇数个,那就将这个数背离0前进,如果负数个数为偶数个,那就将这个数朝0前进
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+10; struct node { ll num; int id; node(ll _num,int _id) { this->num=_num; this->id=_id; } bool operator < (const node b) const { return abs(num)>abs(b.num); } }; priority_queue<node>q; int n,k,x; ll a[maxn]; int main() { scanf("%d%d%d",&n,&k,&x); int flag=1; for(int i = 0; i < n; ++i) { scanf("%I64d",&a[i]); if(a[i]<0) { flag=-flag; } q.push(node(a[i],i)); } while(k--) { node temp=q.top(); q.pop(); if(a[temp.id]<0) { if(flag==-1) a[temp.id]-=x; else a[temp.id]+=x; if(a[temp.id]>=0) { flag=-flag; } } else { if(flag==-1) a[temp.id]+=x; else a[temp.id]-=x; if(a[temp.id]<0) { flag=-flag; } } q.push(node(a[temp.id],temp.id)); } for(int i = 0; i < n; ++i) { if(i) printf(" "); printf("%I64d",a[i]); } printf("\n"); return 0; }
相关文章推荐
- nyoj 1216——整理图书 CF 229D—— Towers——————【dp+贪心】
- CF-287E(Main Sequence) greedy(贪心)
- CF Hiring Staff 模拟 + 贪心
- CF 463A && 463B 贪心 && 463C 霍夫曼树 && 463D 树形dp && 463E 线段树
- cf Make It Nondeterministic (简单贪心)
- CF 600C Make Palidrome (贪心)
- CF:322D - Ciel and Duel 贪心 或者 DP 我用的贪心 。。难道sort跟qsort是不一样的么?
- 贪心 CF 332 C 好题 赞
- CF Good Bye 2015 E. New Year and Three Musketeers(贪心+枚举)
- cf 11B Jumping Jack(贪心,数学证明一下,,)
- 【Codeforces Round 339 (Div 2)D】【暴力 贪心 二分】Skills 最高技能人数乘cm+最低技能乘cf权值最大
- CF 651A Joysticks 贪心/DP
- CF 538C(Tourist's Notes-贪心)
- CF - 754A.Lesha and array splitting - 贪心+思维
- CF 789A Anastasia and pebbles 贪心
- CF - 789A. Anastasia and pebbles - 贪心+模拟
- CF 332 C 贪心
- CF - 810B. Summer sell-off - 贪心+排序
- cf 853 A planning [贪心]
- CF 601B(Lipshitz Sequence-贪心)