题目描述:

小Z有一个长度为的数列。他有次令人窒息的操作,每次操作可以使某个数字。他当然是希望这些数字的乘积尽量小了。为了简化题目,你只需输出操作完成后的数列即可。

————————————————我是分割线————————————————

这道题目,我们可以先自己手动模拟一遍,就能发现,首先我们需要尽量让乘积最小,那么首先我们希望乘积为负数,

所以假设一开始的时候乘积为整数,我们先拿出绝对值最小的那个数,如果是正数就-x,如果是负数就+x直到乘积变为负数。

在乘积变为负数之后,我们来看一个问题:

3 4 6 3个数中,在任意一个数上+1,问加在哪个数的时候,使他们的乘积增加最大?显然是3。所以在乘积为负的时候,我们每次取绝对值最小的数让他的绝对值变大即可

下面贴代码

#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
long long aqs(long long a){return a>=?a:-a;}
struct number{
long long num,opt;
friend bool operator <(number a,number b){
if(aqs(a.num)==aqs(b.num))return a.num>b.num;
return aqs(a.num)>aqs(b.num);
}
}qaq[];
int zheng=,n,k,x;
priority_queue<number>q;
bool cmp(number a,number b){
return a.opt<b.opt;
}
int main(){
scanf("%lld%lld%lld",&n,&k,&x);
for(int i=;i<=n;i++){
scanf("%lld",&qaq[i].num);
qaq[i].opt=i;
q.push(qaq[i]);
if(qaq[i].num<)zheng=(zheng==)?:;
}
for(int i=;i<=k;i++){
number tmp=q.top();
q.pop();
if(zheng==){
bool now=(tmp.num>=);
if(now)tmp.num-=x;else tmp.num+=x;
q.push(tmp);
if((tmp.num<&&now)||(tmp.num>&&!now))zheng=;
}
else {
if(tmp.num>=){
tmp.num+=x;
q.push(tmp);
}
else tmp.num-=x,q.push(tmp);
}
}
for(int i=;i<=n;i++){
qaq[i]=q.top();q.pop();
}
sort(qaq+,qaq+n+,cmp);
for(int i=;i<n;i++)printf("%lld ",qaq[i].num);
printf("%lld\n",qaq[n].num);
return ;
}

水(NOIP模拟赛Round #10)的更多相关文章

  1. 题(NOIP模拟赛Round #10)

    题目描述: 有一张的地图,其中的地方是墙,的地方是路.有两种操作: 给出个地点,询问这个地点中活动空间最大的编号.若询问的位置是墙,则活动空间为:否则活动空间为询问地点通过四联通能到达的点的个数.如果 ...

  2. 大(NOIP模拟赛Round #10)

    题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...

  3. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  4. NOIP模拟赛 17.10.10

    初次见面(firstmeet)[题目背景]雾之湖边,静得可怕.露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她悄无声息 ...

  5. 小红帽的画笔(NOIP模拟赛Round 7)

    又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...

  6. noip模拟赛(10.4) 序列(sequence)

    序列(sequence) [题目描述] 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. [输入数据] 第一行一个整数t表示数据组数. 每组数据 ...

  7. noip模拟赛(10.4) 背包(pack)

    [题目描述] 蛤布斯有n种商品,第i种物品的价格为ai,价值为bi.有m个人来向蛤布斯购买商品,每个人每种物品只能购买一个.第j个人有cj的钱,他会不停选择一个能买得起的价格最高的商品买走(如果有多个 ...

  8. noip模拟赛(10.4) 字典序(dictionary)

    [题目描述] 你需要构造一个1~n的排列,使得它满足m个条件,每个条件形如(ai,bi),表示ai必须在bi前面.在此基础上,你需要使它的字典序最小. [输入数据] 第一行两个正整数n,m.接下来m行 ...

  9. bananahill(NOIP模拟赛Round 8)

    题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...

随机推荐

  1. 779. K-th Symbol in Grammar

    class Solution { public: int kthGrammar(int N, int K) { return helper(N, K, false); } int helper(int ...

  2. Codeforces Round #460 (Div. 2).E 费马小定理+中国剩余定理

    E. Congruence Equation time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  3. 第二章习题 C++

    1.编写一个程序,显示您的姓名和地址. #include<iostream> using namespace std; int main() { ]; cout << &quo ...

  4. 机器学习笔记(一)—— 线性回归问题与Matlab求解

    给你多组数据集,例如给你很多房子的面积.房子距离市中心的距离.房子的价格,然后再给你一组面积. 距离,让你预测房价.这类问题称为回归问题. 回归问题(Regression) 是给定多个自变量.一个因变 ...

  5. 文档-linux io模式及select,poll,epoll

    文档-Linux IO模式详解 1. 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 1.1 用户空间与内核空间 现在操作 ...

  6. MySQL之查询性能优化(一)

    为什么查询速度会慢 通常来说,查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段, ...

  7. python语法root=Tkinter.Tk()

    1. Tkinter 是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口.Tkinter不是唯一的python图形编程接口,但是是 其中比较流行的一个.最大的特点是 ...

  8. interface in iOS

    lo = localhosten = ethernetap = Probably for access point (if you are acting as a wifi host) pdp_ip ...

  9. curl 编译

    curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本.支持很多协议:FTP, FTPS, HT ...

  10. 《Cracking the Coding Interview》——第18章:难题——题目8

    2014-04-29 03:10 题目:给定一个长字符串S和一个词典T,进行多模式匹配,统计S中T单词出现的总个数. 解法:这是要考察面试者能不能写个AC自动机吗?对面试题来说太难了吧?我不会,所以只 ...