CF problem: (D) Maximum Product Strikes Back
5
4
1 2 -1 2
3
1 1 -2
5
2 0 -2 2 -1
3
-2 -1 -1
3
-1 -2 -2
0 2
3 0
2 0
0 1
1 0
最近赛中敲不出代码, 赛后倒是镇静了, 我也醉了
简述下思路及变量意义:
这里采取从前到尾遍历,由于数据范围不能完全连乘2e5个的2, 所以我们采取计数方法,
num表示绝对值为2的个数, sign表示当前是正负数, min是从上一个0到现在连乘绝对值最小的负数
带有res的4个变量是截止到1~i的最优方案: res是乘积最大的2的个数, resl是连乘的左边界, resr是连乘的右边界, res0是前面最近所在0的下标+1
解释不清了, 看代码吧
#include <bits/stdc++.h> using namespace std;
typedef long long LL;
const int N = 2e5+10; LL a[N];
int main()
{
int t;
scanf("%d", &t);
while(t --)
{
int n;
scanf("%d", &n); LL sign = 1, num = 0;
LL res = 0, minn = -99, resmin = 1, res0 = 1;
LL resl=n+1, resr = n;
for(int i = 1; i <= n; i ++)
{
scanf("%lld", &a[i]); //以下四行相当于*a[i], sign表示正负, num表示绝对值=2的个数
if(a[i] == -2) num ++, sign = -1*sign;
else if(a[i]==2) num++;
else if(a[i]==-1) sign = -1*sign;
else if(a[i]==0) num=0;
//从头到尾相乘: (数字为0, 下标为res0 - 1) ~ i
if(sign>0 && num*sign > res)
{
res = num*sign; //res 正负表示正负, 大小表示多少个2相乘
resl = res0; //resl:结果左边界
resr = i;//resr:结果右边界
}
//中间一段相乘
if(sign<0 && minn!=-99 && minn-num*sign > res)
{
res = minn-num*sign;
resl = resmin;
resr = i;
}
//以下是后面特例的初始化
if(a[i]==0)
{
res0 = i+1;//前面最近所在0的下标+1
sign=1;
minn = -99;//绝对值最小的负数的大小
resmin = i+1;//绝对值最小的负数的下标后一位
}
if(sign<0 && num*sign > minn)
minn = num*sign, resmin = i+1;
}
cout << resl-1 << ' '<< n-resr<<'\n';
}
return 0;
}
CF problem: (D) Maximum Product Strikes Back的更多相关文章
- [LeetCode&Python] Problem 628. Maximum Product of Three Numbers
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- 最大乘积(Maximum Product,UVA 11059)
Problem D - Maximum Product Time Limit: 1 second Given a sequence of integers S = {S1, S2, ..., Sn}, ...
- 【Leetcode_easy】628. Maximum Product of Three Numbers
problem 628. Maximum Product of Three Numbers 题意:三个数乘积的最大值: solution1: 如果全是负数,三个负数相乘还是负数,为了让负数最大,那么其 ...
- 暴力求解——最大乘积 Maximum Product,UVa 11059
最大乘积 Maximum Product 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B 解题思路 ...
- UVa 11059 - Maximum Product 最大乘积【暴力】
题目链接:https://vjudge.net/contest/210334#problem/B 题目大意:Given a sequence of integers S = {S1, S2, . . ...
- UVA11059 - Maximum Product
1.题目名称 Maximum Product 2.题目地址 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...
- leetcode 318. Maximum Product of Word Lengths
传送门 318. Maximum Product of Word Lengths My Submissions QuestionEditorial Solution Total Accepted: 1 ...
- uva 11059 maximum product(水题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB1QAAAMcCAIAAABo0QCJAAAgAElEQVR4nOydW7msuhKF2wIasIAHJK
- [LeetCode] Maximum Product Subarray 求最大子数组乘积
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
随机推荐
- jsp安全问题及其解决建议
jsp编程语言自从推出之日起,由于它的快速.平台无关.可扩展.面向对象等特性得到了越来越广泛的应用,越来越多的厂家开发出了各种各样的支持平台如IBM 公司的WebSphere.BEA公司的WebLog ...
- python 自定义加密与解密
import tkinter import webbrowser import re #本程序是一个中文字符和中文检测工具 #中文字符自己添加,我只添加了一点 #输入字符串,点击检查文本即可判断有没有 ...
- 什么是 Git
概述 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. ...
- 你了解过Servlet3.0吗?
Servlet3.0相对于Servlet2.0来说最大的改变是引入了Annotation标注来取代xml配置,用于简化web应用的开发和部署.最主要几项特性: 1. 新增的注解支持:该版本新增了若干注 ...
- 实现一个函数功能:sum(1,2,3,4..n)转化为 sum(1)(2)(3)(4)…(n)?
// 使用柯里化 + 递归function curry ( fn ) { var c = (...arg) => (fn.length === arg.length) ? ...
- 租户的概念和MybatisPlus实现
租户的概念:https://baijiahao.baidu.com/s?id=1625945681925384464&wfr=spider&for=pc MybatisPlus框架的租 ...
- 什么是 Redis?
Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis 支持数据的持久化,可以 ...
- ubuntu中有关环境变量的问题
ubuntu查看环境变量方法 在Ubuntu中,我们可以使用三个命令来查看当前环境变量的设置,以确定我们有没有把路径加载到环境变量中去.我们 可以使用env,export,或者echo $path, ...
- python中类变量和实例变量的区别
类变量:可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的).实例变量:实例化之后,每个实例单独拥有的变量. class student(): age = 0 name = 'stu ...
- Numpy怎样将数组读写到文件
Numpy怎样将数组读写到文件 本文档介绍的是Numpy以自己内建二进制的方式,将数组写出到文件,以及从文件加载数组: 如果是文本.表格类数据,一般使用pandas这个类库做加载和处理,不用numpy ...