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的更多相关文章

  1. CodeForces - 721D Maxim and Array (贪心)

    Recently Maxim has found an array of n integers, needed by no one. He immediately come up with idea ...

  2. JAVA 基础编程练习题17 【程序 17 猴子吃桃问题】

    17 [程序 17 猴子吃桃问题] 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又 将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一 ...

  3. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  4. 【24.67%】【codeforces 551C】 GukiZ hates Boxes

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. 【24.34%】【codeforces 560D】Equivalent Strings

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. 【40.17%】【codeforces 569B】Inventory

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. 【17.07%】【codeforces 583D】Once Again...

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 【codeforces】【比赛题解】#855 Codefest 17

    神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...

  9. 【77.78%】【codeforces 625C】K-special Tables

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

随机推荐

  1. 决策树之C4.5算法学习

    决策树<Decision Tree>是一种预測模型,它由决策节点,分支和叶节点三个部分组成. 决策节点代表一个样本測试,通常代表待分类样本的某个属性,在该属性上的不同測试结果代表一个分支: ...

  2. 15.Node.js REPL(交互式解释器)

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电 ...

  3. CF-558E (线段树/分块)

    解题思路: 很显然突破口就是字符集比较小,分块和线段树都能A 话说线段树时间是分块5倍啊 代码(线段树): #include<cstdio> #include<cstring> ...

  4. selenium+python自动化处理时间控件

    尝试编写12306网站查询余票信息的自动化脚本时,碰到日期选择的问题,此处做一下记录:

  5. vue.js提交按钮时简单的if判断表达式示例

    简单的业务需求如下,看图说话 1:当充值金额没有填写的时候,会有Toast小弹框提示"请输入有效的充值金额" if (!this.money) { console.log('mon ...

  6. HTML的SEO(搜索引擎优化)标准

    HTML的SEO(搜索引擎优化)标准 一.总结 这个做seo的时候要多看,做网站优化的时候 1. SEO(搜索引擎优化):通过总结搜索引擎的排名规律,对网站进行合理优化,使你的网站在百度和Google ...

  7. ORA-16014 ORA-00312

    打开alert日志发现如下错误信息 Errors in file /oracle/app/oracle/admin/hncdfhq/bdump/hncdfhq_arc0_45285882.trc: O ...

  8. js面向对象1----了解构造函数

    一.构造函数与实例的区别 1 构造函数  构造函数主要是一种用于生成对象的饼干模具,这些对象具有默认属性和属性方法,它可以创建多个共享特定特性和行为的对象.  构造函数只是一个函数,但当函数遇到了ne ...

  9. 有关Canvas的一点小事—canvas数据和像素点

    1.  canvas生成base64数据 canvas.toDataURL()生成的数据可以直接给image对象使用作为<img>显示在前端,也可以传给后台生成图片保存.前端生成保存图片的 ...

  10. Python 极简教程(十三)while 循环

    循环简单来说就是让一段代码按你想要的方式多次运行.软件拥有强大的运算能力,就是由循环提供的. 在 Python 中支持的循环由两种:while 循环 和for 循环. 现在我们先来讲while循环. ...