codeforce Gym 100685E Epic Fail of a Genie(MaximumProduction 贪心)
题意:给出一堆元素,求一个子集,使子集的乘积最大,如有多个,应该使子集元素个数尽量小。
题解:贪心,如果有大于1的正数,那么是一定要选的,注意负数也可能凑出大于1的正数,那么将绝对值大于1的负数两两配对,
如果还剩下一个绝对值大于1的负数,那么在判断一下,那个负数和比它大的最小负数的乘积是否大于1,如果是那么就选这两个。
把所有可能凑成大于1的数选完以后,剩下的数一定比1小,那么就不选。
如果无法凑出大于1的数,那么再分类讨论一下。
挺容易写错。。。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4+; struct Num
{
int a[maxn];
int id[maxn];
int r[maxn];
int sz;
Num(){sz = ;}
void push(double x,int i){
a[sz] = x*;
r[sz] = sz;
id[sz] = i;
sz++;
} int _upper_bound(int L,int R,int v)
{
while(L<R){
int m = (L+R)>>;
if(a[r[m]]>v) R = m;
else L = m+;
}
return L;
} int _lower_bound(int L,int R,int v)
{
while(L<R){
int m = (L+R)>>;
if(a[r[m]]>=v) R = m;
else L = m+;
}
return L;
}
// int id(int x) { return r[x]; } int operator [](int x){
return a[r[x]];
}
}P,M; int ans[maxn]; #define GetBound(l,r,v,which)\
l = which._lower_bound(,which.sz,v);\
r = which._upper_bound(,which.sz,v); #define Add(which,x)\
ans[sz++] = which.id[which.r[x]]; bool cmp(int x,int y) { return P.a[x] < P.a[y]; }
bool cmp2(int x,int y) { return M.a[x] < M.a[y]; } int main()
{
//freopen("in.txt","r",stdin);
int n; scanf("%d",&n);
bool zero = false;
int pzero;
for(int i = ; i <= n; i++){
double t;
scanf("%lf",&t);
if(t>){
P.push(t,i);
}else if(t<){
M.push(-t,i);
}else if(!zero) {
zero = true;
pzero = i;
}
}
sort(P.r,P.r+P.sz,cmp);
sort(M.r,M.r+M.sz,cmp2);
int m1l,m1r,p1l,p1r;
GetBound(m1l,m1r,,M)
GetBound(p1l,p1r,,P) int sz = ;
int t;
for(t = p1r; t < P.sz; t++) Add(P,t)
int odd = (M.sz - m1r)&;
for(t = m1r+odd; t < M.sz; t++) Add(M,t)
if(odd){
if(m1r> && M[m1r]/.*M[m1r-] > ) { Add(M,m1r) Add(M,m1r-) }
} if(!sz){
int psz = P.sz, msz = M.sz;
if(psz){
if(msz>= && M[msz-]*M[msz-] > P[psz-]* ){
Add(M,msz-) Add(M,msz-)
}else { Add(P,psz-) }
}else {
if(msz>=){
Add(M,msz-) Add(M,msz-)
}else ans[sz++] = pzero;
}
} sort(ans,ans+sz);
printf("%d\n%d",sz,ans[]);
for(int i = ; i < sz; i++) printf(" %d",ans[i]);
putchar('\n');
return ;
}
codeforce Gym 100685E Epic Fail of a Genie(MaximumProduction 贪心)的更多相关文章
- CF Gym 100685E Epic Fail of a Genie
传送门 E. Epic Fail of a Genie time limit per test 0.5 seconds memory limit per test 64 megabytes input ...
- CodeForces Gym 100685E Epic Fail of a Genie (贪心,控制精度)
题意:给定 n 个数,然后让从中选取一些数使得它们的总乘积最大.如果有多个,要求这些数尽量少,如果还有多个,随便输出一组即可. 析:一个贪心题,根据乘法的性质,很容易知道,如果一个数大于1,那么肯定要 ...
- Codeforces gym 100685 E. Epic Fail of a Genie 贪心
E. Epic Fail of a GenieTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685 ...
- 程序员的Epic Fail [0]
作为程序员,我们经常会被客户问的一个问题一定是不是说很容易么,为什么花了这么长时间.不得不说,程序员可能是最糟糕的计划者,按时按点按计划完成的软件项目永远是下一个项目.一个项目的延期,有很多这样那样的 ...
- Codeforce Gym 100015I Identity Checker 暴力
Identity Checker 题目连接: http://codeforces.com/gym/100015/attachments Description You likely have seen ...
- codeforce gym/100495/problem/K—Wolf and sheep 两圆求相交面积 与 gym/100495/problem/E—Simple sequence思路简述
之前几乎没写过什么这种几何的计算题.在众多大佬的博客下终于记起来了当时的公式.嘚赶快补计算几何和概率论的坑了... 这题的要求,在对两圆相交的板子略做修改后,很容易实现.这里直接给出代码.重点的部分有 ...
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- codeforce gym/100495/problem/F Snake++——DFS应用
emmmm.... 在被新生暴打后,我花了很久才补出这道DFS.由于WA1检查了半天,最后竟然是输出少了一个: ,心态小崩. 这里普通的dfs算出的连通区域并不能直接当做最后的答案.所以需要类似模 ...
- codeforce Gym 100425E The Street Escalator(期望,线性递推)
算数学期望,每个人都可以分开来考虑.Xi表示第i个人跑到另外一边的次数. Xi服从二项分布.概率的和是个二项式,(p+1-p)^T,把二项式展开,p的偶次项是留在原来那一边的概率. 可以用((a+b) ...
随机推荐
- LayUI 子父窗体的交互
---恢复内容开始--- 收到的工作是将一个ERP的窗体程序改为网页实现,所以就肯定需要弹框来选择(如:物料编码.部门.业务员等等) 本文采取的前段框架是LayUI. layUI的官网API网址:ht ...
- Celery异步任务重复执行(Redis as broker)
之前讲到利用celery异步处理一些耗时或者耗资源的任务,但是近来分析数据的时候发现一个奇怪的现象,即是某些数据重复了,自然想到是异步任务重复执行了. 查阅之后发现,到如果一个任务太耗时,任务完成时间 ...
- 洛谷P2759 奇怪的函数
P2759 奇怪的函数 题目描述 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? 输入输出格式 输入格式: 一个正整数 n 输出格式: 使得 x^x 达到 n 位数字的最小正整数 x ...
- 洛谷P2862 [USACO06JAN]把牛Corral the Cows
P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...
- 洛谷P2583 地铁间谍
P2583 地铁间谍 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发 ...
- mysql-5.5.56免安装版配置方法
1. 下载mysql-5.5.56-winx64 网址:dev.mysql.com/downloads/mysql/ 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下,我 ...
- 洛谷P2194 HXY烧情侣
题目描述 众所周知,\(HXY\)已经加入了\(FFF\)团.现在她要开始喜\((sang)\)闻\((xin)\)乐\((bing)\)见\((kuang)\)地烧情侣了.这里有\(n\)座电影院, ...
- JS高级学习历程-13
[正则表达式] \d \d\d [a-z] 什么是正则表达式:用于记录文本规则的代码 正则表达式的作用: ① 可以匹配文本,表单验证(手机号码.邮箱.qq号码) ② 赛选网页内 ...
- Codeforces 126B(kmp)
要点 头尾的最长相同只要一个kmp即可得,于是处理中间部分 扫一遍记录一下前缀的每个位置是否存在一个中间串跟它相同,见代码 如果当前没有,接着用Next数组去一找即可 #include <cst ...
- Codeforces 1159E(拓扑序、思路)
要点 序列上各位置之间的关系常用连边的手段转化为图的问题. 经过一番举例探索不难发现当存在两条有向边交叉时是非法的. -1是模糊的,也就是填多少都可以,那为了尽量避免交叉我们贪心地让它后面那个连它就行 ...