_YueYang

导航

洛谷P6553题解

这题要求出三个量:

1.1 的个数。

2.整个字符串每个数位的总和。

3.整个字符串每个数位的乘积。

我们可以先把各个数字都统计起来;对于第一问,直接输出结果;对于第二问,只要把各个数字乘上它出现的次数就可以了;对于第三问,一个一个乘过去要超时,我们可以预处理一个数的1到1000000次方。

每次修改时,要把原数组和统计结果一起修改。

代码:

复制代码
 1 #include<bits/stdc++.h>
 2 #define mod 99824353
 3 #define ll long long
 4 using namespace std;
 5 string s;
 6 ll a[1005000],m,sum[10],q4[1005000],q5[1005000];
 7 ll l,r;
 8 string ss;
 9 int main(){
10     cin>>s;
11     for(int i=0;i<s.size();++i){
12         a[i+1]=s[i]-'0';
13         ++sum[a[i+1]];//统计
14     }
15     q4[0]=q5[0]=1;
16     for(int i=1;i<=1000000;++i){
17         q4[i]=q4[i-1]*4%mod;
18         q5[i]=q5[i-1]*5%mod;
19     }//预处理1至1000000次方
20     scanf("%lld",&m);
21     for(int i=1;i<=m;++i){
22         scanf("%lld%lld",&l,&r);
23         cin>>ss;
24         for(int j=l;j<=r;++j){
25             int num=ss[j-l]-'0';
26             --sum[a[j]];
27             ++sum[num];
28             a[j]=num;
29         }//修改
30         printf("%lld %lld %lld\n",sum[1]%mod,(sum[1]+sum[4]*4+sum[5]*5)%mod,q4[sum[4]]*q5[sum[5]]%mod);//输出
31     }
32     return 0;
33 }
复制代码

 

posted on   _YueYang  阅读(189)  评论(0编辑  收藏  举报

努力加载评论中...
点击右上角即可分享
微信分享提示