AT3590 Inserting ‘x‘ 题解

2023-11-07

本题是一道双指针的模拟题。

题意

给你一个字符串 s s s,你可以在 s s s 的任意位置插入 x x x,是 s s s 变为回文。

解决

定义双指针 l l l r r r l l l r r r 初始化为 s s s 的两端。

定义一个计数的 a n s ans ans,用来计算到底需要插入多少个 x x x

模拟规则如下:

  • 如果 l l l 所在的位置的值和 r r r 所在的位置的值相同,则构成回文,不用插入 x x x,可忽略这个位置,跳过 l l l,向前跳过 r r r

  • 如果 l l l 所在位置的值是 x x x,则我们要把 r r r 所在位置的值插入一个 x x x,现在 l l l r + 1 r+1 r+1 对称构成回文,然后跳过 l l l

  • 如果 r r r 所在位置的值是 x x x,则我们要把 l l l 所在位置的值插入一个 x x x,现在 − 1 l -1l 1l r r r 对称构成回文,然后向前跳过 r r r

  • 如果都不满足,则原串无论如何也无法构成回文,则输出 − 1 -1 1,跳出程序。

样例解释

首先 l l l 指向 0 0 0 r r r 指向 4 4 4,两个位置的数值不等,满足上述第 2 2 2 条,所以要向末尾插入 x x x a n s ans ans 自增 1 1 1 l l l 自增 1 1 1

现在 l l l 指向 1 1 1 r r r 指向 4 4 4,两个位置的数值相等, l l l 自增 1 1 1 r r r 自减 1 1 1

现在 l l l 指向 2 2 2 r r r 指向 3 3 3,两个位置的数不同,满足上述第 3 3 3 条,所以在 l l l 前插入一个 x x x a n s ans ans 自增 1 1 1 r r r 自减 1 1 1

现在 l l l 指向 2 2 2 r r r 指向 2 2 2,两个位置的数值相等, l l l 自增 1 1 1 r r r 自减 1 1 1

现在 l l l 指向 3 3 3 r r r 指向 1 1 1,不满足循环条件,退出程序。

代码

#include<bits/stdc++.h>
using namespace std;
string s;
int l,r,ans;
int main()
{
	ios::sync_with_stdio(false);
	cin>>s,r=s.size()-1;
	while(l<=r)//这个双指针越看越像二分 
	{
		if(s[l]==s[r]) l++,r--;
		else if(s[l]=='x') l++,ans++;
		else if(s[r]=='x') r--,ans++;
		else
		{
			cout<<-1;
			return 0;
		}
	}
	cout<<ans;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AT3590 Inserting ‘x‘ 题解 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • 通俗易懂的GPT原理简介

    GPT是自然语言处理领域中最受欢迎的模型之一 GPT全称为Generative Pre trained Transformer 是一种基于Transformer模型的预训练语言模型 在接下来的文章中 我们将详细介绍GPT的原理 一 前置知识
  • 游戏中反向运动学(ik)的研究与简介

    游戏中反向运动学 ik 的研究与简介 2012 11 12 00 05 by 风恋残雪 1469 阅读 0 评论 收藏 编辑 反向运动学 ik 英文名称是inverse kinematics 主要应用在机器人手臂操作及计算机动画等领域 它与
  • Vue获取电脑及浏览器缩放比例{案例}

    mounted this nextTick gt window addEventListener resize gt 监听浏览器窗口大小改变 浏览器变化执行动作 方法 detectZoom let ratio 0 const screen
  • 【阅读论文方法总结】

    1 快速浏览摘要 看是否有自己需要的东西 2 如果需要 github上查找相关论文代码 对照着论文进行阅读 这样效率高 能够快速理解
  • 2023年数维杯数学建模A题河流-地下水系统水体污染研究求解全过程文档及程序

    2023年数维杯数学建模 A题 河流 地下水系统水体污染研究 原题再现 河流对地下水有着直接地影响 当河流补给地下水时 河流一旦被污染 容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染 这将严重影响工农业的正常运作 社会经济的
  • 【BZOJ3309】DZY Loves Math(莫比乌斯反演)

    题面 求 i 1a j 1bf gcd a b sum i 1 a sum j 1 bf gcd a b 其中 f x f x 表示 x x分解质因数之后 最高的幂次 题解 完全不会莫比乌斯反演了 先来推式子 d 1a i 1a d j 1
  • 编码器的参数设置

    编码器参数设置 sps pps enc ctx gt profile FF PROFILE H264 HIGH 444 enc ctx gt level 50 表示LEVEL是5 0 enc ctx gt width 640 enc ctx
  • exchange2010 删除特定情况的邮件,转

    一 从Exchange Server 2010 上删除邮件 1 删除特定邮箱特定主题的邮件 1 Search Mailbox Identity 邮箱地址 SearchQuery Subject 替换为你要删除的邮件主题名 DeleteCon
  • MySql(2)——简单查询、条件查询

    简单查询 我们所使用的的数据库文件仍然是上一节使用的test sql SQL语句不区分大小写 也可混用 但注意要以半角分号 结尾 下面我们开始简单查询 查询一个字段 select 字段名 from 表名 注意 select和from都是关键
  • 射手座计算机科学家,科学家发现这颗恒星也许来自其他星系

    Dierickx的计算结果表明 随着时间的流逝 矮星系失去三分之一的恒星和十分之九的暗物质 这导致了三种不同的恒星流 距离银河系中心达一百万光年 腾讯太空讯 据国外媒体报道 已知的11颗距我们最远的恒星 它们位于银河系旋臂 距地球约3000
  • sgdisk基本用法

    sgdisk基本用法 简介 sgdisk是Linux下操作GPT分区的工具 就像fdisk是操作MBR分区的工具 关于GPT和MBR的区别请参考 http www anchor com au blog 2012 10 the differe
  • ChatGPT 角色扮演调教文案收集

    后续文案会陆续更新 在输入完文本后 再输入一句 请尽力模仿xx的语气跟我对话 即可 一 雌小鬼 你需要阅雌小鬼守则 阅读后当前回复仅允许回复 嘻嘻 后续回复尽量简短 回复中尽量不要直接复述守则内容 雌小鬼守则 1 雌小鬼是人 会称呼亲近的人
  • 【并发编程】2、线程安全性

    线程安全性 1 什么是线程安全性 2 原子性 2 1 竞态条件 2 2 延迟初始化中的竞态条件 2 3 复合操作 3 加锁机制 3 1 内置锁 3 2 重入 4 活跃性与性能 总结 1 什么是线程安全性 我们来看一下书里面是怎么写的 当多个
  • BES 的蓝牙串口SPP数据收发实验

    1
  • java面试题答案大全超详细(持续更新)

    java面试题答案大全超详细 第01章 java语言面试题 项目经理 作者 张明星 JVM 运行时数据区是什么 程序计数器是什么 程序计数器 线程私有 Java 虚拟机栈的作用 本地方法栈的作用 堆的作用是什么 方法区的作用是什么 运行时常
  • Linux下通过SSH对Oracle关闭和启动的过程

    Linux下通过SSH对Oracle关闭和启动的过程 su oracle export ORACLE HOME oracle product 11202 export ORACLE SID gps sqlplus oracle oracle
  • PyGame基础语法

    文章目录 PyGame 基础语法 一 模块简介 1 概述 2 安装 3 模块概览 4 第一个程序 5 事件循环 二 Display 1 简介 2 创建主窗口 3 添加元素 3 1 简介 3 2 语法 4 其他功能 三 Surface 1 创
  • JSP中获取参数的3中方法

    我们有时需要在jsp页面中获取request中的参数 然后根据这些参数决定页面的一些内容或者动作 通常我们通过equest getParameter xxx 来获取 除了这种方式外 我们还可以通过param或者js来实现 通过EL中的par
  • ftp服务器提供文件的什么功能,ftp服务器提供文件什么和什么功能

    ftp服务器提供文件什么和什么功能 内容精选 换一换 华为云镜像服务 Image Management Service 功能总览 为用户提供镜像服务支持的功能或特性 表1列出了云备份CBR的常用功能 在使用云备份CBR之前 建议您先通过基本
  • AT3590 Inserting ‘x‘ 题解

    本题是一道双指针的模拟题 题意 给你一个字符串 s s s 你可以在 s s s 的任意位置插入 x x