当前位置: 首页 > news >正文

AT_abc401_d [ABC401D] Logical Filling 题解

题目传送门

解题思路

首先分析题意。

  1. 容易发现类似 ?oo? 的问号其实是“假问号”,因为 o 不能连续出现,所以只能是 .

  2. 其次就是当 k k k 为字符串 s s s 最多能包含 o 的数量时才可能会有 ? 变成 o。否则判完第 1 1 1 条直接输出就行了。

那我们现在就来看看如何统计 s s s 所能包含 o 的最大数量。

这里我们可以把 s s s 拆分成若干个只含 ? 最长连续子串 t i t_i ti

由于我们先处理了第 1 1 1 种情况,所以 t i t_i ti 会类似 .|????|.,其中 | 之间的字符串就是 t i t_i ti。我们手动模拟一下:

定义 ∣ s ∣ |s| s 为字符串 s s s 的长度。

  • ∣ t i ∣ |t_i| ti 为奇数时,类似 o.o.o 时所包含 o 的数量最多。最多可以贡献 ⌈ ∣ t i ∣ 2 ⌉ \lceil \frac{|t_i|}{2} \rceil 2tio,在 C++ 中表示为 len / 2 + 1

  • ∣ t i ∣ |t_i| ti 为偶数时,类似 o.o.o..o.o.o 时所包含 o 的数量都是最多的,最多可以贡献 ∣ t i ∣ 2 \frac{|t_i|}{2} 2tio

最后我们将所有贡献统计起来再加上原有的 o 的数量,如果为 k k k,那么长度为奇数的 t i t_i ti 就可以确定,长度为偶数的 t i t_i ti 就还是全是 ?

至于为什么只有贡献为 k k k 时才能确定,比如 s s so.??.o.??? k = 4 k = 4 k=4,符合条件的字符串有 o.o..o.o..o..o.o.o..o.o..o..o.o.o..o...o……你会发现每个 ? 都有多种可能。

CODE:

/*
15 7
????.?????.????5 3
?????4 2
?..?
*/
/*
15 7
????.?????.????5 3
?????4 2
?..?
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {ios::sync_with_stdio(false);ios_base::sync_with_stdio(false);cin.tie(0), cout.tie(0);int n, k, cnt = 0;cin >> n >> k;string a;cin >> a;cnt = (a[0] == 'o' ? 1 : 0);for (int i = 1; i < n; i++) {if (a[i] == '?' && (a[i - 1] == 'o' || i < n - 1 && a[i + 1] == 'o')) {a[i] = '.';}if (a[i] == 'o') {cnt++;}}if (cnt == k) {for (int i = 0; i < n; i++) {if (a[i] == '?') {a[i] = '.';}}cout << a;return 0;}if (a[0] == '?') {if (a[1] == 'o') {a[0] = '.';}}for (int i = 0; i < n; i++) {if (a[i] == '?') {//前后面一定是 .int j = i;while (a[i] == '?' && i < n) {i++;}//o.????.ocnt += (i - j + 1) / 2;  //(区间长度 + 1) / 2,算的只是 ? 最多可以替换成多少个 o,懒得用 ceil//不用 i--,因为 a[i] 一定为 . }}if (cnt == k) {for (int i = 0; i < n; i++) {if (a[i] == '?') {//前后面一定是 .int j = i;while (a[i] == '?' && i < n) {i++;}if ((i - j) & 1) {for (int k = j; k < i; k++) {if ((k - j) % 2 == 0) {a[k] = 'o';} else {a[k] = '.';}}}}}}cout << a;return 0;
}

相关文章:

  • SDC命令详解:使用get_libs命令进行查询
  • 如何使用VCS+XA加密verilog和spice网表
  • JUC入门(三)
  • Unity 本土化插件 I2Localization
  • 需求频繁变更?AI 驱动的自动化解决方案实践
  • 【Fifty Project - D28】
  • chirpstack v4版本 全流程部署[ubuntu+docker]
  • Java Spring Boot 应用集成 Spring Security 使用 Redis 存储用户信息
  • 小白的进阶之路-人工智能从初步到精通pytorch的基本流程详解-1
  • 深入解析Spring Boot与Spring Cloud在微服务架构中的最佳实践
  • nginx日志
  • 人员管理2302版本
  • CVE-2022-22963源码分析与漏洞复现
  • 类autosar的os系统实现
  • 说一下响应状态码有哪些?
  • 语言幻觉测试用例及相关策略总结
  • SAP学习笔记 - 开发13 - CAP 之 添加数据库支持(Sqlite)
  • plc基础知识整理(三菱)
  • SVN与蓝盾流水线
  • 依赖错误终结者:AI 项目管理中的故障排查指南
  • 中山哪里做网站/企业网站优化推广
  • 政府网站建设作用/品牌推广和营销推广
  • 教做家庭菜的网站/91关键词排名
  • 目前做哪些网站能致富/chrome谷歌浏览器官方下载
  • 平顶山建设局网站/网络营销方案怎么写
  • 做网站的贴吧/谷歌地图下载