牛客-NC249946-小d和孤独的区间

牛客-小d和孤独的区间
题目
题目如上

1 s 1s 1s的时间限制,说明我们应该找到一种“巧法”
根据提示,我们只需要找到“中间全部都是 0 0 0,只有一个1的区间”即可
但是在找的途中,我们不仅要顾及当前 1 1 1之前的 0 0 0的个数,我们还要注意顾及 1 1 1之后的

代码:

#include<iostream>
using namespace std;int n;int main() {cin >> n;long long res = 0;//必须要开long long//index存最新的1的下标,cnt存0的个数加上当前1本身long long index = 0; long long cnt = 0;for (int i = 1; i <= n; i++) {	//变读入边运算int a;cin >> a;if (a) {					//如果读到了1cnt = i - index;		//更新一下这个1和前面的1之间的0的个数index = i;				//记录下这个1的位置}res += cnt;					//每次循环都让答案加上cnt}cout << res;return 0;
}

或许你会一头雾水,为什么每次都要加上 c n t cnt cnt ?而不是当 a a a等于 1 1 1的时候或者是 a a a等于 0 0 0的时候之类的。

我们以一组输入为例:为了顾及理解的方便,此数是比较特殊的情况。

5
0 0 1 0 0

我们拿出笔对其进行模拟。

首先,我们输入了前两个 0 0 0,这时候变量都没有任何改变。

当我们输入第三个 1 1 1的时候, c n t cnt cnt变为了 3 3 3,之后 i n d e x index index变为了 3 3 3。这时候答案加上了 3 3 3
**这时候的三包含了什么含义?**首先,在一个只有一个1的区间之中,每个0都与1产生了一个区间,在此例子中便是:0 0 1 ( [ 1 , 3 ] ), ([ 1 , 3 ]), [1,3]),0 1 ( [ 2 , 3 ] ), ([ 2 , 3 ]), [2,3]),在之后,每个1都可以自己组成一个区间,那么就正好是 3 3 3个区间。

之后我们又输入了两个 0 0 0,然后我们的答案加了两次 3 3 3为什么?

我们从第四个 0 0 0开始看,当我们增加这一个 0 0 0之后,前面的 0 0 0与这个 0 0 0可以联动起来,能够再次组成三个区间,即:
0 0 1 0 ( [ 1 , 4 ] ), ([ 1 , 4 ]), [1,4]),0 1 0 ( [ 2 , 4 ] ), ([ 2 , 4 ]), [2,4]),1 0 ( [ 3 , 4 ] ), ([ 3 , 4 ]), [3,4]),故我们可以得到一个结论,在这之后,每增加 1 1 1 0 0 0,都会增加 i n d e x index index指向的1的前面 0 0 0 1 1 1能够组成的区间数。

由此我们就可以得到代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python使用两个栈实现队列

这里主要是使用两个栈来实现一个队列,并实现队列的入队和出队函数。 对于一个单词hello,如果正常情况下按照队列中先进先出的特点,会按照hello的顺序入队,同样也会按照hello的顺序出队。 添加图片注释,不超过 140 字(可选) 因此如果想要利用两个栈来形成队列,就要将后…

【JAVA】守护线程是什么?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 我的其他博客 正文 在计算机编程中&#xff0c;守护线程&#xff08;daemon thread&#xff09;是一种在程序运行时在后台提供服务的线程…

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自&#xff1a;谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归&#xff1a; 举例&#xff1a;蝉&#xff08;昆虫物种&…

031-安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

031-安全开发-JS应用&WebPack打包器&第三方库JQuery&安装使用&安全检测 #知识点&#xff1a; 1、三方库-JQuery-使用&安全 2、打包器-WebPack-使用&安全 演示案例&#xff1a; ➢打包器-WebPack-使用&安全 ➢第三方库-JQuery-使用&安全 #为什么…

Django学习记录01

1.项目结构 djangoProject02 ├── manage.py 【项目的管理&#xff0c;启动项目、创建app、数据管理】【不要动】【常常用】 └── jangoProject02 ├── __init__.py ├── settings.py 【项目配置】 【常常修改】 ├── urls.py …

【Java程序设计】【C00232】基于Springboot的抗疫物资管理系统(有论文)

基于Springboot的抗疫物资管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的抗疫物资管理系统 用户主要分为管理员和普通用户 管理员&#xff1a; 管理员可以对后台数据进行管理、拥有最高权限、具体权限有…

springboot整合Sa-Token实现登录认证和权限校验(万字长文)

目前在国内的后端开发中&#xff0c;常用的安全框架有spring security、shiro。现在&#xff0c;介绍一款由国人开发的安全框架Sa-Token。这个框架完全由国人开发&#xff0c;所提供的Api文档和一些设置都是比较符合国人的开发习惯的&#xff0c;本次就来介绍一下如何在spring …

项目中将sass更换成less(TypeError: this.getOptions is not a function已解决)

在更换之前&#xff0c;首先了解sass与less在用法上的区别有哪些&#xff08;这里简单提几个&#xff09;&#xff1a; 变量区别&#xff1a;Less中用&#xff0c;Sass用$sass支持条件语句&#xff0c;可以使用if{}else{}、for循环等&#xff0c;而less不支持在定义变量时候&a…

QT研究笔记(一)windows 开发环境安装部署

一、Qt 是什么&#xff1f; Qt 是一个跨平台的应用程序开发框架&#xff0c;最初由挪威的 Trolltech 公司开发&#xff0c;并于2008年被诺基亚收购。后来&#xff0c;Qt 框架由 Digia 公司接手&#xff0c;并在2012年成立了 The Qt Company。Qt 提供了一套丰富的工具和类库&am…

双非本科准备秋招(15.2)—— java线程常见方法

常见方法表格 方法名功能说明注意start()启动一个新线 程&#xff0c;在新的线程 运行 run 方法 中的代码start 方法只是让线程进入就绪&#xff0c;里面代码不一定立刻 运行&#xff08;CPU 的时间片还没分给它&#xff09;。每个线程对象的 start方法只能调用一次&#xff0…

C++ 动态规划 线性DP 最长上升子序列

给定一个长度为 N 的数列&#xff0c;求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数 N 。 第二行包含 N 个整数&#xff0c;表示完整序列。 输出格式 输出一个整数&#xff0c;表示最大长度。 数据范围 1≤N≤1000 &#xff0c; −109≤数列中的数…

基于YOLOv8的船舶目标检测系统(Python源码+Pyqt6界面+数据集)

博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量化&#xff1b;2&#xff09;目标检测、语义分割、OCR、分类等技术孵化&#xff0c;赋能智能制造&#xff0c;工业项目落地经验丰富&#xff1b; …