蓝桥杯23年第十四届省赛真题-填充|DFS,贪心

题目链接:

1.填充 - 蓝桥云课 (lanqiao.cn)

蓝桥杯2023年第十四届省赛真题-填充 - C语言网 (dotcpp.com)

说明: 

dfs就不再多说了,对于每个?都有0和1两个分支,数据范围是:

那么有m个 ?,时间复杂度就是 O(2^{m}),会超时。蓝桥杯官网可以过35%的数据,暴力先拿到一部分再说。

这里需要注意的是:对于?的字符的每层,最后要把它复原,恢复为?

DFS代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
string s;
int mx=0;
int len;//参数含义:当前搜索层数k,搜索到第k个字符(从0开始),cn:前面是否有一个单个的字符可以出现00或11串  
//num当前找到的不重叠的00或11子串 数量 
void dfs(int k,int cn,int num){//剩下所有字符都可以组成合法子串加上当前数量都比已经找到的数量小,不再搜索 if(num+(len-k)/2<mx) return;//k个字符都已经搜索过,递归出口 if(k==len){if(num>mx){mx=num;}return;}if(s[k]!='?'){//同时满足 前面是否有一个单个的字符,两个字符相同才计数 ,单个字符数计为0 if(cn==1&&s[k]==s[k-1]){dfs(k+1,0,num+1);}else{//不满足,不计数,该字符是一个单一的字符 dfs(k+1,1,num);}}else{s[k]='0';if(cn==1&&s[k]==s[k-1])dfs(k+1,0,num+1);elsedfs(k+1,1,num);s[k]='1';if(cn==1&&s[k]==s[k-1])dfs(k+1,0,num+1);elsedfs(k+1,1,num);//退出前 要还原成'?' s[k]='?'; }
} signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>s;len=s.size();int cnt=0;for(int i=0;i<len;i++){if(s[i]!='?'){//i为0时特别处理,防止i-1越界 if(i==0){cnt=1;}else{if(cnt==1&&s[i]==s[i-1]){cnt=0;mx++;}else{cnt=1;	}}}int n=mx;if(s[i]=='?'){//i为0时特别处理,防止i-1越界 if(i==0) {s[i]='0';dfs(i+1,1,n);s[i]='1';dfs(i+1,1,n);}else{dfs(i,cnt,n);}	break;}}cout<<mx;return 0;
}/*
测试数据
01?1001???101?1?0000?0110????0?001?110?0?00?01?1??答案:22 */

贪心:当前能组成一个合法子串的时候我就组合起来,因为如果我放弃这个组合,我最多让后面一个字符和它后面的字符组成一个合法子串,而浪费了我当前这个字符,组合更多的合法子串就是尽量利用每一个可以利用的字符。
再观察可得: 
 '00、11、0?、1?、?1、?0、??'都是正确的,01,10 不行 。可以组成合法子串时,这两个字符已经成对不用再看了,跳过这两个字符,不能成对,看下个字符,因为下个字符可能和他的下个字符成对,我们需要 利用每一个可以利用的字符成对 。

贪心代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;int len;
int mx=0;//最大值 signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);string s;cin>>s;len=s.size();for(int i=0;i<len-1;){//贪心,当前能组成一个合法子串的时候我就组合起来,因为如果我放弃这个组合//我最多让后面一个字符和它后面的字符组成一个合法子串,而浪费了我当前这个字符//组合更多的合法子串就是尽量利用每一个可以利用的字符//再观察可得: //'00、11、0?、1?、?1、?0、??'都是正确的,01,10 不行 //可以组成合法子串时,这两个字符已经成对不用再看了,跳过这两个字符,不能成对,看下个字符,因为下个字符可能和他的下个字符成对//需要 利用每一个可以利用的字符成对 if(s[i]==s[i+1]||s[i]=='?'||s[i+1]=='?') {i+=2;mx++;}else   i++;}cout<<mx;return 0;
}

 参考:蓝桥杯真题讲解:填充(贪心)-CSDN博客

的另一个版本 ,更好想更好梳理思路一些。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;int len;
int mx=0;//最大值 
bool st[N];//标记是否被匹配过 
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);string s;cin>>s;len=s.size();//   for(int i=0;i<len-1;){//贪心,当前能组成一个合法子串的时候我就组合起来,因为如果我放弃这个组合//我最多让后面一个字符和它后面的字符组成一个合法子串,而浪费了我当前这个字符//组合更多的合法子串就是尽量利用每一个可以利用的字符//再观察可得: //'00、11、0?、1?、?1、?0、??'都是正确的,01,10 不行 //可以组成合法子串时,这两个字符已经成对不用再看了,跳过这两个字符,不能成对,看下个字符,因为下个字符可能和他的下个字符成对//需要 利用每一个可以利用的字符成对 //	if(s[i]==s[i+1]||s[i]=='?'||s[i+1]=='?') {
//		i+=2;
//		mx++;
//	}
//   	else   i++;
//   }//另一种角度的贪心,每个字符优先跟前一个字符匹配,不能,再跟后面的字符匹配for(int i=0;i<len;i++){//因为是一个一个挪的 首先要判断 当前 字符是否已经匹配过 if(s[i]!='?'&&!st[i]){if(i-1>=0&&(s[i-1]==s[i])&&!st[i-1]){st[i]=true;st[i-1]=true;mx++;}else if(i+1<len&&(s[i+1]==s[i])){st[i]=true;st[i+1]=true;mx++;}}//?可以匹配 任意落单的字符   else{if(st[i]) continue;if(i-1>=0&&!st[i-1]){s[i]=s[i-1]; st[i]=true;st[i-1]=true;mx++;}else if(i+1<len){s[i]=s[i+1]; st[i]=true;st[i+1]=true;mx++;}}}cout<<mx;return 0;
}/*
测试数据
01?1001???101?1?0000?0110????0?001?110?0?00?01?1??答案:22 */

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

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

相关文章

2015年认证杯SPSSPRO杯数学建模B题(第二阶段)替换式密码全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 B题 替换式密码 原题再现&#xff1a; 历史上有许多密码的编制方法。较为简单的是替换式密码&#xff0c;也就是将文中出现的字符一对一地替换成其它的符号。对拼音文字而言&#xff0c;最简单的形式是单字母替换加密&#xff0c;也就是以每个…

YOLOv9 实现多目标跟踪

YOLOv9项目结合了YOLOv9的快速目标检测能力和DeepSORT的稳定跟踪能力&#xff0c;实现了对视频流中多个对象的实时、准确检测和跟踪。在具体应用中&#xff0c;该项目能够对视频中的行人、车辆或其他物体进行实时定位、识别和持续跟踪&#xff0c;即使在复杂环境、对象互相遮挡…

QT布局管理和空间提升为和空间间隔

QHBoxLayout&#xff1a;按照水平方向从左到右布局&#xff1b; QVBoxLayout&#xff1a;按照竖直方向从上到下布局&#xff1b; QGridLayout&#xff1a;在一个网格中进行布局&#xff0c;类似于HTML的table&#xff1b; 基本布局管理类包括&#xff1a;QBoxLayout、QGridL…

6.RGB转YCbcr

1.方法 RGB转灰度有很多种方式   1.将RGB中任意分量拿出来当做灰度值。   2.取RGB三通道的均值来当灰度值。   3.将RGB转YUV(YCbCr)然后取Y分量作为灰度值。   其余的几种实现方式较为简单&#xff0c;这里不做介绍。重点实现RGB转YCbCr。 1.1 YUV(YCbCr)格式 Y表示亮…

单片机之串口通信

目录 串口介绍 通信的基本概念 并行通信和串行通信 同步通信和异步通信 串行异步通信方式 串行同步通信方式 通信协议 单片机常见通信接口 串行通信三种模式 串口参数 传输速度 ​串口的连接 电平标准 串行口的组成 串口数据缓冲寄存器 串行口控制寄存器 串口…

MTK8781安卓核心板_MT8781(Helio G99)核心板性能参数

MT8781安卓核心板搭载了八核CPU&#xff0c;其中包括两个主频高达2.2GHz的高性能Arm Cortex-A76处理器。这一处理器采用了台积电6纳米级芯片生产工艺&#xff0c;以及先进的3D图形功能的高性能Arm Mali G57级GPU。通过超快LPDDR4X内存和UFS 2.2存储供电&#xff0c;不仅提高了游…

【设计模式】中介者模式的应用

文章目录 1.概述2.中介者模式的适用场景2.1.用户界面事件2.2.分布式架构多模块通信 3.总结 1.概述 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于解决对象间复杂、过度耦合的问题。当多个对象&#xff08;一般是两个以上的对象&…

|行业洞察·汽车|《2024新能源汽车行业及营销趋势报告-20页》

报告的主要内容解读&#xff1a; 新能源汽车行业概述及品牌分布&#xff1a; 近年来&#xff0c;中国新能源汽车销量增速高&#xff0c;市场占有率快速提升&#xff0c;成为汽车行业的重要增量。新能源汽车消费者趋向年轻化、女性化和高端化&#xff0c;对高科技、新体验有较高…

Android Studio控制台输出中文乱码问题

控制台乱码现象 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。 乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。 解决步骤&#xff1a; step1: 找到st…

STM32看似无法唤醒的一种异常现象分析

1. 引言 STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性&#xff0c;被广泛用于各类工业产品中&#xff0c;包括一些需要低功耗需求的应用。 2. 问题描述 用户使用 STM32G0B1 作为汽车多媒体音响控制器的控制芯片&#xff0c;用来作为收音机频道存贮…

【漏洞复现】chatgpt pictureproxy.php SSRF漏洞(CVE-2024-27564)

0x01 漏洞概述 ChatGPT pictureproxy.php接口存在服务器端请求伪造 漏洞&#xff08;SSRF&#xff09; &#xff0c;未授权的攻击者可以通过将构建的 URL 注入 url参数来强制应用程序发出任意请求。 0x02 测绘语句 fofa: icon_hash"-1999760920" 0x03 漏洞复现 G…

云渲染中途停止渲染会保存渲染结果吗?

在数字创作领域&#xff0c;云渲染已经逐渐成为了设计师们常用的渲染工具。然而&#xff0c;很多对云渲染功能不熟的用户来说&#xff0c;一些基础的操作疑问仍然困扰着他们。例如&#xff0c;自己用的云渲染中途停止渲染会不会保存渲染结果&#xff1f; 关于这个问题&#xf…

前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】

前后端分离开发 介绍开发流程Yapi&#xff08;api接口文档编写平台&#xff09;介绍 Swagger使用方式1). 导入knife4j的maven坐标2). 导入knife4j相关配置类3). 设置静态资源映射4). 在LoginCheckFilter中设置不需要处理的请求路径 查看接口文档常用注解注解介绍 当前项目中&am…

洲际酒店集团持续夯实领航之势 以新高度、新策略、新方向助推行业高质量发展

“ 旅、遇&#xff0c;正当时”&#xff0c;洲际酒店集团大中华区酒店巡展圆满落幕 2024年3月28日&#xff0c;中国上海 —— 作为最早进入中国市场的国际酒店管理集团之一&#xff0c;洲际酒店集团坚守“在中国&#xff0c;为中国”的承诺&#xff0c;以行业领跑者之势&#…

22.计算机中的数据存储

文章目录 一、计算机中的数据存储二、十进制1、十进制加法2、十进制减法 三、什么是二进制&#xff1f;二进制的运算过程 四、常见的进制五、计算机为什么要用二进制存储数据&#xff1f;六、进制之间的转换1、任意进制转十进制1&#xff09;二进制101转十进制8421快速转换法 2…

《QT实用小工具·一》电池电量组件

1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件&#xff0c;包含如下功能&#xff1a; 可设置电池电量&#xff0c;动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…

Qlib-Server:量化库数据服务器

Qlib-Server:量化库数据服务器 介绍 Qlib-Server 是 Qlib 的配套服务器系统,它利用 Qlib 进行基本计算,并提供广泛的服务器系统和缓存机制。通过 Qlib-Server,可以以集中的方式管理 Qlib 提供的数据。 框架 Qlib 的客户端/服务器框架基于 WebSocket 构建,这是因为 WebS…

免费翻译pdf格式论文

进入谷歌翻译网址https://translate.google.com/?slauto&tlzh-CN&opdocs 将需要全文翻译的pdf放进去 选择英文到中文&#xff0c;然后点击翻译 可以选择打开译文或者下载译文&#xff0c;下载译文会下载到电脑上&#xff0c;打开译文会在浏览器打开。

Redis命令-List命令

4.6 Redis命令-List命令 Redis中的List类型与Java中的LinkedList类似&#xff0c;可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似&#xff1a; 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff…

element-ui autocomplete 组件源码分享

紧接着 input 组件的源码&#xff0c;分享带输入建议的 autocomplete 组件&#xff0c;在 element-ui 官方文档上&#xff0c;没有这个组件的 api 目录&#xff0c;它的 api 是和 input 组件的 api 在一起的&#xff0c;看完源码之后发现&#xff0c;源码当中 autocomplete 组件…