题意:给出一堆元素,求一个子集,使子集的乘积最大,如有多个,应该使子集元素个数尽量小。

题解:贪心,如果有大于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 贪心)的更多相关文章

  1. 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 ...

  2. CodeForces Gym 100685E Epic Fail of a Genie (贪心,控制精度)

    题意:给定 n 个数,然后让从中选取一些数使得它们的总乘积最大.如果有多个,要求这些数尽量少,如果还有多个,随便输出一组即可. 析:一个贪心题,根据乘法的性质,很容易知道,如果一个数大于1,那么肯定要 ...

  3. 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 ...

  4. 程序员的Epic Fail [0]

    作为程序员,我们经常会被客户问的一个问题一定是不是说很容易么,为什么花了这么长时间.不得不说,程序员可能是最糟糕的计划者,按时按点按计划完成的软件项目永远是下一个项目.一个项目的延期,有很多这样那样的 ...

  5. Codeforce Gym 100015I Identity Checker 暴力

    Identity Checker 题目连接: http://codeforces.com/gym/100015/attachments Description You likely have seen ...

  6. codeforce gym/100495/problem/K—Wolf and sheep 两圆求相交面积 与 gym/100495/problem/E—Simple sequence思路简述

    之前几乎没写过什么这种几何的计算题.在众多大佬的博客下终于记起来了当时的公式.嘚赶快补计算几何和概率论的坑了... 这题的要求,在对两圆相交的板子略做修改后,很容易实现.这里直接给出代码.重点的部分有 ...

  7. codeforce Gym 101102A Coins (01背包变形)

    01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...

  8. codeforce gym/100495/problem/F Snake++——DFS应用

    emmmm.... 在被新生暴打后,我花了很久才补出这道DFS.由于WA1检查了半天,最后竟然是输出少了一个:   ,心态小崩. 这里普通的dfs算出的连通区域并不能直接当做最后的答案.所以需要类似模 ...

  9. codeforce Gym 100425E The Street Escalator(期望,线性递推)

    算数学期望,每个人都可以分开来考虑.Xi表示第i个人跑到另外一边的次数. Xi服从二项分布.概率的和是个二项式,(p+1-p)^T,把二项式展开,p的偶次项是留在原来那一边的概率. 可以用((a+b) ...

随机推荐

  1. 8. php回调后门

    中国菜刀下载,基于原版中国菜刀优化版20160309. 下载地址: http://pan.baidu.com/s/1jHoJxHW China chopper http://pan.baidu.com ...

  2. rest framework 认证

    一.简单认证示例 需求: 用户名密码正确:没有 token 则产生一个 token,有 token 则更新,返回登录成功: 若用户名或密码错误,返回错误信息. 1.models.py from dja ...

  3. JavaScript 的基本语法

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1. ...

  4. MVC4 @helper辅助方法

    Razor提供了一种很方便的语法,可以将view页面中部分内容或部分代码抽取出来,变成一个独立的辅助方法.   eg1: @foreach(var item in Model){ <标签tr&g ...

  5. OpenStack日志分析

    日志文件说明 Nova日志 OpenStack计算服务日志位于/var/log/nova目录下(此目录在Controller和Compute节点都存在),默认权限拥有者是nova用户 文件名 作用 n ...

  6. excel 恢复忘记保存的文档

    如果在做Excel的过程遇见突发情况忘记保存文件,那么不要担心,你再次打开这个文件时会有提示,你只需要点击恢复文件即可. 假设因为某些原因,你不小心点了关闭,或者你不知道那个关闭按钮是什么意思,所以就 ...

  7. glassfish cluster 搭建

    http://blog.csdn.net/wych1981/article/details/8815150

  8. jmeter的Include Controller控件和Test Fragment控件和Module Controller控件

    1.Include Controller控件——给当前jmeter脚本引入外部片段的jmeter脚本(Test Fragment片段脚本) Include Controller控件——添加外部jmet ...

  9. Luogu P2257 YY的GCD 莫比乌斯反演

    第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...

  10. 长春理工大学第十四届程序设计竞赛(重现赛)H.Arithmetic Sequence

    题意: 数竞选手小r最喜欢做的题型是数列大题,并且每一道都能得到满分. 你可能不相信,但其实他发现了一个结论:只要是数列,无论是给了通项还是给了递推式,无论定义多复杂,都可以被搞成等差数列.这样,只要 ...