CodeForces..翻转魔术.[简单].[找规律]

news/2024/11/24 3:05:55/

题目描述:


题目解读:

给定由0,1组成的长度为n的字符串,执行翻转操作,即0变1,1变0;

判断执行一次翻转之后是否为回文。


解题思路:

寻找规律:如果翻转前已经是回文,或者左右对称位置数值不同,那么必然可以通过一次翻转得到回文。

遍历字符串,如果有对称位置数值不同,且不相邻,就输出NO;其余情况输出YES。

遇到数值不同的,先数量+1,然后记录了位置。

最后判断不同的数量是否大于1,然后判断如果位置不相邻,就输出NO。

判断是否相邻这里应该可以简化。

设置flag,初始值为0,第一次遇到不同的,flag变1;

然后向后遍历,如果遇到相同,且flag为1,则flag变2,表示已经有不同且不同之后又出现相同,此时如果后续遇到不同,则必输出NO了;

后续如果遇到不同,且flag=2,则flag变3,表示要输出NO

最后状态下:

flag=0,表示对称位置全相同;

flag=1,表示只有连续对称位置不同;

flag=2,表示只有一个位置不同,其他都相同;

flag=3,表示不连续位置不同。


代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define MAX 50000 //注意题目中要求的变量取值范围
#include <iostream>
using namespace std;void Solve() {int n; string s;int i = 0;int flag = 0;int flag2 = 0;int alength = 0;int a[MAX];scanf("%d", &n);cin >> s;for (i = 0; i < n/2; i++) {if (s[i]!=s[n-i-1]) {flag++;a[alength++]=i;}}if (flag > 1) {for (i = 0; i < alength -1;i++) {if (a[i + 1] - a[i] > 1) {flag2 = 1;break;}}}if (flag2 == 1) printf("NO\n");else printf("YES\n");return;
}int main() {int t;scanf("%d", &t);while (t--) Solve();return 0;
}

 优化:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <iostream>
using namespace std;void Solve() {int n;string s;int i = 0;int flag = 0;scanf("%d", &n);cin >> s;for (i = 0; i < n / 2; i++) {if (s[i] != s[n - i - 1]) {if (flag == 0) flag = 1;else if (flag == 2) flag = 3;}else {if (flag == 1) flag = 2;}}if (flag == 3) printf("NO\n");else printf("YES\n");return;
}int main() {int t;scanf("%d", &t);while (t--) Solve();return 0;
}

遇到的错误:越写越复杂了,需要新思路来简化代码。


http://www.ppmy.cn/news/106733.html

相关文章

camunda流程引擎利于缓存提升性能

工作流引擎Camunda 使用缓存来提高流程引擎的性能。在 Camunda 中&#xff0c;有两种类型的缓存&#xff1a;一级缓存&#xff08;First Level Cache&#xff09;和二级缓存&#xff08;Second Level Cache&#xff09;。 一级缓存是 Camunda 引擎内置的缓存&#xff0c;用于缓…

树莓派 MCP3021 读取电池电量

树莓派 接MCP3021 模数转换器 读取电池电量 #define MCP3021_I2C_ADDR 0x4dQtConcurrent::run([&](){char *filename "/dev/i2c-10";if((fileopen(filename,O_RDWR))<0){LOGE("Failed to open I2C bus device");return;}if(ioctl(file,I2C_SLAVE,…

专业的 Code 128 条码标签如何创建?

Aspose.Words是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose API支持流行文件格式处理&#xff0c;并…

Golang Gin 的路由的详解

学习目标: 什么是路由 Gin 支持多种路由模式 了解.Any()路由 分解路由中复杂的逻辑,变成单独的控制器 获取参数的方法 学习内容: 1. 什么是路由呢? 路由是 web 应用程序中的一种机制,它将到达服务器的请求与应该处理该请求的代码关联起来。简单来说,路由就是指定在访问…

易基因:全基因组ChIP-seq分析揭示细菌转录因子PhoB的基因内结合位点|mBio

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 细菌编码许多转录因子&#xff08;transcription factor&#xff0c;TF&#xff09;&#xff0c;这些转录因子通过与启动子周围的DNA结合并调控RNA聚合酶&#xff08;RNAP&#xff09;全…

原来你是这样的5G 一文了解亚马逊云科技的云上5G专网

根据麦肯锡公司发布的《2021年离散制造业上云调查》报告显示&#xff1a;云转型所带来的IT价值仅占其潜在价值的5&#xff05;&#xff0c;但其业务价值高达95&#xff05;。随着云计算技术的快速发展以及云的IT价值在敏捷性、弹性和经济性几个方面的充分呈现加上同5G技术和应用…

为减少来自环境使用的无线传感器网络的传输次数而开发的方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

创建并使用shell脚本

1&#xff0c;查询 bash解释器 所在位置 创建前&#xff0c;我们需要先知道 bash 解释器所在的位置&#xff0c;以方便在头部写声明。一般位置是在 /bin/bash 但是有的是在 /usr/bin/bash &#xff0c;所以需要查找一下。 文件位置查找命令&#xff1a;whereis xxx rootarmb…