Problem - D - Codeforces

Example
input
5
4
1 2 -1 2
3
1 1 -2
5
2 0 -2 2 -1
3
-2 -1 -1
3
-1 -2 -2
output
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的更多相关文章

  1. [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. ...

  2. 最大乘积(Maximum Product,UVA 11059)

    Problem D - Maximum Product Time Limit: 1 second Given a sequence of integers S = {S1, S2, ..., Sn}, ...

  3. 【Leetcode_easy】628. Maximum Product of Three Numbers

    problem 628. Maximum Product of Three Numbers 题意:三个数乘积的最大值: solution1: 如果全是负数,三个负数相乘还是负数,为了让负数最大,那么其 ...

  4. 暴力求解——最大乘积 Maximum Product,UVa 11059

    最大乘积 Maximum Product 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B 解题思路 ...

  5. UVa 11059 - Maximum Product 最大乘积【暴力】

    题目链接:https://vjudge.net/contest/210334#problem/B 题目大意:Given a sequence of integers S = {S1, S2, . . ...

  6. UVA11059 - Maximum Product

    1.题目名称 Maximum Product 2.题目地址 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...

  7. leetcode 318. Maximum Product of Word Lengths

    传送门 318. Maximum Product of Word Lengths My Submissions QuestionEditorial Solution Total Accepted: 1 ...

  8. uva 11059 maximum product(水题)——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB1QAAAMcCAIAAABo0QCJAAAgAElEQVR4nOydW7msuhKF2wIasIAHJK

  9. [LeetCode] Maximum Product Subarray 求最大子数组乘积

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

随机推荐

  1. ZYNQ 启动问题 :FSBL

    0.ZYNQ外部启动条件 1. 电源要求: 在阶段0 BootROM时,安全模式下PS与PL都是必须上电的:非安全模式PS需要上电,如图: 在阶段1 FSBL时,PS与PL都是必须上电的,因为PL将在 ...

  2. struts-032利用工具 PythonGUI

    # -*- coding: utf-8 -*- import requests from Tkinter import * class App: def __init__(self, master): ...

  3. VMware Workstation网络修改vlan id值

    我们捣鼓虚拟机时,有时候网卡是需要承载多个vlan的,比如说部署fuel时网卡3需要承载私有,管理,存储网络的流量. 在virtualbox中我们可以直接在混杂模式项选择全部允许,但是在VMware ...

  4. CentOS7防火墙开启与关闭以及开放6379,3306,80等端口

    CentOS7用firewall防火墙替代了原来的iptables,所以我们应该使用firewall的一些命令.如下:1.关闭防火墙 systemctl stop firewalld.service ...

  5. 什么是bean装配?

    装配,或bean 装配是指在Spring 容器中把bean组装到一起,前提是容器需要知道bean的依赖关系,如何通过依赖注入来把它们装配到一起.

  6. 学习heartbeat-02安装及配置

    2.部署Heartbeat高可用需求 2.1 操作系统 CentOS-6.8-x86_64 2.2 Heartbeat服务主机资源准备 主服务器A: 主机名:heartbeat-1-130 eth0网 ...

  7. CEPH-3:cephfs功能详解

    ceph集群cephfs使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍文件系统cephfs功能如何灵活的使用,集群背景: [cephadmin@yq01-aip- ...

  8. #define的3种用法详解

    1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为"宏".被定义为"宏"的标识符称为"宏名".在编译 ...

  9. 【动态系统的建模与分析】8_频率响应_详细数学推导 G(jw)_滤波器

  10. 220v-5v稳压电路

    5V整流电路原理 先对电路进行整流 整流电路:利用单向导电器件将交流电转换成脉动直流电路,再用电容进行滤波 滤波电路:利用储能元件(电感或电容)把脉动直流电转换成比较平坦的直流电,然后对电路进行稳压 ...