洛谷P6553題解
阿新 • • 發佈:2020-07-19
這題要求出三個量:
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 }