3721: PA2014 Final Bazarek

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 610  Solved: 243
[Submit][Status][Discuss]

Description

有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价。

Input

第一行一个整数n(1<=n<=1000000),表示商品数量。
接下来一行有n个整数,表示每件商品的价格,范围在[1,10^9]。
接下来一行有一个整数m(1<=m<=1000000),表示询问数量。
接下来m行,每行一个整数k[i](1<=k[i]<=n)。

Output

对于每个询问,输出一行表示保证奇数的情况下最大的总价。若无法满足要求,输出-1。

Sample Input

4
4 2 1 3
3
2
3
4

Sample Output

7
9
-1

HINT

Source

鸣谢Jcvb

Solution

贪心直接搞就可以

首先我们从大到小排序,然后处理出$sumV[i]$,$maxo[i]$,$maxe[i]$,$mino[i]$,$mine[i]$

分别表示:前缀和、后缀最大奇数、后缀最大偶数、前缀最小奇数、前缀最小偶数

然后对于一次询问K,如果$sumV[K]$为奇数,那么答案显然是$sumV[K]$

如果为偶数,考虑替换,把前缀最小奇数替换成后缀最大偶数,或前缀最小偶数替换成后缀最大奇数,这样取较大即可

这样替换,显然满足sum从偶变奇,且总和最大。

特判一下不合法的情况输出-1即可。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
inline int read()
{int x=0,f=1; char ch=getchar();while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}return x*f;
}
#define MAXN 1000100
int N,K,M;
int val[MAXN],mine[MAXN],maxo[MAXN],mino[MAXN],maxe[MAXN];
LL sumV[MAXN];
#define INF 0x7fffffff
bool cmp(int x,int y) {return x>y;}
void PreWork()
{sort(val+1,val+N+1,cmp);for (int i=1; i<=N; i++) sumV[i]=sumV[i-1]+(LL)val[i];mine[0]=INF; mino[0]=INF;for (int i=1; i<=N; i++) mine[i]=min(mine[i-1],val[i]&1? INF:val[i]),mino[i]=min(mino[i-1],val[i]&1? val[i]:INF);maxo[N+1]=-INF; maxe[N+1]=-INF;for (int i=N; i>=1; i--)maxe[i]=max(maxe[i+1],val[i]&1? -INF:val[i]),maxo[i]=max(maxo[i+1],val[i]&1? val[i]:-INF);
}
inline LL Ask(int K)
{if (sumV[K]&1) return sumV[K]; bool f1=0,f2=0; LL re=-INF;if (mino[K]!=INF && maxe[K+1]!=-INF) f1=1;if (mine[K]!=INF && maxo[K+1]!=-INF) f2=1;if (!f1 && !f2) return (LL)-1; if (f1) re=max(re,sumV[K]-mino[K]+maxe[K+1]);if (f2) re=max(re,sumV[K]-mine[K]+maxo[K+1]);return re;
}
int main()
{N=read();for (int i=1; i<=N; i++) val[i]=read();M=read();PreWork();while (M--) K=read(),printf("%lld\n",Ask(K));return 0;
}

转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5853935.html

【BZOJ-3721】Final Bazarek 贪心相关推荐

  1. 牛客 - Final Exam(贪心)

    题目链接:点击查看 题目大意:给出 n 个数组成的数组 a ,再给出 q 次询问,每次询问给出一个 m ,要求找到一个 k ,使得 ( k ^ a[ i ] ) 之和小于等于 m 且 k 最大,若不存 ...

  2. bzoj 5185 Lifeguards - 动态规划 - 贪心

    题目传送门 传送点I 传送点II 题目大意 给定$n$个区间,问恰好删去其中$k$个,剩下的区间的并的最大总长度. 显然被包含的区间一定不优.再加上被包含的区间对计数不友好.直接把它删掉. 注意到题目 ...

  3. BZOJ 3709: [PA2014]Bohater 贪心

    时空隧道 分析: 这种题基本上都是贪心了- 我们考虑怎样安排才能使得自己不会死掉-QAQ-当然是生命值越大越好-所以为们应该贪心的先使自己的生命值增大再去减小生命值- 所以我们就得到了一个大概的贪心方 ...

  4. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  5. python数字加密解密_Python对整形数字进行加密和解密

    SAP存货账龄分析之库存获取 前段时间上面要求做一个历史库存账龄分析,取历史数据的时候一直纠结于用mchb/mchbh/mska/mskah等实时和历史库存表,然而试来试去还是不能成功,于是决定DEB ...

  6. larval mysql 查询转数组_laravel 中将DB::select 得到的内容转为数组

    django处理静态文件 静态文件指的是js css 还有图片这些,配置方法如下 1. 在设置文件(settings.py)中,installed_apps中添加 django.contrib.sta ...

  7. java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...

    [javascript] view plaincopy [root@localhost usr]# $JAVA_HOME/bin/java -version bash: /bin/java: 没有那个 ...

  8. HOJ题目分类//放这儿没事刷刷学算法!嘻嘻!

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  9. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

最新文章

  1. Google Ajax Search 参考
  2. python 怎么将数组转为列表_图片转换成pdf格式怎么操作?什么软件能将图片转为pdf?...
  3. ListView使用技巧
  4. python怎么网络通信_深入Python中的网络通信
  5. java 三大框架面试题
  6. epoll监听文件_介绍一下 Android Handler 中的 epoll 机制?
  7. 实现一个基于动态代理的 AOP
  8. markdown语法简明笔记
  9. Flink 1.7 文档翻译活动期待大家的参与 | ApacheCN
  10. CTreeCtrl::HitTest
  11. fenking是什么意思?
  12. PDF区域文本提取工具
  13. sap abap开发从入门到精通_SAP开发-ABAP数据字典(搜索帮助增强)
  14. 非华为PC安装华为电脑管家,免积分下载
  15. 超详细! 利用Synopsys VCS对Verilog代码加密的四种方法
  16. 二、帧模式 MPLS 操作
  17. vc6.0精简版支持win7 64位版本
  18. console口设置登录密码
  19. 抖音快手初学者如何快速成长
  20. GitHub上1.5万Star的开源抢票神器!

热门文章

  1. RDLC 报表参数、常量及常用表达式的使用方法(上)
  2. 名校和非名校[两个实习生的事]
  3. DataGridView 编程
  4. 【python教程入门学习】普通人学python有意义吗
  5. html5在zigbee中起什么作用,ZigBee是什么?ZigBee在智能家居中扮演什么角色
  6. 当学术论文开始标题党「x is All You Need」
  7. 真香!腾讯再发阳光普照奖:每人100股,价值超6万!
  8. 携Science封面、NIPS最佳论文,CMU大神博士毕业论文公开
  9. android6要多大运存,内存多大手机才能不卡? 现在终于有了答案
  10. 窗体皮肤ssk 跟背景图片冲突_一件靠谱的皮肤衣应该长什么样?