题解 | #A+B Problem#
A+B Problem
https://ac.nowcoder.com/acm/contest/120561/A
A题(纯新手,建议去看大佬的)
本题主要考点在于快速幂,逆元,要注意每根灯管概率都是独立的,所以要单独求出每个数字的概率,要注意概率除以100要通过逆元进行计算,可以去看看那些码风好的大佬,我就用最麻烦的方法去写了,下面展示代码
#include <bits/stdc++.h>
using namespace std;
int m=998244353;
long long KSM(int a,int b){
long long a1=a;
long long ans=1;
while(b){
if(b%2==1)
ans=ans*a1%m;
a1=a1*a1%m;
b/=2;
}
return ans;
}
int main(){
int t;
cin>>t;
while(t--){
int c;
long long sum=0;
cin>>c;
long long a[8];
long long b[8];
long long p[10];
for(int i=1;i<=7;i++){
cin>>a[i];
b[i]=100-a[i];
a[i]=a[i]*KSM(100,m-2)%m;
b[i]=b[i]*KSM(100,m-2)%m;
}
p[0]=a[1]*a[2]%m*a[3]%m*b[4]%m*a[5]%m*a[6]%m*a[7]%m;
p[1]=b[1]*b[2]%m*a[3]%m*b[4]%m*b[5]%m*a[6]%m*b[7]%m;
p[2]=a[1]*b[2]%m*a[3]%m*a[4]%m*a[5]%m*b[6]%m*a[7]%m;
p[3]=a[1]*b[2]%m*a[3]%m*a[4]%m*b[5]%m*a[6]%m*a[7]%m;
p[4]=b[1]*a[2]%m*a[3]%m*a[4]%m*b[5]%m*a[6]%m*b[7]%m;
p[5]=a[1]*a[2]%m*b[3]%m*a[4]%m*b[5]%m*a[6]%m*a[7]%m;
p[6]=a[1]*a[2]%m*b[3]%m*a[4]%m*a[5]%m*a[6]%m*a[7]%m;
p[7]=a[1]*b[2]%m*a[3]%m*b[4]%m*b[5]%m*a[6]%m*b[7]%m;
p[8]=a[1]*a[2]%m*a[3]%m*a[4]%m*a[5]%m*a[6]%m*a[7]%m;
p[9]=a[1]*a[2]%m*a[3]%m*a[4]%m*b[5]%m*a[6]%m*a[7]%m;
for(int i=0;i<=c;i++){
int j=c-i;
int i1=i%10;
int i2=i/10%10;
int i3=i/100%10;
int i4=i/1000;
int j1=j%10;
int j2=j/10%10;
int j3=j/100%10;
int j4=j/1000;
long long P=p[i1]*p[i2]%m*p[i3]%m*p[i4]%m*p[j1]%m*p[j2]%m*p[j3]%m*p[j4]%m;
sum=(sum+P)%m;
}
cout<<sum<<endl;
}
}
using namespace std;
int m=998244353;
long long KSM(int a,int b){
long long a1=a;
long long ans=1;
while(b){
if(b%2==1)
ans=ans*a1%m;
a1=a1*a1%m;
b/=2;
}
return ans;
}
int main(){
int t;
cin>>t;
while(t--){
int c;
long long sum=0;
cin>>c;
long long a[8];
long long b[8];
long long p[10];
for(int i=1;i<=7;i++){
cin>>a[i];
b[i]=100-a[i];
a[i]=a[i]*KSM(100,m-2)%m;
b[i]=b[i]*KSM(100,m-2)%m;
}
p[0]=a[1]*a[2]%m*a[3]%m*b[4]%m*a[5]%m*a[6]%m*a[7]%m;
p[1]=b[1]*b[2]%m*a[3]%m*b[4]%m*b[5]%m*a[6]%m*b[7]%m;
p[2]=a[1]*b[2]%m*a[3]%m*a[4]%m*a[5]%m*b[6]%m*a[7]%m;
p[3]=a[1]*b[2]%m*a[3]%m*a[4]%m*b[5]%m*a[6]%m*a[7]%m;
p[4]=b[1]*a[2]%m*a[3]%m*a[4]%m*b[5]%m*a[6]%m*b[7]%m;
p[5]=a[1]*a[2]%m*b[3]%m*a[4]%m*b[5]%m*a[6]%m*a[7]%m;
p[6]=a[1]*a[2]%m*b[3]%m*a[4]%m*a[5]%m*a[6]%m*a[7]%m;
p[7]=a[1]*b[2]%m*a[3]%m*b[4]%m*b[5]%m*a[6]%m*b[7]%m;
p[8]=a[1]*a[2]%m*a[3]%m*a[4]%m*a[5]%m*a[6]%m*a[7]%m;
p[9]=a[1]*a[2]%m*a[3]%m*a[4]%m*b[5]%m*a[6]%m*a[7]%m;
for(int i=0;i<=c;i++){
int j=c-i;
int i1=i%10;
int i2=i/10%10;
int i3=i/100%10;
int i4=i/1000;
int j1=j%10;
int j2=j/10%10;
int j3=j/100%10;
int j4=j/1000;
long long P=p[i1]*p[i2]%m*p[i3]%m*p[i4]%m*p[j1]%m*p[j2]%m*p[j3]%m*p[j4]%m;
sum=(sum+P)%m;
}
cout<<sum<<endl;
}
}
查看14道真题和解析