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

题解:贪心,如果有大于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. solr--搭建全文搜索服务器

    1.下载http://www-eu.apache.org/dist/lucene/solr/6.5.0/ 2.新建: 云模式 3.打开浏览器: 简单的中文分词,暂时是一个一个的分词:

  2. iframe和window对象的关系

    浏览器会在其打开一个 HTML 文档时创建一个对应的 window 对象.但是,如果一个文档定义了一个或多个框架(即,包含一个或多个 frame 或 iframe 标签),浏览器就会为原始文档创建一个 ...

  3. 7.20实习培训日志-Java基础程序设计结构

    Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...

  4. 滴滴Booster移动APP质量优化框架 学习之旅

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 一.Booster简介 Booster是滴滴最近开源一个的移动应 ...

  5. SQL中的limit

    SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1; LIMIT m,n : 表示从第m+1条开始,取n条数据: LIMIT n : 表 ...

  6. __stdcall

    __stdcall是函数调用约定的一种,函数调用约定主要约束了两件事: 1.参数传递顺序 2.调用堆栈由谁(调用函数或被调用函数)清理 常见的函数调用约定:stdcall cdecl fastcall ...

  7. AES 加密 PHP 和 JAVA 互通

    PHP代码: <?php class Security { public static function encrypt($input, $key) { $size = mcrypt_get_b ...

  8. hdu1754(线段树单点替换&区间最值模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 题意:中文题诶- 思路:线段树单点替换&区间最大值查询模板 代码: #include & ...

  9. Luogu P3065 [USACO12DEC]第一!First!【字典树/拓扑排序】By cellur925

    题意:给你许多字符串,你可以改变字母序大小,问有哪些字符串可能成为字典序最小的字符串. 我们考虑把这些字符串都塞到\(trie\)树上.之后检索每一个字符串的时候,我们看和他同一层的地方是否有字符,如 ...

  10. HTTP2 Sampler for JMeter

    今天开发大大说能不能帮忙压一下HTTP2的链接,便去查了一下相关的东西. HTTP 2.0 的出现,相比于 HTTP 1.x ,大幅度的提升了 web 性能.在与 HTTP/1.1 完全语义兼容的基础 ...