Content

给定一个长度为 \(n\) 的字符串 \(s\)(仅包含 \(1,4,5\) 三种字符,\(n\) 在本题中无需输入),有 \(m\) 个操作,每次操作给定两个整数 \(l,r\),再给定一个字符串 \(s'\),将 \(s\) 的从 \(l\) 到 \(r\) 的子串换成 \(s'\)。请在每次操作后求出:

  1. 字符串中 \(1\) 的个数。
  2. 字符串中所有数的总和。
  3. 字符串中所有数的乘积。

以上数据都要对 \(\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 题解的更多相关文章

  1. POJ 2406 Power Strings KMP运用题解

    本题是计算一个字符串能完整分成多少一模一样的子字符串. 原来是使用KMP的next数组计算出来的,一直都认为是能够利用next数组的.可是自己想了非常久没能这么简洁地总结出来,也仅仅能查查他人代码才恍 ...

  2. Codeforces Round #410 (Div. 2) B

    B. Mike and strings time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. 题解-ARC058D Iroha Loves Strings

    题面 ARC058D Iroha Loves Strings 给定 \(n\) 个字符串,从中选出若干个按给出顺序连接起来,总长等于 \(m\),求字典序最小的,保证有解. 数据范围:\(1\le n ...

  4. 题解-Reachable Strings

    题解-Reachable Strings 前置知识: \(\texttt{Hash}\) Reachable Strings 给一个长度为 \(n\) 的 \(\texttt{01}\) 串 \(s\ ...

  5. [LeetCode]题解(python):043-Multiply Strings

    题目来源 https://leetcode.com/problems/multiply-strings/ Given two numbers represented as strings, retur ...

  6. 【题解】Power Strings

    题目描述 给定若干个长度小于等于10^6的字符串,询问每个字符串最多由多少个相同的子串重复连接而成.如:ababab,最多由3个ab连接而成. 输入输出格式 输入格式 若干行,每行一个字符串. 当读入 ...

  7. Power Strings[poj2406]题解

    Power Strings Description - Given two strings a and b we define ab to be their concatenation. For ex ...

  8. CF1320 Div1 D.Reachable Strings 题解

    题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...

  9. CF1144A Diverse Strings 题解

    Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...

随机推荐

  1. 保姆级神器 Maven,再也不用担心项目构建搞崩了

    今天来给大家介绍一款项目构建神器--Maven,不仅能帮我们自动化构建,还能够抽象构建过程,提供构建任务实现:它跨平台,对外提供了一致的操作接口,这一切足以使它成为优秀的.流行的构建工具,从此以后,再 ...

  2. ant命令

    ant -help 帮助(ant -h) ant -projecthelp 列举xml中重要的部分 (ant -p) ant -version 查看版本 ant -diagnostics 打印所有环境 ...

  3. Kubernetes容器编排探索与实践v1.22.1-上半部分

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com Kubernetes官网地址 https://kubernetes.io Kubernetes GitHub源码地址 htt ...

  4. Stream流的使用

    创建流 创建流的方式很多,从jdk8起,很多类中添加了一些方法来创建相应的流,比如:BufferedReader类的lines()方法:Pattern类的splitAsStream方法.但是开发中使用 ...

  5. centos与ubuntu安装及相关问题解答

    1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 答:Linus的发行版本有slackware,debian,redhat,Alpine,ArchLinux,Gentoo,LFS, ...

  6. Codeforces 348C - Subset Sums(根号分治)

    题面传送门 对于这类不好直接维护的数据结构,第一眼应该想到-- 根号分治! 我们考虑记[大集合]为大小 \(\geq\sqrt{n}\) 的集合,[小集合]为大小 \(<\sqrt{n}\) 的 ...

  7. P7327 Dream and Discs

    题目传送门. 题意简述:有 \(n\) 个数 \(a_1,a_2,\cdots a_n\),等概率选取区间 \(P_1,S_1\subseteq [1,n]\),\(P_2\subseteq P_1\ ...

  8. 如何利用efetch从NCBI中批量下载数据?

    目录 找序列 下序列 假设我要从NCBI中下载全部水稻的mRNA序列,如何实施? 找序列 第一步,肯定是找到相关序列. 我从ncbi taxonomy进入,搜索oryza.因为要搜索mRNA核酸序列, ...

  9. NextDenovo 组装基因组

    NextDenovo 是有武汉未来组团队开发出来用于组装ONT,Pacbio, HIFI (默认参数可对60-100X数据更有效),可通过correct--assemble对其进行组装.组装后,每个碱 ...

  10. Linux中shell去除空行的几种方法

    有时我们在处理和查看文件时,经常会有很多空行,为了美观或是有需要时,就有必要把这些除行去掉了,方法如下: #如需将结果输出加入重定向        > 文件名 1)用tr命令 代码如下: cat ...