首页 > 其他分享 >Say No to Palindromes

Say No to Palindromes

时间:2022-10-07 19:46:22浏览次数:69  
标签:Palindromes No int cin pos else temps Say dp

传送门

题意:
一个字符串s, 只由a, b, c三种字符构成,有m次询问,每次询问一个区间l, r,可以操作使l, r子串的某个字符改变,问需要的最少的次数使得,l, r区间之内的字符串,没有回文


思路:
题目说字符串只由三个字符构成,这个条件很特殊,然后通过观察发现,要构成回文串只能是abcabc, acbacb, 等,连续的三个字符必须是要不相等的,而且这就构成了上述的规律,abc的全排列有6中,分别讨论这6要变成这6中情况需要的消耗,答案就是6中答案里面的最小值


总结:
字符串的特殊性利用,循环节来构成无回文串的字符串,要求区间,只要区间相减,最后求min即可

点击查看代码
#include <bits/stdc++.h>
#define endl '\n'
#define IOS ios::sync_with_stdio(false);
using namespace std;

typedef long long ll;
const int MAXN = 2e5 + 10;
int n, m;	
string s;
int dp[6][MAXN];

int main()
{
	IOS; cin.tie(0), cout.tie(0);
	cin >> n >> m;
	cin >> s;
	string temps = "abc";
	int pos = 0;
	do
	{
		for (int i = 0; i < s.size(); ++i)
		{
			if (i % 3 == 0)
			{
				if (s[i] != temps[0])
					dp[pos][i] = (i == 0) ? 1 : dp[pos][i - 1] + 1;
				else
					dp[pos][i] = (i == 0) ? 0 : dp[pos][i - 1];
			}
			else if (i % 3 == 1)
			{
				if (s[i] != temps[1])
					dp[pos][i] = (i == 0) ? 1 : dp[pos][i - 1] + 1;
				else
					dp[pos][i] = (i == 0) ? 0 : dp[pos][i - 1];
			}
			else if (i % 3 == 2)
			{
				if (s[i] != temps[2])
					dp[pos][i] = (i == 0) ? 1 : dp[pos][i - 1] + 1;
				else
					dp[pos][i] = (i == 0) ? 0 : dp[pos][i - 1];
			}
		}
		++pos;
	} while (next_permutation(temps.begin(), temps.end()));
	

	while (m--)
	{
		int l, r;
		cin >> l >> r;
		l -= 1, r -= 1;
		int ans = min({ dp[0][r] - dp[0][l - 1], dp[1][r] - dp[1][l - 1], dp[2][r] - dp[2][l - 1], dp[3][r] - dp[3][l - 1], dp[4][r] - dp[4][l - 1], dp[5][r] - dp[5][l - 1] });
		cout << ans << endl;
	}
	
	return 0;
}
/*
1 1
baacb
2 3
*/

标签:Palindromes,No,int,cin,pos,else,temps,Say,dp
From: https://www.cnblogs.com/jumo-xiao/p/16760502.html

相关文章

  • CentOS 7.9 安装 node-v14.16.0
    下载地址:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.gz 解压压缩包 tarzxvf/opt/software/node-v14.16.0-linux-x64.tar.gz-C/opt/ 添......
  • 我用 nodejs 爬了一万多张小姐姐壁纸
    前言哈喽,大家好,我是小马,为什么要下载这么多图片呢?前几天使用uni-app+uniCloud免费部署了一个壁纸小程序,那么接下来就需要一些资源,给小程序填充内容。爬取图片首先初始......
  • 【译】适用于Node.js和TypeScript的完整ORM —— Prisma
    翻译自:www.prisma.io/blogPrisma是Node.js和TypeScript的下一代ORM。经过两年多的开发,我们很高兴分享所有Prisma工具已准备好投入生产!一个对象关系映射的新范例Prism......
  • 用 NodeJS 开发一版在线流程图网站
    源码:github.com/maqi1520/Cl…背景对于程序员来说,每天除了写代码,接触较多的可能是各种图表了,诸如流程图、原型图、拓扑图、UML图以及思维导图等等,我们较为熟悉的是Process......
  • Mysql之Innodb锁场景
    mysql锁分类基于锁的属性分类:共享锁(读锁)、排他锁(写锁)基于锁的粒度分类:行级锁(innodb)、表锁(innodb、myisam)、页级锁(innodb引擎)、记录锁、间隙锁、临建锁。mys......
  • P7963 [NOIP2021] 棋局
    给定\(n\timesm\)的棋盘,连有横纵\(2\)种无向边,有\(3\)种类型的边:只允许按照这条边走\(1\)步允许继续走边权为\(2\)的边,但不允许改变方向允许继续走边权为......
  • Ubuntu系统anaconda报错version `GLIBCXX_3.4.30' not found
    参考文章:https://blog.csdn.net/zhu_charles/article/details/75914060  ================================================   在anaconda中安装deepmind_la......
  • 51Nod5440 奇怪的树
    题面我捡到了一棵树。这棵树上有n个点,被标号为1…n,其中1号结点为根节点。奇怪的是,每个点有一个体积c[i]。更奇怪的是,每个点有一个权值a[i]。更更奇怪的是,每个点......
  • hive元起动报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google
    错误原因:1.系统找不到这个类所在的jar包2.jar包的版本不一样系统不知道使用哪个。 hive启动报错的原因是后者解决办法:1、com.google.common.base.Preconditions.che......
  • CentOS 7.9 安装 node-v14.16.0
    下载地址:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.gz 解压压缩包tarzxvf/opt/software/node-v14.16.0-linux-x64.tar.gz-C/opt/ 添加至......