P8271 [USACO22OPEN] COW Operations S 奶牛操作

P8271 [USACO22OPEN] COW Operations S 奶牛操作

文章目录

P8271 [USACO22OPEN\] COW Operations S - 洛谷 \| 计算机科学教育新生态 (luogu.com.cn)](https://www.luogu.com.cn/problem/P8271) # \[USACO22OPEN\] COW Operations S ## 题目描述 Bessie 找到了一个长度不超过 2 ⋅ 1 0 5 2 \\cdot 10\^5 2⋅105 且仅包含字符 'C','O' 和 'W' 的字符串 s s s。她想知道是否可以使用以下操作将该字符串变为单个字母 'C'(她最喜欢的字母): 1. 选择两个相邻相等的字母并将其删除。 2. 选择一个字母,将其替换为另外两个字母的任一排列。 求出这个字符串本身的答案对 Bessie 而言并不足够,所以她想要知道 s s s 的 Q Q Q( 1 ≤ Q ≤ 2 ⋅ 1 0 5 1\\le Q\\le 2\\cdot 10\^5 1≤Q≤2⋅105)个子串的答案。 ## 输入格式 输入的第一行包含 s s s。 第二行包含 Q Q Q。 以下 Q Q Q 行每行包含两个整数 l l l 和 r r r( 1 ≤ l ≤ r ≤ ∣ s ∣ 1\\le l\\le r\\le \|s\| 1≤l≤r≤∣s∣,其中 ∣ s ∣ \|s\| ∣s∣ 表示 s s s 的长度)。 ## 输出格式 输出一个长为 Q Q Q 的字符串,如果第 i i i 个子串可以被转变则第 i i i 个字符为 'Y',否则为 'N'。 ## 样例 #1 ### 样例输入 #1 COW 6 1 1 1 2 1 3 2 2 2 3 3 3 ### 样例输出 #1 YNNNYN ## 提示 【样例解释】 第一个询问的答案是「是」,因为 s 的第一个字符已经等于 'C'。 第五个询问的答案是「是」,因为 s 的第二到第三个字符组成的子串 OW 可以通过两步操作变为 'C': OW -> CWW -> C 这个样例字符串 COW 的其他子串均不能被转变为 'C'。 【测试点性质】 * 测试点 2-4 满足 ∣ s ∣ ≤ 5000 \|s\|\\le 5000 ∣s∣≤5000 以及 Q ≤ 5000 Q\\le 5000 Q≤5000。 * 测试点 5-11 没有额外限制。 ## 分析 因为一个字符可以转化成两个字符串,一个字符串也可以转化成另外的一个字母,所以原来的字符串的顺序对答案没有影响。 所以我们对于一个字符串,把它转化成 C 0 / 1 O 0 / 1 W 0 / 1 C 0/1\\ \\ O 0/1 \\ \\ W 0/1 C0/1 O0/1 W0/1 的形式,再判断枚举就好了。 实现时可以用一个前缀和。 ## code ```cpp #include #define fu(x , y , z) for(int x = y ; x <= z ; x ++) using namespace std; const int N = 2e5 + 5; int n , ans , ans1[N] , slen , l , r , flg , mp[N][4] , a[4]; char s[N] , s1[N]; int main () { int tot; scanf ("%s" , s + 1); slen = strlen (s + 1); fu (i , 1 , slen) { fu (j , 1 , 3) mp[i][j] = mp[i - 1][j]; if (s[i] == 'C') mp[i][1] ++; else if (s[i] == 'O') mp[i][2] ++; else mp[i][3] ++; } int T; scanf ("%d" , &T); while (T --) { scanf ("%d%d" , &l , &r); fu (i , 1 , 3) a[i] = mp[r][i] - mp[l - 1][i]; fu (i , 1 , 3) a[i] %= 2; if (a[1]) { if (!a[2] && !a[3]) printf ("Y"); else printf ("N"); } else { if (a[2] && a[3]) printf ("Y"); else printf ("N"); } } return 0; } ```

相关推荐
一个不知名程序员www8 分钟前
算法学习入门---vector(C++)
c++·算法
云飞云共享云桌面14 分钟前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
福尔摩斯张23 分钟前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
橘颂TA32 分钟前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展
xxxxxxllllllshi1 小时前
【LeetCode Hot100----14-贪心算法(01-05),包含多种方法,详细思路与代码,让你一篇文章看懂所有!】
java·数据结构·算法·leetcode·贪心算法
前端小L1 小时前
图论专题(二十二):并查集的“逻辑审判”——判断「等式方程的可满足性」
算法·矩阵·深度优先·图论·宽度优先
铁手飞鹰1 小时前
二叉树(C语言,手撕)
c语言·数据结构·算法·二叉树·深度优先·广度优先
专业抄代码选手3 小时前
【Leetcode】1930. 长度为 3 的不同回文子序列
javascript·算法·面试
[J] 一坚3 小时前
深入浅出理解冒泡、插入排序和归并、快速排序递归调用过程
c语言·数据结构·算法·排序算法
czlczl200209253 小时前
算法:二叉搜索树的最近公共祖先
算法