BZOJ 3721: PA2014 Final Bazarek
3721: PA2014 Final Bazarek
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 645 Solved: 261
[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 2 1 3
3
2
3
4
Sample Output
9
-1
HINT
Source
先对所有数字按照从大到小的顺序排序,然后维护前缀和,以及最小前缀(奇数/偶数),最大后缀(奇数/偶数)。
当询问K个的时候,如果sum[k]凑巧是个奇数,那么答案就是sum[k],否则就考虑用一个未添加的奇数换一个已添加的偶数,或是用一个未添加的偶数换一个已添加的奇数,二者取其大。
#include <bits/stdc++.h> template <class T>
inline void read(T &x) {
char c = getchar(); x = ;
while (c < '')
c = getchar();
while (c >= '') {
x = x* + c - '';
c = getchar();
}
} template <class T>
inline T Max(const T &a, const T &b) {
return a > b ? a : b;
} template <class T>
inline T Min(const T &a, const T &b) {
return a < b ? a : b;
} inline int cmp(const void *a, const void *b) {
return - *(int *)a + *(int *)b;
} typedef long long longint; const int inf = 2e9 + ; const int siz = ; int n, m;
int num[siz];
int min[siz][];
int max[siz][];
longint sum[siz]; inline void prework(void) {
qsort(num + , n, sizeof(int), cmp); memset(sum, , sizeof(sum)); for (int i = ; i < siz; ++i)
min[i][] = min[i][] = inf,
max[i][] = max[i][] = -inf; for (int i = ; i <= n; ++i)
sum[i] = sum[i - ] + num[i]; for (int i = ; i <= n; ++i) {
int a = num[i] & , b = a ^ ;
min[i][a] = num[i];
min[i][b] = min[i - ][b];
} for (int i = n; i >= ; --i) {
int a = num[i] & , b = a ^ ;
max[i][a] = num[i];
max[i][b] = max[i + ][b];
}
} inline bool judge(int k) {
return
(min[k][] == inf || max[k + ][] == -inf)
&& (min[k][] == inf || max[k + ][] == -inf);
} inline void query(int k) {
if (sum[k] & )
printf("%lld\n", sum[k]);
else if (judge(k))puts("-1");
else printf("%lld\n",
sum[k] + Max(
- min[k][] + max[k + ][],
- min[k][] + max[k + ][])
);
} signed main(void) {
read(n); for (int i = ; i <= n; ++i)
read(num[i]); prework(); read(m); for (int i = , k; i <= m; ++i)
read(k), query(k);
}
@Author: YouSiki
BZOJ 3721: PA2014 Final Bazarek的更多相关文章
- BZOJ 3721: PA2014 Final Bazarek【乱搞】
有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数,表示每件商品的价格,范 ...
- bzoj 3721: PA2014 Final Bazarek 贪心
如果没有限制,直接取前 $k$ 大即可. 有限制,则只有几种可能:奇换偶,偶换奇. 维护奇数偶数的前缀最小值和后缀最大值即可. code: #include <bits/stdc++.h> ...
- 【BZOJ3721】PA2014 Final Bazarek 贪心
[BZOJ3721]PA2014 Final Bazarek Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n ...
- bzoj 3722: PA2014 Final Budowa
3722: PA2014 Final Budowa Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 303 Solved: 108[Submit][St ...
- bzoj3721 [PA2014 Final] Bazarek
Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数 ...
- 【贪心】bzoj3721 PA2014 Final Bazarek
考虑不限制奇偶的情况,那就是直接排序取前k个的和. 加上奇偶限制:若排序后的前k个的和是偶数,则“显然地”:将其中的最小的奇数替换成未被选择的数中最大的偶数 或者 将其中的最小的偶数替换成未被选择的数 ...
- BZOJ 3727 PA2014 Final Zadanie 树形DP
题目大意:给定一棵树,令一个点到全部点的距离与点权的乘积之和为b[i].求每一个点的权值a[i] 首先假设给定a[i]我们能够非常轻松的求出b[i] 可是反过来怎么搞?高斯消元?30W? 考虑已知a[ ...
- BZOJ[3728]PA2014 Final Zarowki
有n个房间和n盏灯,你需要在每个房间里放入一盏灯.每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮. 你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售.但由于背包空间有 ...
- 【BZOJ-3721】Final Bazarek 贪心
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 610 Solved: 243[Submit][ ...
随机推荐
- [推荐]两款Flash上传插件(1)–CFUpdate文件批量上传组件
搞开发的同学都知道,网上可搜到的可用的Flash图片上传的组件少之又少,可定制界面,不需要安装组件,且可免费用于任何商业系统的,更是凤毛麟角,如果你和我一样,迫切需要一款这样的一款组件的话,不妨试试C ...
- Alwayson--SYS.dm_hadr_instance_node_map 返回0行
下面是MSDN关于SYS.dm_hadr_instance_node_map 的解释,我就不在翻译了 For every instance of SQL Server that hosts an av ...
- 金旭亮老师的Scoekt编程摘要
Socket提供了众多的属性,还提供了SetSocketOption方法来设置各种选项,对.NET网络应用程序的数据通讯进行“微调”. Socket的功能出奇地强大,在.NET平台上,它支持以下 ...
- pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat Windows7下pip安装包报错:Microso ...
- jQuery使用.on()无法绑定hover
发现好像没有hover这个事件,jQuery的hover事件是一个封装,hover算不得一个事件.他只是将mouseover和mouseout合并了用mouseover和mouseout两个配合效果好 ...
- Windows 提高效率的常用快捷键
开发中减少使用鼠标次数,是一个很cool的体验!下面的快捷键在Win7上测试有效 快捷键 说明 Ctrl+Shift+N 创建一个新的文件夹. (Ctrl + N 打开桌面) Ctrl+Shift+ ...
- java: ant 脚本示例
<?xml version="1.0" encoding="UTF-8"?> <!--basedir是从build.xml所在的目录为基础算起 ...
- SUBLIME TEXT 2中,光标移入移出括号的快捷键设置
无赖右方向键→和End键都在键盘的另一边,每次输入完一个函数,光标在各种括号中间,有什么更好的方式将光标移出来呢?在Sublime Text 2中,我们可以自己设置快捷键: { "keys& ...
- 基于DDD的.NET开发框架 - ABP模块设计
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- Bootstrap系列 -- 3. 段落
一. 段落基本用法 1. 段落使用<p>标签 2. 段落全局使用font-size=14px字体 ..... 更多请使用Firefox 查看 <p> 华盛顿大学和清华大学共同在 ...