题解 | #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;
    }
}

全部评论

相关推荐

01-30 16:13
浙江大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务