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) ...
随机推荐
- SQL Server(三)
一.数据库操作 create database 数据库名称 ——创建drop database 数据库名称 ——删除use 数据库名称 ——使用go 两条SQL语句之间分隔 二.表的操作 create ...
- WPF在ViewModel中绑定按钮点击(CommandBase定义)
定义CommandBase public class CommandBase:ICommand { private readonly Action<object> _commandpara ...
- 使用Xilinx SDSoc在Xilinx zcu102开发板上编程HelloWorld
关于Xilinx SDSoc的介绍我就不再复述了,我理解的也不一定准确,可以阅读官方文档了解SDSoc,你可以把它理解为一个集成开发环境 (IDE),通过SDSoc我们能够简单快速的对Xilinx的开 ...
- 解决Idea项目启动报错:程序包javax.servlet.http不存在
报错信息 在没有使用maven的时候,web项目从远程仓库获取下以后,起一次启动往往会报错javax.servlet.http程序包找不到,随之而来的java基础包都将不能使用,报错信息如下: 解决方 ...
- EOS帐户交易的构建命令
EOS版本:4.0 系统:Ubuntu 16.04 LTS 1.创建两对密匙 cleos create key Private key:5JeTwSwKfpVRHGLqysakTXfk ...
- mongodb-win
http://www.cnblogs.com/clsn/p/8214194.html#auto_id_22 Mongodb的作用: 用于对象及JSON数据的存储,它存的都是对象比如字典, 数据库,无论 ...
- Luogu P2341 [HAOI2006]受欢迎的牛 SCC缩点
把强连通分量缩点,如果有且仅有一个出度为0的强连通分量,那么答案就是他的size:如果有多个入度为0的,那么没有明星牛. #include<cstdio> #include<iost ...
- Codeforces Round #562 (Div. 2) A.Circle Metro
链接:https://codeforces.com/contest/1169/problem/A 题意: The circle line of the Roflanpolis subway has n ...
- 牛客小白月赛13 G(双向搜索)
AC通道 两边同步搜,一步里面A走一次B走两次,遇到对方走过的地方就得到了答案. #include <bits/stdc++.h> using namespace std; const i ...
- redis安装&启动
1.下载:redis.io,我下载的是5.0. 2.安装 1).tar -zxvf redis-5.0.0 2).进入src目录,执行make 3.回退到src的上一级目录,编辑redis.conf ...