CodeForces..翻转魔术.[简单].[].[]

news/2024/11/14 14:03:59/

题目描述:


题目解读:

给定由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/106169.html

相关文章

牛客网基础语法11~20题

前言&#xff1a;今天是咱们第二期刷牛客网上的题目。 目标&#xff1a;对输入输出的格式&#xff0c;方法&#xff0c;类型掌握熟练&#xff0c;对double&#xff0c;float理解深入&#xff0c;编程思想更进一步。 鸡汤&#xff1a;人活着&#xff0c;再苦再累&#xff0c;都别…

【Java 继承】了解Java类的继承的特点,继承的关系,继承的使用,到底什么是继承?

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; Java | 从入门到入坟 Java 继承 继承的特点 \ 介绍 ❓特点 ♊ 继承的使用方式 &#x1f51e;避免重复方法 子类访问父类的成员变量 &#x1f232;子类访问父类的成员变量&#xff08;直接访问&#xff09;访问父类与子类…

2023年6月18日DAMA-CDGA/CDGP数据治理认证报名到这里

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

APP开发中的UI设计

UI设计是 APP开发中一个必不可少的部分&#xff0c;用户体验也是影响 APP产品成功与否的重要因素&#xff0c;用户体验包括用户的使用感受和操作感受。就 UI设计来说&#xff0c;它的主要内容有&#xff1a;界面、图标、颜色、字体、布局、页面布局等。 一个好的 UI设计可以增加…

抖音seo源码开发-

抖音seo源码开发&#xff0c;抖音seo开源定制&#xff0c;抖音seo源码交付&#xff0c;抖音seo源码开发是一项重要的技术&#xff0c;可以将您的抖音号排名提升到更高的位置&#xff0c;帮助您吸引更多的关注和粉丝。SEO源码开发需要具备一定的技术和经验&#xff0c;因此建议在…

opencv_c++学习(三十)

一、加载深度神经网络模型 Net cv:dnn::readNet(const String & model, const String & config "", const String & framework "")model:模型文件名称 config:配置文件名称 framework:框架种类 Net类中的函数名称以及作用&#xff1a; 向…

dataV教程-浅用dataV

一别多日&#xff0c;好久没有和大家相见了。其一的原因是因为公司的项目&#xff0c;其二就是因为太懒了。现在给大家浅浅的介绍一下这个好用的大屏展示框架吧。如果后续有深入的话&#xff0c;我会出一个详解版本的。 一、dataV介绍 前言:由于当前的大数据时代&#xff0c;…

图像采集卡的基本原理、应用领域和发展趋势

图像采集卡是一种硬件设备&#xff0c;用于将模拟视频信号转换为数字信号&#xff0c;并将其传输到计算机中进行处理和存储。它通常用于监控、视频会议、医学图像等领域。本文将介绍图像采集卡的基本原理、应用领域和发展趋势。 一、图像采集卡的基本原理 图像采集卡的基本原…