cf1555D. Say No to Palindromes

题意:

给出一个字符串,长度为n,而且都是a,b,c三个字符构成的,然后有m个询问
每个询问给出l r,问要想这个区间内任意长度字串都不是回文子串,至少要改多少个字符

题解:

我们思考一下,什么样的字符是符合要求的:

  1. 长度为2,相邻两个字符不能相同
  2. 长度为3,间隔为1的字符不能一样
  3. 长度为4,只要不满足长度为2和长度为3的情况,一定不是回文串

也就是只要不满足长度为2和长度为3的字符情况,就是符合要求的。要符合这两个要求,可以得知要求每三个字符都是不一样的,一共就三个字符,我们将三个字符全排列。
一个符合要求的字符串一定循环的,且循环节有6种情况:abc,acb,bac,bca,cab,cba
这样就可以实现三个位置都不相同
我们用前缀和预处理,用前缀和来实现

代码:

// Problem: D. Say No to Palindromes
// Contest: Codeforces - Educational Codeforces Round 112 (Rated for Div. 2)
// URL: https://codeforces.com/contest/1555/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// Data:2021-08-18 11:42:57
// By Jozky#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef LOCALstartTime= clock();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{#ifdef LOCALendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 3e5 + 9;
string s1[10];
ll diff[10][maxn];
int main()
{//rd_test();ll n, m;read(n, m);string s;cin >> s;s= "#" + s; //为了下标从1开始s1[1]= "#";while (s1[1].size() <= n)s1[1]+= "abc";s1[2]= "#";while (s1[2].size() <= n)s1[2]+= "acb";s1[3]= "#";while (s1[3].size() <= n)s1[3]+= "bac";s1[4]= "#";while (s1[4].size() <= n)s1[4]+= "bca";s1[5]= "#";while (s1[5].size() <= n)s1[5]+= "cab";s1[6]= "#";while (s1[6].size() <= n)s1[6]+= "cba";//Time_test();for (int i= 1; i <= 6; i++) {diff[i][0]= 0;for (int j= 1; j <= n; j++) {if (s1[i][j] == s[j])diff[i][j]= diff[i][j - 1];elsediff[i][j]= diff[i][j - 1] + 1;}}// cout << "--" << endl;while (m--) {int l, r;read(l, r);ll ans= INF_int;for (int i= 1; i <= 6; i++) {ans= min(ans, diff[i][r] - diff[i][l - 1]);}printf("%lld\n", ans);}return 0;
}

cf1555D. Say No to Palindromes相关推荐

  1. CF1555D Say No to Palindromes题解--zhengjun

    题目大意 给你一个字符串,每次询问区间 [l,r][l,r][l,r] 最小需要改变几个才能使得这个区间的所有子区间都不是长度至少为 222 的回文串. 思路 首先我们想一想所有子区间都不是长度至少为 ...

  2. 【APIO2014】Palindromes

    #103. [APIO2014]Palindromes 统计 描述 提交 自定义测试 给你一个由小写拉丁字母组成的字符串 ss.我们定义 ss 的一个子串的存在值为这个子串在 ss 中出现的次数乘以这 ...

  3. 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities

     Palindromes and Super Abilities Problem's Link:  http://acm.timus.ru/problem.aspx?space=1&num=1 ...

  4. 洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes

    P1207 [USACO1.2]双重回文数 Dual Palindromes 题目描述 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做"回文数".例如,12321就是一 ...

  5. 【CodeForces】914 E. Palindromes in a Tree 点分治

    [题目]E. Palindromes in a Tree [题意]给定一棵树,每个点都有一个a~t的字符,一条路径回文定义为路径上的字符存在一个排列构成回文串,求经过每个点的回文路径数.n<=2 ...

  6. [USACO1.5]回文质数 Prime Palindromes

    题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000 ...

  7. CF1063A Oh Those Palindromes

    CF1063A Oh Those Palindromes 题意: 一个非空字符串叫做回文串.如果它从左到右,从右到左读相同,那么它就是回文串. 例如,"ABCBA","A ...

  8. 【CodeForces - 245H 】Queries for Number of Palindromes (带容斥的区间dp)

    题干: You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. The ...

  9. UVA401 ​​​​​​​Palindromes【字符串】

    Palindromes UVA - 401 题目传送门 题目大意:给你一个字符串,判断其是回文串还是镜像串. AC代码: #include <cstdio> #include <io ...

最新文章

  1. elasticJob分片跑批
  2. python怎么打印出文件的内容,python怎么将打印输出日志文件
  3. php找不到控制器里面的方法,php – 在Laravel 4中找不到控制器类
  4. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
  5. 阿里云携手 VMware 共建云原生 IoT 生态,聚开源社区合力打造领域标准
  6. html5相关笔记(一)
  7. ubuntu服务器安装指南
  8. js监听多个事件_JavaScript中的事件与异常捕获解析
  9. 解决微服务在docker上部署后无法连接数据库的问题
  10. 基于bootstrap框架在ie8以下,兼容媒体查询[css样式]
  11. 计算机d盘不显示容量,电脑D盘可用空间小,可是看不到文件
  12. 电解槽行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  13. python撤销_python 取消转义字符作用
  14. Web开发(初级)- 常用css总结,方便查询
  15. cups支持的打印机列表_CUPS共享打印机服务
  16. css 剪辑图片_[译]用CSS剪切圆形图片
  17. Vue图表(v-charts, e-charts)入门安装使用
  18. 移动、联通、电信手机号码开头分别是什么?
  19. 新版白话空间统计(25):方向分布(标准差椭圆)
  20. 英语词汇 talk down to 的中英翻译解释和例子

热门文章

  1. 这个女生躲在衣柜等男友回家,结果竟是......
  2. 2500 万行的代码就问你敢不敢动?!
  3. 限时秒杀│中科院推荐!6个引自美国NASA盒子,玩转科学
  4. 大数据时代,如何才能提高自身竞争力?
  5. 利用11行Python代码,盗取了室友的U盘,内容十分刺激!
  6. java jar包 平滑重启,nginx 平滑重启的实现方法
  7. python每天定时9点执行_python 定时器每天就执行一次的实现代码
  8. android编译的错误日志,Android Studio:编译器错误输出窗口在哪里?
  9. 前端 input怎么显示null_小猿圈WEB前端之HTML5+CSS3面试题(一)
  10. java类型转换造成的字节丢失,java 编码转换(已解决,转换字节丢失,无法实现)