洛谷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 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步