乘积最大|2018年蓝桥杯B组题解析第十题-fishers
标题:乘积最大
给定N个整数A1, A2, ... AN。请你从中选出K个数,使其乘积最大。
请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以1000000009的余数。
注意,如果X<0, 我们定义X除以1000000009的余数是负(-X)除以1000000009的余数。
即:0-((0-x) % 1000000009)
【输入格式】
第一行包含两个整数N和K。
以下N行每行一个整数Ai。
对于40%的数据,1 <= K <= N <= 100
对于60%的数据,1 <= K <= 1000
对于100%的数据,1 <= K <= N <= 100000 -100000 <= Ai <= 100000
【输出格式】
一个整数,表示答案。
【输入样例】
5 3
-100000
-10000
2
10000
100000
100001
【输出样例】
999100009
再例如:
【输入样例】
5 3
-100000
-100000
-2
-100000
-100000
【输出样例】
-999999829
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
思路:双指针;1.sort排序这N个数 2.使用两个指针:最左left,最右right 3.左边2个2个选 右边1个1个选(因为乘积要最大,贪心选,不能是负数(除非特殊情况)
代码:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,k;
int a[100010];
int b[100010];
int main(){
cin>>n>>k;
int l = 1;
int r = n;
int t = 1;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
while(t<=n && l<r){
if(a[l] * a[l+1] > a[r] * a[r-1] && t+1<=k){
b[t++] = a[l];
b[t++] = a[l+1];
l+=2;
}else{
b[t++] = a[r];
r--;
}
}
for(int i=1;i<=k;i++){
cout<<b[i]<<endl;
}
}
ps:没有测试大数据,朋友们如果有做蓝桥杯题目的网站,欢迎下方评论区留言!
方法二dfs求出所有全排列,再选取乘积最大的,求余数(大数过不了):
#include<iostream>
#include<algorithm>
#define ppp 1000000009
using namespace std;
/*思路:枚举所有组合(选取k个数) 再求出各组的乘积 取最大值*/
int n,k;
int arr[100010];
int ans[100010];
int vis[100010];
long long final[100010];
int t = 0;
//大数乘法,乘法这里有问题 求余的地方不对 什么时候该求余?
long long cheng(int ans[]){
long long sum = 1;
for(int i=0;i<k;i++){
int flag = 0;
long long ansLocal = ans[i];
if(ans[i]<0){
flag = 1;
ansLocal = -ansLocal;
}
sum = ((sum%ppp) * (ansLocal%ppp) )%ppp;
if(flag) sum = -sum;
}
return sum;
}
long long cheng2(int ans[]){
long long sum = 1;
for(int i=0;i<k;i++){
int flag = 0;
sum*= ans[i];
}
return sum;
}
//-100000 -10000 100000 999100009
//-100000 -10000 2 999999991
void dfs(int x){
if(x==k){
//计算ans中k个值的乘积处以1000000009
long long answer = cheng2(ans);
// 999999991
// if(answer == 999999991){
// for(int j = 0; j < k; j++){
// cout<<"jjj = "<<j<<" "<<ans[j]<<endl;
// }
// }
final[t++] = answer;
return;
}
for(int i=0;i<n;i++){
if(!vis[i]){
vis[i] = 1;
ans[x] = arr[i];
dfs(x+1);
vis[i] = 0;
}
}
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>arr[i];
vis[i] = 0;
}
dfs(0);
sort(final,final+t);
for(int i=0;i<t;i++){
cout<<i<<" "<<final[i]<<endl;
}
cout<<final[t-1]%ppp<<endl;//结果和题目中的输出样例不符合
return 0;
}
乘积最大|2018年蓝桥杯B组题解析第十题-fishers的更多相关文章
- 2018年蓝桥杯A组C/C++决赛题解
2018年第九届蓝桥杯A组C/C++决赛题解 点击查看视频题解 点击查看2018年蓝桥杯A组C/C++决赛题目(不含答案) 1:三角形面积 画个图,求三角形面积,可以用外接长方形 - 其他多余区域面积 ...
- 2018年蓝桥杯A组C/C++决赛题目
2018年蓝桥杯A组C/C++决赛题目 2018年蓝桥杯A组C/C++决赛题解 1:三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3, 2.5) (6.4, 3.1) (5 ...
- 2018年蓝桥杯B组C/C++决赛题解
2018年第九届蓝桥杯B组C/C++决赛题解 点击查看2018年蓝桥杯B组C/C++决赛题目(不含答案) 1.换零钞 ok 枚举 设x表示1元钱的个数,y表示2元钱的个数,z表示5元钱的个数 x+21 ...
- 2018年蓝桥杯B组C/C++决赛题目
自己的博客排版,自我感觉略好一点. 先放上题目. 点击查看2018年蓝桥杯B组C/C++决赛题目题解 1.换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游, ...
- 第六届蓝桥杯JavaB组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...
- 第六届蓝桥杯JavaA组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有 ...
- 乘积尾零|2018年蓝桥杯B组题解析第三题-fishers
标题:乘积尾零 如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 ...
- 递增三元组|2018年蓝桥杯B组题解析第六题-fishers
标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i, j ...
- 买不到的数目|2018年蓝桥杯A组题解析第八题-fishers
买不到的数目 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 10 颗糖 ...
随机推荐
- Ubuntu安装mysql及设置远程访问方法
ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-clie ...
- Kafka性能
基准测试Apache Kafka:每秒写入2百万(在三台便宜的机器上) 核心的数据枢纽一定是高效的,可预测的,并且容易扩展.Kafka能够做到在普通的硬件上支撑每秒百万次写入. Kafka的数据模型非 ...
- eclipse copy web project后修改context root
1.项目-->右键-->properties
- 实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上
转载:http://www.cnblogs.com/top5/archive/2012/12/10/2812133.html 目的:实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC) ...
- Unity3d 镜面折射 vertex and frag Shader源代码
Unity3d 镜面折射 网上能找到的基本上是固定管道或表面渲染的shader. 特此翻译为顶点.片段渲染的Shader, 本源代码仅仅涉及shader与cs部分, 请自行下载NGUI unity ...
- spring boot配置service发布服务
在application.yml中配置 server: port: 8080 context-path: /crm spring: datasource: driver-class-name: com ...
- [py]flask蓝图的使用
参考 flask挺挺轻巧的, 因此玩一玩它. 如果用它做大型点的项目, 就用到了它的蓝图组织项目. 一时半会不太清楚这玩意怎么用, 得撸一撸py基础了. 我搞了个movie小的flask栗子来用用蓝图 ...
- Google面试题[一]
谷歌是不少IT人都想去的企业,那么在进入公司前,少不了面试笔试的测试.那么这里我们就总结了如下谷歌笔试题,并提供了一些参考答案.希望对您有用. 谷歌笔试题:判断一个自然数是否是某个数的平方.当然不能使 ...
- 7.10 Models -- Handling Metadata(处理元数据)
1. 随着从store中返回的records,你可能需要处理一些元数据.Metadata是伴随着特定model或者type的一种数据,而不是record. 2. 分页是使用元数据的一个常见的例子.想象 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON SetComprise2
zw版[转发·台湾nvp系列Delphi例程]HALCON SetComprise2 procedure TForm1.Button1Click(Sender: TObject);var op : H ...