洛谷P8669 乘积最大

这篇具有很好参考价值的文章主要介绍了洛谷P8669 乘积最大。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[蓝桥杯 2018 省 B] 乘积最大

题目描述

给定 N N N 个整数 A 1 , A 2 , ⋯   , A N A_1, A_2,\cdots, A_N A1,A2,,AN。请你从中选出 K K K 个数,使其乘积最大。

请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009 1000000009 1000000009(即 1 0 9 + 9 10^9+9 109+9)的余数。

注意,如果 X < 0 X<0 X<0, 我们定义 X X X 除以 1000000009 1000000009 1000000009 的余数是 0 − ( ( 0 − x )   m o d   1000000009 ) 0-((0-x)\bmod 1000000009) 0((0x)mod1000000009)

输入格式

第一行包含两个整数 N N N K K K

以下 N N N 行每行一个整数 A i A_i Ai

输出格式

一个整数,表示答案。

样例 #1

样例输入 #1

5 3 
-100000   
-10000   
2   
100000  
10000

样例输出 #1

999100009

样例 #2

样例输入 #2

5 3 
-100000   
-100000   
-2   
-100000  
-100000

样例输出 #2

-999999829

提示

对于 40 % 40\% 40% 的数据, 1 ≤ K ≤ N ≤ 100 1\le K\le N\le 100 1KN100

对于 60 % 60\% 60% 的数据, 1 ≤ K ≤ 1000 1\le K \le 1000 1K1000

对于 100 % 100\% 100% 的数据, 1 ≤ K ≤ N ≤ 1 0 5 1\le K\le N\le 10^5 1KN105 − 1 0 5 ≤ A i ≤ 1 0 5 -10^5\le A_i\le 10^5 105Ai105

解题要点摘要:文章来源地址https://www.toymoban.com/news/detail-460749.html

1、乘积最大为正数时,绝对值要求最大。<双指针>
2、乘积最大为负数时,绝对值要求最小。 <贪心,排序>
3、答案为ans%mod,此时的ans正负都可行。
4、mod不是1e9+7哦。

bool cmp(ll x,ll y)
{
    return abs(x)<abs(y);
}
void __()//求乘积绝对值最小的答案
{
    ans=1;
    sort(b+1,b+n+1,cmp);
    for(int i=1;i<=m;i++)ans*=b[i],ans%=mod;
    ans%=mod;
}
void solve()
{
	ans=1;
	cin>>n>>k;
	m=k;
	for(int i=1;i<=n;i++)cin>>b[i];
	sort(b+1,b+n+1);
	ll l=1,r=n;
	while(k>0)
	{
		if(k<2)
		{
			if(b[r]<0)__();//答案为负数的时候需要重新算
			else ans=ans*b[r];
			r--,k--;
		}
		else if(b[l]*b[l+1]>=b[r]*b[r-1])//双指针两边取数
		{
			ans=ans*(b[l]*b[l+1]%mod)%mod;
			l+=2;
			k-=2;
		}
		else 
		{
			ans=ans*(b[r]%mod)%mod*(b[r-1]%mod)%mod;
			r-=2;
			k-=2;
		}
	}
	cout<<ans;
}

到了这里,关于洛谷P8669 乘积最大的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode 152. 乘积最大子数组

    题目链接:leetcode 152 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 1)示例 1: 输入: nums = [2,3,-2,4] 输出: 6 解释: 子数

    2024年02月03日
    浏览(33)
  • LeetCode-152. 乘积最大子数组

    题目来源 152. 乘积最大子数组 这题跟LeetCode-53. 最大子数组和很像 最后把整个 dp 数组看一遍求最大值即可。因此状态转移方程可能是: 说明:牢记状态的定义,一定以下标 i 结尾,即:乘积数组中 nums[i] 必须被选取。 如果 dp[i - 1] 是负数,乘上 nums[i] 还是负数。 如果 nums[

    2023年04月13日
    浏览(80)
  • 动态规划之连续乘积最大子数组 & 连续和最大子数组

    给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2: 输入:nums = [1] 输出:

    2024年02月10日
    浏览(47)
  • 最大单词长度乘积(w位运算)

    318. 最大单词长度乘积 - 力扣(LeetCode) 技巧为int为32位,小写单词字母只由26位(大小写的话就是int_64t),将每一个字母确定一个独立的bit位,通过 计算来判断是否重复即可

    2024年02月05日
    浏览(54)
  • Leetcode 628. 三个数的最大乘积

    原题链接:Leetcode 628. Maximum Product of Three Numbers Given an integer array nums , find three numbers whose product is maximum and return the maximum product. Example 1: Example 2: Example 3: Constraints: 3 = nums.length = 10 4 -1000 = nums[i] = 1000 给一个数组,要求返回数组任意三个数的乘积中最大的那个 思路: 首先要明确

    2024年01月21日
    浏览(76)
  • dp算法 力扣152乘积最大子数组

    本文是Java代码!! 152. 乘积最大子数组 - 力扣(LeetCode) 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 示例 1: 输入

    2024年02月13日
    浏览(41)
  • 【算法|动态规划No.12】leetcode152. 乘积最大子数组

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月08日
    浏览(45)
  • 【图论经典题目讲解】洛谷 P5304 旅行者

    D e s c r i p t i o n mathrm{Description} Description 给定一个 n n n 个点, m m m 条边的有向图,求解 k k k 个点两两间最短路长度的最小值。 S o l u t i o n mathrm{Solution} Solution 对于 k k k 个点,可以考虑二进制分组优化,即对于每一位为 1 1 1 的点放入 1 1 1 组(设为 A A A 组),为 0 0 0 的点

    2024年02月19日
    浏览(43)
  • 【图论经典题目讲解】洛谷 P2371 墨墨的等式

    D e s c r i p t i o n mathrm{Description} Description 求解有多少个 b ∈ [ l , r ] bin [l,r] b ∈ [ l , r ] 满足 ∑ i = 1 n a i x i = b sumlimits_{i=1}^n a_ix_i=b i = 1 ∑ n ​ a i ​ x i ​ = b 存在非负整数解( x i x_i x i ​ 为变量, a a a 数组给定)。 S o l u t i o n mathrm{Solution} Solution b b b 一定可以表示为

    2024年02月20日
    浏览(36)
  • 【动态规划】NK刷题之DP7 连续子数组的最大乘积

    ❤️博客主页: 小镇敲码人 🍏 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌞在一切变好之前,我们总要经历一些不开心的日子,这段日子也许很长,也许只是一觉醒来。有时候,选择快乐,更需要勇气。 🍉 如果你也迷失在了路上,对人生充满了迷惘,不要害怕,冷静下来,

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包