LuoguP6553 Strings of Monody 题解
Content
给定一个长度为 \(n\) 的字符串 \(s\)(仅包含 \(1,4,5\) 三种字符,\(n\) 在本题中无需输入),有 \(m\) 个操作,每次操作给定两个整数 \(l,r\),再给定一个字符串 \(s'\),将 \(s\) 的从 \(l\) 到 \(r\) 的子串换成 \(s'\)。请在每次操作后求出:
- 字符串中 \(1\) 的个数。
- 字符串中所有数的总和。
- 字符串中所有数的乘积。
以上数据都要对 \(\bf 99824353\) 取模(注意!不是 \(998244353\))。
数据范围:\(n\leqslant 10^6,m\leqslant 10^3,1\leqslant r-l+1\leqslant 10^3\)。
Solution
这道题目看上去比较麻烦,其实只需要暴力模拟就可以搞定。
首先,我们可以看到,每次的变换范围不会超过 \(10^3\),所以,我们可以考虑一种 \(\mathcal{O}(m(r-l+1))\) 的算法——每次只考虑变换要变换的子串,然后更新要求的三个问题的答案。
我们可以开一个计数器 \(ans_1,ans_4,ans_5\)(\(ans_i\) 表示 \(i\) 在字符串中出现的次数),每次操作就要更新着三个计数器的值,那么三个问题的答案就是 \(ans_1,ans_1+4\times ans_4+5\times ans_5,4^{ans_4}\times5^{ans_5}\)(至于第三个答案为什么不需要乘 \(1^{ans_1}\) 大家应该都弄得明白,在此不再赘述)。
这里幂次方取模明摆着用快速幂轻松搞定。
最后一点坑的就是:注意模数,不是 \(998244353\),这里应该是 \(99824353\),少了一个 \(4\)!
总体来说难度不算太大,但要考虑的细节却不少。
Code
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
typedef long long ll;
ll quickpow(ll a, ll b, ll p) {
if(p == 1) return 0;
ll res = 1;
b %= p;
for(; b; b >>= 1) {
if(b & 1) res = res * a % p;
a = a * a % p;
}
return res;
}
ll n, m, sum1, sum, mul = 1, aa[17];
char s[1000007];
void test1() {
printf("%lld %lld %lld\n", aa[1], aa[4], aa[5]);
}
int main() {
scanf("%s%d", s + 1, &m);
n = strlen(s + 1);
for(int i = 1; i <= n; ++i) aa[s[i] - '0']++;
// test1();
while(m--) {
char tmp[1007];
int xx, yy;
scanf("%d%d%s", &xx, &yy, tmp + 1);
for(int i = 1; i <= yy - xx + 1; ++i) {
// printf("%c %c\n", s[xx + i - 1], tmp[i]);
aa[s[xx + i - 1] - '0']--;
aa[tmp[i] - '0']++;
s[xx + i - 1] = tmp[i];
}
// test1();
printf("%lld %lld %lld\n", aa[1], (aa[1] + aa[4] * 4 + aa[5] * 5) % 99824353, (quickpow(4, aa[4], 99824353) * quickpow(5, aa[5], 99824353)) % 99824353);
}
return 0;
}
LuoguP6553 Strings of Monody 题解的更多相关文章
- POJ 2406 Power Strings KMP运用题解
本题是计算一个字符串能完整分成多少一模一样的子字符串. 原来是使用KMP的next数组计算出来的,一直都认为是能够利用next数组的.可是自己想了非常久没能这么简洁地总结出来,也仅仅能查查他人代码才恍 ...
- Codeforces Round #410 (Div. 2) B
B. Mike and strings time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 题解-ARC058D Iroha Loves Strings
题面 ARC058D Iroha Loves Strings 给定 \(n\) 个字符串,从中选出若干个按给出顺序连接起来,总长等于 \(m\),求字典序最小的,保证有解. 数据范围:\(1\le n ...
- 题解-Reachable Strings
题解-Reachable Strings 前置知识: \(\texttt{Hash}\) Reachable Strings 给一个长度为 \(n\) 的 \(\texttt{01}\) 串 \(s\ ...
- [LeetCode]题解(python):043-Multiply Strings
题目来源 https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, retur ...
- 【题解】Power Strings
题目描述 给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成.如:ababab,最多由3个ab连接而成. 输入输出格式 输入格式 若干行,每行一个字符串. 当读入 ...
- Power Strings[poj2406]题解
Power Strings Description - Given two strings a and b we define ab to be their concatenation. For ex ...
- CF1320 Div1 D.Reachable Strings 题解
题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...
- CF1144A Diverse Strings 题解
Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...
随机推荐
- vue 3 学习笔记 (七)——vue3 中 computed 新用法
vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 ...
- JDK源码阅读(7):ConcurrentHashMap类阅读笔记
ConcurrentHashMap public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implement ...
- 【JavaSE】类与类的关系--UML
类(对象/接口)之间的关系 -- UML类图展现 2019-07-14 14:37:19 by冲冲 在面向对象程序设计时,类与类之间的关系主要分为:继承,实现,依赖,关联,聚合,组合等6种关系. ...
- tomcat更改端口号and设置cmd别名
1.修改端口号 打开tomcat的conf\server.xml 这个是项目访问的端口号了 这个也要注意更改一下,避免冲突 2.接下来要设置cmd别名 用文本编辑器打开bin\catalina.bat ...
- 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)
题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ...
- ceph简单了解
ceph简介 ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能.可靠性和可扩展性. 目前已经得到众多云计算厂商的支持并被广泛应用.RedHat及OpenStack都可以与Ceph整合以支持 ...
- R 小知识积累
1.grep 1 ## a为一个data frame,取含有RNA-Seq的行 2 index <- grep("RNA-Seq", a$Assay_Type) 3 b &l ...
- python14异常处理
def test_div(num1,num2): return num1 / num2 if __name__ == "__main__": try: print(test_div ...
- excel-合并多个Excel文件--VBA合并当前目录下所有Excel工作簿中的所有工作表
在网上找EXCEL多文件合并的方法,思路: 一.Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转 ...
- 56-Remove Linked List Elements
Remove Linked List Elements My Submissions QuestionEditorial Solution Total Accepted: 61924 Total Su ...