常州模拟赛d7t2 数组
题目背景
HJZ 有很多玩具。他最喜欢玩的玩具是一个可以变化的数组。
题目描述
HJZ 的数组初始时有 n 个元素。他可以把一个位置上的数加上或减去一个固定的
数 x。
一天 LJZ 和 HZY 来 HJZ 家玩。LJZ 突发奇想,提出了一个问题:如何在给定的
操作步数内最小化数组所有元素的乘积呢?
HJZ 百思不得其解,但是他想博得 HZY 的好感,就把这个问题交给你啦 ~
由于最小乘积可能很小,HJZ 只需要你给出
. 最 . 小 . 乘 . 积 . 对 10^9 + 7
. 取 . 模的结果。
. 请 . 注 . 意 . 一 . 个 . 数 . 对 p . 取 . 模 . 的 . 结 . 果 . 一 . 定 . 是 . 非 . 负 . 数, . 即 . 你 . 输 . 出 . 的 . 结 . 果 ans
. 要 . 满 . 足 0 ≤ ans < 10^ 9 + 7 。
输入输出格式
输入格式:
从文件 array.in 中读入数据。
第一行三个整数 n,k, x 分别表示数组元素个数、最多操作次数和每次操作的数。
第二行 n 个整数 a 1 ,a 2 ,...,a n 表示数组初始时的元素。
输出格式:
输出到文件 array.out 中。
一行一个在 [0,10 9 + 7) 范围内的整数,表示最小乘积的绝对值对 10 9 + 7 取模的
结果。
输入输出样例
3 2 7 5 4 2
999999732 【样例 1 解释】 最多可以进行两次操作,每次把一个位置 +7 或 −7 。 最优策略是将数组第二个元素 +7 ,第三个元素 −7 ,得到新的数组 5 11 − 5 ,乘 积为 5 × 11 × (−5) = −275 ,模 10 9 + 7 的结果是 999999732 。
5 3 1 5 4 3 5 5
0 【样例 2 解释】 只能把一个位置 +3 或 −3 ,把第三个位置 −3 最优,乘积为 0 。 【子任务】 对于所有测试点,1 ≤ n,k ≤ 2 × 10^5 ,1 ≤ x ≤ 10^9 ,|a i | ≤ 10^9 。分析:数据很大,不可能dp,稍微做过一点贪心题的人能够一眼看出这道题就是用贪心做,但是具体怎么贪心比较难想,如果我们能让乘积变成负数是最好的,如果当前的乘积是正数,那么我们要先用最少的步数让乘积变成负数,这个时候操作绝对值最小的数让它变成符号相反的数就能使乘积变成负数了. 要使每次操作的贡献最大,肯定是操作绝对值最小的数,如果绝对值最小的数是正数,就让他增加x,否则就让它减少x,乘积还是负数,而且每一次的贡献是最大的,所以答案一定是最优的,每次找绝对值最小的数用优先队列. 需要注意对于0的处理.
#include <cstdio> #include <functional> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #include <cmath>using namespace std;const long long mod = 1000000007;long long n, k, x,ans = 1,cnt; priority_queue <long long> q1; //存负数 priority_queue <long long, vector<long long>, greater<long long> >q2; //存正数void jian() {long long y = q2.top();q2.pop();while (k && y){k--;y -= x;if (y <= 0){q1.push(y);return;}}q2.push(y); }void jia() {long long y = q1.top();q1.pop();while (k && y <= 0){k--;y += x;if (y > 0){q2.push(y);return;}}q1.push(y); }int main() {scanf("%lld%lld%lld", &n, &k, &x);for (int i = 1; i <= n; i++){long long t;scanf("%lld", &t);if (t <= 0){q1.push(t);cnt++;}elseq2.push(t);}//先让乘积变成负数if (cnt % 2 == 0){if (cnt == 0)jian();elseif (cnt == n)jia();elseif (abs(q1.top()) < abs(q2.top()))jia();elsejian();}for (int i = 1; i <= k; i++){long long t1, t2;if (!q1.empty())t1 = q1.top();elset1 = -100000000000000; if (!q2.empty())t2 = q2.top();elset2 = 100000000000000;if (abs(t1) > abs(t2)){q2.pop();t2 += x;q2.push(t2);}else{q1.pop();t1 -= x;q1.push(t1);}}while (!q1.empty()){ans = (ans * (q1.top() % mod)) % mod;q1.pop();}while (!q2.empty()){ans = (ans * (q2.top() % mod)) % mod; q2.pop();}while (ans < 0)ans += mod;printf("%lld\n", ans);return 0; }
转载于:https://www.cnblogs.com/zbtrs/p/7607949.html
常州模拟赛d7t2 数组相关推荐
- 常州模拟赛d4t1 立方体
题目描述 立方体有 6 个面,每个面上有一只奶牛,每只奶牛都有一些干草.为了训练奶牛的合作精神,它 们在玩一个游戏,每轮:所有奶牛将自己的干草分成 4 等份,分给相邻的 4 个面上的奶牛. 游戏开始, ...
- 常州模拟赛d3t3 两只怪物心心相印
题目背景 从前我是一位无名的旅人,旅途中我得到了某样东西:贤者之石.我因此得到悠久的时光和漂泊的生命.1897年冬天,我一时兴起舍弃了旅人的生活. 贤者之石创造出来的,是货真价实的黄金.我的名声传遍了 ...
- 清北学堂模拟赛d6t4 数组异或
分析:直接O(n^3)做是只有50分的,可以加一点小小的优化,就是c[k]可以从c[k-1]得到,但是还是只有60分,从宏观意义上是不能继续优化了.对于这类涉及到位运算的性质的题目,将每个数转化成二进 ...
- 洛谷 P5594 【XR-4】模拟赛 视频讲解(二维数组、模拟)
洛谷 P5594 [XR-4]模拟赛(需要 二维数组) 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 ...
- 用vis数组保证只入队一次P5594 【XR-4】模拟赛
文章目录 [XR-4]模拟赛 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 样例 #3 样例输入 #3 样例输出 #3 提示 小 ...
- 3.27模拟赛 sutoringu(后缀数组)
\(\color{white}{mjt是机房模拟赛独自切过题的唯一的人...}\) (应本人要求删掉惹) \(Description\) 给你\(n,k\)和长为\(n\)的字符串\(s\).一个区间 ...
- 2017.6.11 校内模拟赛
题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小cop ...
- 2020年蓝桥杯模拟赛2020.3.25直播笔记
2020年蓝桥杯模拟赛解题报告(CPP版本) 第八题 长草的bfs写法[我想暴力模拟O kmn] 深搜会爆 bfs像投到水里的涟漪 问题: const int dx[] = {1, 0, -1, 0} ...
- 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
最新文章
- 2017年10月07日普及组 单元格
- Event Tracing for Windows
- Linux中基于snmp协议的mrtg安装及使用
- “数据驱动”时代来临,阿里云数据中台如何赋能金融业?(附重磅报告下载)
- python文本结构化处理_在Python中标记非结构化文本数据
- Oracle distinct后加as,【大话IT】为何加distinct之后就不走索引了
- java 找不到符号 con_我的java程序运行时,提示找不到符号,求解!
- memcached全面剖析–2. 理解memcached的内存存储
- 基本的python内置函数str(x)_Python内置函数(61)——str
- Codeforces Round #327 div2
- python教程博客园_python学习(一)—简明python教程
- 开发小技巧: 如何在jQuery中禁用或者启用滚动事件.scroll
- 计算机并口优点,并口光驱优缺点有哪些 并口光驱如何转串口
- 使用python做一个翻译工具
- 删除bootcamp后扩充Mac分区
- Raptor制作猜数游戏流程图
- 凡事预则立,不预则废。做事提前5分钟,更多主动权。
- HDU - 2024 C语言合法标识符
- 笔记本计算机打开任务管理器,笔记本电脑按哪个键打开任务管理器
- 猫眼html源码,爬取猫眼及可视化(示例代码)