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. 下载安装wps后去除监控

    下载wps之后发现wps一直对我的电脑进行监控,占用着我的cpu和内存,我要把它清理出去.... 控制面板→管理工具→任务计划程序→任务计划程序库,有两个wps的任务计划,可以根据属性看到文件地址 C ...

  2. JDK中Lambda表达式的序列化与SerializedLambda的巧妙使用

    前提 笔者在下班空余时间想以Javassist为核心基于JDBC写一套摒弃反射调用的轻量级的ORM框架,过程中有研读mybatis.tk-mapper.mybatis-plus和spring-boot ...

  3. Codeforces 575A - Fibonotci

    题面传送门 题意: 给出 \(s_0,s_1,s_2,\dots,s_{n-1}\),对于 \(i\geq n\),有 \(m\) 个 \(s_i\) 满足 \(s_i\neq s_{i\bmod n ...

  4. R 小知识积累

    1.grep 1 ## a为一个data frame,取含有RNA-Seq的行 2 index <- grep("RNA-Seq", a$Assay_Type) 3 b &l ...

  5. [R] cbind和filter函数的坑

    最近我用cbind函数整合数据后,再用filter过滤数据,碰到了一个大坑. 以两组独立样本t检验筛选差异蛋白为例进行说明吧. pro2 <- df2[1:6] Pvalue<-c(rep ...

  6. 毕业设计之zabbix+微信企业号报警

    需要自己申请一个微信企业号 创建应用 AgentId 1000003 Secret SOI8b20G96yUVM29K02-bP5N5o6dovwSF2RrDaXHJNg 企业ID(自己再企业信息里面 ...

  7. Set && Map

    ES6 提供了新的数据结构 Set, Map Set成员的值都是唯一的,没有重复的值,Set内的元素是强类型,会进行类型检查. let set = new Set([1, true, '1', 'tr ...

  8. C++基本函数的调用优化(构造、拷贝构造、赋值)

    合理的函数可提升时间和空间的利用率 //Test1.h #include<iostream> using namespace std; struct ST { private: int a ...

  9. Android权限级别(protectionLevel)

    通常情况下,对于需要付费的操作以及可能涉及到用户隐私的操作,我们都会格外敏感. 出于上述考虑以及更多的安全考虑,Android中对一些访问进行了限制,如网络访问(需付费)以及获取联系人(涉及隐私)等. ...

  10. 利用extern共享全局变量

    方法: 在xxx.h中利用extern关键字声明全局变量 extern int a; 在xxx.cpp中#include<xxx.h> 再定义 int a; 赋不赋初值无所谓,之后该全局变 ...