CF1660D Maximum Product Strikes Back 题解
CF1660D Maximum Product Strikes Back 题解
- 题目描述
- 输入格式
- 输出格式
- 样例 #1
- 样例输入 #1
- 样例输出 #1
- 思路点拨(分类题)
- 缩小研究对象范围
- 除0的分析
- 加上0的分析
- 代码实现
- 小方法陈述
题目描述
你有一个长度为 n n n 的数组,每一个元素都在 − 2 -2 −2 到 2 2 2 的整数之间,当从数组首删去 x x x 个元素,从数组末删去 y y y 个元素时,数组剩下的乘积最大,输出 x x x 和 y y y 。
特别地,当存在多种情况时,输出任意一种即可; 当数组为空时,这个数组的乘积被认为是 1 1 1 。
输入格式
第一行包含一个正整数 t t t ( 1 ≤ t ≤ 1 0 4 1 \le t \le 10^4 1≤t≤104) —小测试点的总数
对于每个小测试点
第一行包含一个正整数 n n n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 1 \le n \le 2 \cdot 10^5 1≤n≤2⋅105 ) — a a a数组的总长度 .
下一行包含 n n n 个正整数 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an ( − 2 ≤ ∣ a i ∣ ≤ 2 -2 \leq |a_i| \le 2 −2≤∣ai∣≤2 ) — a a a数组的每个元素 .
保证 ∑ n ≤ 2 ⋅ 1 0 5 \sum n \leq 2 \cdot 10^5 ∑n≤2⋅105 .
输出格式
对于每个测试点输出共一行,包含2个非负整数 x x x 和 y y y ( 0 ≤ x + y ≤ n 0 \le x + y \le n 0≤x+y≤n ) — 使数组乘积最大的操作
样例 #1
样例输入 #1
5
4
1 2 -1 2
3
1 1 -2
5
2 0 -2 2 -1
3
-2 -1 -1
3
-1 -2 -2
样例输出 #1
0 2
3 0
2 0
0 1
1 0
思路点拨(分类题)
缩小研究对象范围
题目中限定了 − 2 ≤ a i ≤ 2 且为整数 -2\leq a_i\leq 2且为整数 −2≤ai≤2且为整数限定了 a i a_i ai的值只能为 − 2 , − 1 , 0 , 1 , 2 -2,-1,0,1,2 −2,−1,0,1,2
除0的分析
假设没有 0 0 0的存在,应该怎么做?
非常容易发现删 1 1 1并不会对数组绝对值符号有任何优劣影响,删 − 1 -1 −1只会控制数组乘积的符号, 2 、 − 2 2、-2 2、−2才是对于数组绝对值起绝对性影响。
因此得出除0之外的分析结论:
- 若数组乘积为正,不用删任何数
- 若数组乘积为负,则在数组收尾 2 2 2边中选 ∣ a i ∣ = 2 较少的一边删除其所在前缀或后缀 |a_i|=2较少的一边删除其所在前缀或后缀 ∣ai∣=2较少的一边删除其所在前缀或后缀
加上0的分析
∵ \because ∵题目说明,若数组为空,默认乘积为 1 1 1,所以 0 0 0是坚决不能存在于数组之中,必须全部删除。
∴ \therefore ∴本题相当于拿 0 0 0做挡板,把原数组分为很多细分的除0的区间,只需要对这部分取 ∣ a i ∣ = 2 |a_i|=2 ∣ai∣=2较多的区间作为留下的数组即可
代码实现
#include<bits/stdc++.h>
using namespace std;const int maxn=2e5+10;
int t,n,cnt0,tot,ansl,ansr;
int a[maxn];
struct node{int u,v,dis;
}f[maxn];
//除0的情况
inline int solve(int l,int r){int num1=0,num2=0,mi2=maxn,mx2=0;for(int i=l;i<=r;i++){if(a[i]>0)++num1;else {++num2;mi2=min(mi2,i);mx2=i;}}if(num2%2==0){ansl=l-1;ansr=n-r;}else{int w1=0,w2=0;bool flag=false;for(int i=l;i<=mi2;i++){if(abs(a[i])==2)++w1;} for(int i=mx2;i<=r;i++){if(abs(a[i])==2)++w2;}if(w1>=w2){ansl=l-1;ansr=n-mx2+1;}else {ansl=mi2;ansr=n-r;}}int all=0;for(int i=ansl+1;i<=n-ansr;i++){if(abs(a[i])==2)++all;}return all;
}
inline bool cmp(node nx,node ny){return nx.dis>ny.dis;}
int main(){scanf("%d",&t); while(t--){cnt0=tot=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i]==0)++cnt0;}if(cnt0==n){printf("%d 0\n",n);continue;}if(n==1){if(1>=a[1])printf("1 0\n");else printf("0 0\n");continue;}//有0的预处理分段+排序if(cnt0>0){int k=1,k1=n;while(a[k]==0)++k;while(a[k1]==0)--k1;int x=k,y=k;if(k==k1){f[++tot].u=x;f[tot].v=y;f[tot].dis=solve(f[tot].u,f[tot].v);f[tot].u=ansl;f[tot].v=ansr;}for(int i=k+1;i<=k1;i++){if(a[i-1]==0&&a[i]!=0)x=y=i;if(a[i]!=0&&a[i-1]!=0)++y;if(a[i]==0||i==k1){f[++tot].u=x;f[tot].v=y;f[tot].dis=solve(f[tot].u,f[tot].v);f[tot].u=ansl;f[tot].v=ansr;} }sort(f+1,f+tot+1,cmp);printf("%d %d\n",f[1].u,f[1].v);}else {int o=solve(1,n);printf("%d %d\n",ansl,ansr);}}return 0;
}
小方法陈述
- 应用背景:当CF的题目单测试点内的小测试点过多且单一,当某小测试点出现错误但因为省略隐藏,而不知道错误
实践:可以去骗测试点,发现问题,不断进行历史修补论的内容,直到最后 A C AC AC
相关文章:
CF1660D Maximum Product Strikes Back 题解
CF1660D Maximum Product Strikes Back 题解 题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路点拨(分类题)缩小研究对象范围除0的分析加上0的分析 代码实现小方法陈述 题目描述 你有一个长度为 n n n 的数组,每一个元素都在 …...
基于CSSOM的暗链检测技术实现方案
什么是暗链 大部分的开源代码在实现暗链检测的时候都是直接判断页面里面有没有敏感词,如果有,就认为该链接为暗链。这种做法其实是有误的。 违规链接应该分为:外链、内链、死链和暗链。而暗链除了违规,还应该具备“暗”这个看不见的特征。 暗链的特征 其实“暗链”就是看…...
MySQL db、tables_priv、columns_priv和procs_priv权限表
在 MySQL 数据库中,权限表除了 user 表外,还有 db 表、tables_priv 表、columns_priv 表和 procs_priv 表。在《MySQL user权限表详解》中我们讲解了 MySQL 的 user 表,下面主要介绍其它几种权限表。 db表 db 表比较常用,是 MyS…...

JavaWeb-JSP的学习
JSP 今日目标: 理解 JSP 及 JSP 原理能在 JSP中使用 EL表达式 和 JSTL标签理解 MVC模式 和 三层架构能完成品牌数据的增删改查功能 1、JSP 概述 JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术…...

力扣sql中等篇练习(二十三)
力扣sql中等篇练习(二十三) 1 统计实验的数量 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 有可能数据本身就不全,就需要自行创建临时表 WITH T as (SELECT Android p1,Reading e1UNIONSELECT Android p1,Sports e1UNIONSELECT Android p1,Prog…...
C语言算法之查找
一.查找相关概念 这一部分解释数据结构里面查找的相关基础概念: 查找:在数据集合中寻找满足某种条件的数据元素的过程。查找表:用于查找的数据集合关键字:数据元素中唯一标识该元素的某个数据项的值静态查找表:静态查…...

肝一肝设计模式【九】-- 享元模式
系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 肝一肝设计模式【五】-- 适配器模式 传送门 肝一肝设计模式【六】-- 装饰器模式 传送门 肝…...
自动化测试的十大雷区【刚入门必看】
虽然从自己的错误中学习也不错,但从别人的错误中学习总是更好的。 作为一个自动化测试人员,分享常见的容易犯的10个错误,可以从中吸取教训,引以为鉴。 一、必要时才自动化 新人小王接到为Web应用程序自动化测试脚本的任务时&…...
【Android源码篇】用grep搜索源码内容关键词
前言 选项: • -w:只匹配整个单词,不会部分匹配 • -r:递归搜索 • -n:显示行号 • -i:忽略字符大小写 • -I(大写i):忽略二进制文件 • -I:忽略文件内容&am…...

腾讯云轻量应用服务器卡死怎么连接?
腾讯云轻量云服务器卡死怎么解决?使用腾讯云自带的VNC登录连接轻量服务器,或使用腾讯云OrcaTerm一键免密登录轻量实例。如果是确定数据没问题,也可以使用控制台自带的重启实例。 腾讯云轻量应用服务器参考:https://curl.qcloud.co…...

Charles安装及抓取APP接口
一、Charles使用 Charles是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,能够在Windows,Mac,…...

Linux开发工具:yum和vim的使用
目录 一. Linux下的软件 1.1 软件安装的三种方法 1.2 采用yum安装软件 1.3 yum源的问题 二. vim开发工具的使用 2.1 vim的三种基本模式 2.2 命令模式下vim的常用指令 2.2.1 定位相关指令 2.2.2 光标移动相关指令 2.2.3 插入相关指令 2.2.4 复制粘贴相关指令 2.2.5 替…...

Java基础重温巩固
方法 方法与方法之间是平级关系,不能嵌套return表示结束当前方法 基本数据类型和引用数据类型 基本数据类型:数据存储在自己的空间中 引用数据类型:数据存储在其他空间中,自己空间存储的是地址值 值传递 传递基本数据类型时&…...
Text2SQL 语义解析数据集、解决方案和学术论文资源整合
目录 什么是Text2SQL? Text2SQL语义解析数据集 Text2SQL解决方案 Text2SQL相关学术论文 欢迎大家,我是你们的博主,今天我们来讨论一个非常有趣且有挑战性的话题 —— Text2SQL。这个话题涉及到自然语言处理 (NLP),数据库查询语言 (SQL)&…...

redis集群+哨兵配置实操宝典
本地安装redis 配置集群和哨兵 1、下载安装redis #wget http://download.redis.io/releases/redis-5.0.12.tar.gz #下载安装包 #yum -y install gcc #安装依赖包 #tar -zxvf redis-5.0.12.tar.gz #cd redis-5.0.12 #make 2、主备配置 我们采用一主两备的结构 主机 192.168.3.…...
nginx的语法
概览 Nginx是一个高效、稳定的开源Web服务器和反向代理服务器,也可以用作邮件代理服务器、负载均衡器和HTTP缓存。以下是Nginx配置文件的一些基本语法和组成部分: 配置块(Block Directives):Nginx配置文件由许多嵌套的…...
华为OD机试之英文输入法(Java源码)
英文输入法 题目描述 主管期望你来实现英文输入法单词联想功能。 需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列, 如果联想不到,请输出用户输入的单词…...
一个团队管理者应该干什么?
文章目录 一、前言二、搞好团队气氛三、上下都要处理好四、做好计划并监督执行,控制风险。五、小结 一、前言 话说管理这个东西是猪有猪的想法,狗有狗的想法。所以不会有一个定论,总是有人定义这个管理方式,那个管理方式。看的管…...
服务器数据库文件加载到 MySQL
要将数据库文件加载到 MySQL 中,您可以使用以下步骤: 1. 确保 MySQL 服务器正在运行。您可以使用以下命令检查 MySQL 服务器的状态: sudo systemctl status mariadb 如果 MySQL 服务器没有运行,请使用以下命令启动它&…...

6-《网络面试》
6-《网络面试》 1.http是什么?http的工作机制?http报文?1.1 http工作机制:1.2 URL和http报文 2. HTTP请求方法和状态码3.Get和Post的区别4.HTTP的Header解析1.text/html2.x-www-form-urlencoded3.multipart/form-data4.applicatio…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...