P1114 “非常男女”计划最优解

原题地址

P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码题解

AC代码(1)

因为用的是O(N^2)级的算法,所以最后一个subtask_1 TLE了,这里使用特判来得到Accept的,给你们放一下代码:

#include <bits/stdc++.h>
using namespace std;
int n;
int qzh[100005];
bool check(int x){for(int i=1;i<=n-x+1;i++){if(qzh[i+x-1]-qzh[i-1]==0){return true;}}return false;
}
int ans;
int main(){cin>>n;int opt;for(int i=1;i<=n;i++){cin>>opt;if(!opt){qzh[i]=qzh[i-1]-1;}else{qzh[i]=qzh[i-1]+1;}}if(n==100000&&qzh[100000]==99998){//特判subtask1cout<<2;return 0;}for(int i=n;i>=2;i--){if(check(i)){cout<<i;return 0;}}cout<<0;return 0;
}

AC代码(2)

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int n;
int qzh[100005];
pair<int,int> p[200005];
int ans;
int main(){memset(p,-1,sizeof(p));cin>>n;int opt;for(int i=1;i<=n;i++){cin>>opt;if(!opt){qzh[i]=qzh[i-1]-1;}else{qzh[i]=qzh[i-1]+1;}if(p[qzh[i]+N].first==-1){//还未出现过p[qzh[i]+N].first=i;}p[qzh[i]+N].second=i;}for(int i=1;i<=2*N;i++){if(p[i].first!=-1){//有数出现过ans=max(ans,p[i].second-p[i].first);}}for(int i=n;i>=1;i--){if(qzh[i]==0){ans=max(ans,i);break;}}cout<<ans;return 0;
}

这个代码应该是用的截止到目前为止针对这道题最优秀的那种算法了,是线性的复杂度,大概是O(5N) 的复杂度,不包含输入以及其他的大概是 O(3N) 的复杂度,先是求个前缀和,女生是-1,男生是1。假设全是女生,那么前缀和就可能出现负数,最大能到-100000,所以要都加上100000,下标是不能为负数的!

要求qzh[i]-qzh[j-1]=0,就可以转化为qzh[i]=qzh[j-1],所以找出相同值下标最小与最大的情况,然后用一个ans看看最大的下标距离是多少。

还需要从右往左扫描看一下有没有0出现(其实也可以归入上面那重循环),看看最后一个前缀和中的0在哪里,然后就可以直接ans和i比大,其实也就是i-0,因为最早值是0的下标就是0。

最后输出ans就可以了。

提交记录

记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

个人主页

xuzb 的个人中心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

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

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

相关文章

《昇思25天学习打卡营第5天|onereal》

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

c++算法学习,最大区间

给定一个实数序列&#xff0c;设计一个最有效的算法&#xff0c;找到一个总和数最大的区间 #include <iostream> #include <vector> #include <limits>// 结果结构体&#xff0c;用于存储最大子数组的信息 struct Result {int maxSum; // 最大和int start;…

49-5 内网渗透 - 服务注册表权限脆弱提权

一、服务注册表权限脆弱提权介绍 Windows操作系统中的注册表存储了每个系统服务的相关条目。注册表使用访问控制列表(ACL)来管理用户对其条目的访问权限。如果注册表的ACL配置不正确,可能导致低权限用户获得对服务注册表的写入权限。攻击者可以利用这一漏洞修改注册表内容,…

【android 9】【input】【9.发送按键事件3——Inputchannel的创建过程】

系列文章 本人系列文章-CSDN博客 目录 系列文章 目录 1.简介 1.1 主要步骤 1.2 时序图 2.源码分析 2.1 WindowManagerImpl的addView 2.2 WindowManagerGlobal的addView 2.3 ViewRootImpl 2.4 getWindowSession 2.5 WMS中的openSession 2.6 Session 2.7 class W 2.…

java周测总结(3)

1、什么是I0流&#xff1f; 是一串流动的字符,从先进先出的方式要求信息的通道。 2、什么是序列化&#xff1f;什么是反序列化&#xff1f; 序例化是将对象的状态存储到特定的存储介质中的过程反序例化是将特定的有合者公质中数据重新构建对象的过程。 3、Java中线程在哪个包下…

Ingress Controller介绍及部署实践

Ingress Controller介绍及部署实践 1. 概念 1.1 Ingress Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 下面是 Ingress 的一个简单示例&#xff0c;可将所有流量都发送到同一 Service&#xff1a; 通过配置&am…

WSL:桌面 UI + 远程连接 RDP + 配置 VScode

参考文献&#xff1a; 在windows10上利用WSL安装Ubuntu&#xff08;带桌面UI&#xff09;WSL2 Ubuntu图形界面安装与远程桌面Linux的桌面环境比较与选择&#xff08;gnome、kde、xfce、lxde&#xff09;Ubuntu 设置国内源&#xff0c;提高下载速度解决 PPA 源太慢Ubuntu 报错&…

11.常见的Transforms(二)

常见的Transforms&#xff08;二&#xff09; 1.Resize() 的使用 1.1 作用 resize可以把输入的图片按照输入的参数值重新设定大小。 1.2 所需参数 需要输入想要重新设定的图片大小。 输入的参数类型可以为包含长和宽数值的一个序列&#xff08;h,w&#xff09;或者一个整…

vue-cli的搭建过程

一、创建一个vue2的项目 二、创建成功后删除这三个文件 三、新建一个App.vue文件 四、在文件中添加这一段话 五、打开命令框输入指令下载router路由 六、新建一个router目录&#xff0c;新建index.js文件 七、导入你的路由&#xff0c;进行配置 打开命令行工具&#xff0c;进入…

【LeetCode】一、数组相关:双指针算法 + 置换

文章目录 1、算法复杂度1.1 时间复杂度1.2 空间复杂度 2、数组3、leetcode485&#xff1a;最大连续1的个数4、leetcode283&#xff1a;移动05、leetcode27&#xff1a;移除元素 1、算法复杂度 1.1 时间复杂度 算法的执行时间与输入值之间的关系&#xff08;看代码实际总行数的…

hive零基础入门

1、hive简介 hive&#xff1a;由facebook开源用于解决海量结构化数据的统计工具。 hive是基于Hadoop的数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供sql查询功能。 2、hive本质 hive的本质是HQL&#xff08;HiveSQL&#xff09;转化成MapR…

java 统计xmind的结点数(测试用例case数)

mac电脑解压出来的xmind的数据主要在content.json上 开头结尾有[],里面是json import org.json.JSONArray; import org.json.JSONObject; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public class XMindLeafCounter2 {public stat…

PlatformIO开发环境

PlatformIO是一个开源的生态系统&#xff0c;用于构建物联网应用&#xff0c;它支持多种微控制器&#xff08;MCU&#xff09;和硬件开发板&#xff0c;并且与各种IDE集成良好&#xff0c;如VSCode, Atom等&#xff0c;使得跨平台的固件开发变得更加简单和高效。 ### 平台介绍…

博客建站1 - 选择博客系统框架

1. 本网站的系统架构2. 选择博客系统框架 2.1. 静态网站 2.1.1. 简介2.1.2. 特点2.1.3. 适用人群2.1.4. 常见框架 2.2. 动态网站 2.2.1. 简介2.2.2. 特点2.2.3. 适用人群2.2.4. 常见框架 3. 选择建议4. 我的博客系统 1. 本网站的系统架构 网站示例&#xff1a; sunlogging.c…

QEMU-aarch64与UEFI(EDK2)环境搭建

环境搭建是学习UEFI&#xff08;EDK2&#xff09;的重要前提&#xff0c;以下是基于QEMU-aarch64环境搭建UEFI&#xff08;EDK2&#xff09;的学习环境的过程&#xff1a; 安装虚拟机Ubuntu系统&#xff1a;首先需要在本地计算机上安装虚拟机软件&#xff0c;并在虚拟机上安装…

数据库自动备份到gitee上,实现数据自动化备份

本人有个不太好的习惯&#xff0c;每次项目的数据库都是在线上创建&#xff0c;Navicat 连接线上数据库进行处理&#xff0c;最近有一个项目需要二次升级&#xff0c;发现老项目部署的服务器到期了&#xff0c;完蛋&#xff0c;数据库咩了&#xff01;&#xff01;&#xff01;…

一篇文章教会你【elementUI搭建使用】

Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组 件库. 安装 ElementUI npm i element-ui -S 在 main.js 中写入以下内容&#xff1a; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; Vue.use(Eleme…

微信小程序代码体积过大上传失败——分包处理

最近开发一款小程序&#xff0c;内容较多&#xff0c;导致代码体积太大&#xff0c;上传到线上失败 解决方案 分包处理 注意&#xff1a;tabbar的页面不能放到子包 具体操作 这里分两个包&#xff1a; 第一步 在根目录创建packageA、packageB 第二步 把原本的pages目录下的部…

【漏洞复现】金和OA 任意文件上传

【产品介绍】 金和OA协同办公管理系统C6软件&#xff08;简称金和OA&#xff09;&#xff0c;本着简单、适用、高效的原则&#xff0c;贴合企事业单位的实际需求&#xff0c;实行通用化、标准化、智能化、人性化的产品设计&#xff0c;充分体现企事业单位规范管理、提高办公效…

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩?举个例子你就彻底懂了!!

老生常谈问题之什么是缓存穿透、缓存击穿、缓存雪崩&#xff1f;举个例子你就彻底懂了&#xff01;&#xff01; 缓存穿透发生场景解决方案 缓存击穿解决方案 缓存雪崩发生场景解决方案 总结三者区分三者原因三者解决方案 想象一下&#xff0c;你开了一家便利店&#xff0c;店里…