【24.17%】【codeforces 721D】Maxim and Array
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Recently Maxim has found an array of n integers, needed by no one. He immediately come up with idea of changing it: he invented positive integer x and decided to add or subtract it from arbitrary array elements. Formally, by applying single operation Maxim chooses integer i (1 ≤ i ≤ n) and replaces the i-th element of array ai either with ai + x or with ai - x. Please note that the operation may be applied more than once to the same position.
Maxim is a curious minimalis, thus he wants to know what is the minimum value that the product of all array elements (i.e. ) can reach, if Maxim would apply no more than k operations to it. Please help him in that.
Input
The first line of the input contains three integers n, k and x (1 ≤ n, k ≤ 200 000, 1 ≤ x ≤ 109) — the number of elements in the array, the maximum number of operations and the number invented by Maxim, respectively.
The second line contains n integers a1, a2, …, an () — the elements of the array found by Maxim.
Output
Print n integers b1, b2, …, bn in the only line — the array elements after applying no more than k operations to the array. In particular, should stay true for every 1 ≤ i ≤ n, but the product of all array elements should be minimum possible.
If there are multiple answers, print any of them.
Examples
input
5 3 1
5 4 3 5 2
output
5 4 3 5 -1
input
5 3 1
5 4 3 5 5
output
5 4 0 5 5
input
5 3 1
5 4 4 5 5
output
5 1 4 5 5
input
3 2 7
5 4 2
output
5 11 -5
【题目链接】:http://codeforces.com/contest/721/problem/D
【题解】
如果负数的个数为偶数个.
则需要把某一个数的符号变一下.让负数的个数变成奇数个.
(负数肯定比正数大!);
显然。我们让那个绝对值最小的数变号是最好的.
之后如果还有剩余的操作次数
就尽量让所有的数都”平均一点”;
这样最后连乘的结果最大.(是负数所以结果反而更小);
方法就是让绝对值最小的数的绝对值变大.
(每次都操作绝对值最小的数,让它的绝对值变大);
(绝对值最小的数可以用一个set维护出来);
那个重载<不包括==,所以如果想等就要随便想一个东西写上去.
(如果想到就直接返回true这样写最好)
不然会有东西莫名其妙地消失。
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int MAXN = 2e5+10;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
LL a[MAXN];
struct node
{
int x,sign;
friend bool operator < (node aa,node bb)
{
if (abs(a[aa.x]) != abs(a[bb.x]))
return abs(a[aa.x]) < abs(a[bb.x]);
else
return true;
}
};
int n,k,fu=0;
LL x;
set <node> dic;
int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(k);rel(x);
rep1(i,1,n)
{
rel(a[i]);
node temp;
if (a[i] < 0)
temp.sign = -1,fu++;
else
temp.sign = 1;
temp.x = i;
dic.insert(temp);
}
if (!(fu&1))
{
while (k)
{
k--;
int po = dic.begin()->x;
int s = dic.begin()->sign;
dic.erase(dic.begin());
node temp1;
LL temp = abs(a[po]);
if (temp < x)
{
s*=-1;
temp-=x;
a[po] = abs(temp)*s;
temp1.sign = s;temp1.x = po;
dic.insert(temp1);
break;
}
else
{
temp-=x;
a[po] = temp*s;
temp1.sign = s;temp1.x = po;
dic.insert(temp1);
}
}
}
while (k)
{
k--;
int po = dic.begin()->x;
int s = dic.begin()->sign;
dic.erase(dic.begin());
node temp1;
LL temp = abs(a[po]);
temp += x;
temp*=s;
a[po] = temp;
temp1.sign = s;
temp1.x = po;
dic.insert(temp1);
}
rep1(i,1,n)
{
printf("%I64d",a[i]);
if (i==n)
puts("");
else
putchar(' ');
}
return 0;
}
【24.17%】【codeforces 721D】Maxim and Array的更多相关文章
- CodeForces - 721D Maxim and Array (贪心)
Recently Maxim has found an array of n integers, needed by no one. He immediately come up with idea ...
- JAVA 基础编程练习题17 【程序 17 猴子吃桃问题】
17 [程序 17 猴子吃桃问题] 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又 将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一 ...
- 【 BowWow and the Timetable CodeForces - 1204A 】【思维】
题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...
- 【24.67%】【codeforces 551C】 GukiZ hates Boxes
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【24.34%】【codeforces 560D】Equivalent Strings
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【40.17%】【codeforces 569B】Inventory
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【17.07%】【codeforces 583D】Once Again...
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces】【比赛题解】#855 Codefest 17
神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...
- 【77.78%】【codeforces 625C】K-special Tables
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
随机推荐
- [AngularFire] Angular File Uploads to Firebase Storage with Angular control value accessor
The upload class will be used in the service layer. Notice it has a constructor for file attribute, ...
- start_kernel----lcokdep_init
void lockdep_init(void) { int i; /* * Some architectures have their own start_kernel() * code which ...
- Python实现的基于ADB的Android远程工具
本工具为原创,涉及知识: - Python编程 - Tkinter GUI编程 - ADB通信机制 代码已经开源: https://code.csdn.net/codehat/andev/tree/m ...
- TrueSec引导的Linux系统和安全检测工具预览
650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=&qu ...
- Android手机间使用socket进行文件互传实例
这是一个Android手机间文件传输的例子,两个手机同时装上此app,然后输入接收端的ip,选择文件,可以多选,点确定,就发送到另一个手机,一个简单快捷文件快传实例.可以直接运用到项目中. 下面是文件 ...
- XML Pull
java [android]xml new parse tool XML parsing with XML Pull import org.xmlpull.v1.XmlPullParser;
- Activity学习
http://www.360doc.com/content/13/1106/11/203871_327110236.shtml http://www.jianshu.com/p/e6971e8a8da ...
- KNIMI数据挖掘建模与分析系列_002_利用KNIMI做商超零售关联推荐
利用KNIMI做商超零售关联推荐 http://blog.csdn.net/shuaihj 一.測试数据 须要測试数据,请留下邮箱 二.训练关联推荐规则 1.读取销售记录(sales.table) 2 ...
- Android Intent的setClass和setClassName的区别
setClass:跳转到与该工程下的(同一个Application中的)activity或者service setClassName:跳转到不同Applicaiton的activity或者servic ...
- Java中接口继承泛型接口
在使用Mybatis做web开发时,每一个模块的数据持久层的接口都会定义:增删改查四个方法.我想为什么不新建一个Base接口来做所有数据持久层的父接口呢? 于是,我试验了一下,建立了一个泛型接口,里面 ...