当前位置: 首页 > news >正文

Digital Folding

Digital Folding

Posted on 2026-02-06 18:39  贾普鲁登  阅读(0)  评论(0)    收藏  举报
#include <bits/stdc++.h>
using namespace std;
long long p[10],q[10],num[10];
const long long m = 998244353;
long long ksm(int a,int b) {long long t = a,ans = 1;while(b){if(b % 2 == 1) ans = ans * t % m;t = t * t % m;b /= 2;}return ans; } long long cal(long long n) {long long ans = 1;if(n == 0) ans *= num[0]*num[0]%m*num[0]%m*num[0]%m;else if(n > 0 && n <= 9) ans *= num[0]*num[0]%m*num[0]%m;else if(n >= 10 && n <= 99) ans *= num[0]*num[0]%m;else if(n >= 100 && n <= 999) ans *= num[0];while(n){ans *= num[n % 10];n /= 10;ans %= m;}return ans; } //a/b mod m -> a * pow(b,m-2) 逆元 //why (pi/100)^56 cannot work but pi^56/100^56 does work? long long inv100 = ksm(ksm(100,56),m-2); int main() {int T,number;long long ans = 0;cin >> T;while(T--){ans = 0;cin >> number;for(int i = 1;i <= 7;i++) {cin >> p[i];p[i] = p[i];q[i] = 100 - p[i];}// cautious every bulb will be tried to firenum[0] = p[1]*p[2]%m*p[3]%m*q[4]%m*p[5]%m*p[6]%m*p[7]%m;num[1] = q[1]*q[2]%m*p[3]%m*q[4]%m*q[5]%m*p[6]%m*q[7]%m;num[2] = p[1]*q[2]%m*p[3]%m*p[4]%m*p[5]%m*q[6]%m*p[7]%m;num[3] = p[1]*q[2]%m*p[3]%m*p[4]%m*q[5]%m*p[6]%m*p[7]%m;num[4] = q[1]*p[2]%m*p[3]%m*p[4]%m*q[5]%m*p[6]%m*q[7]%m;num[5] = p[1]*p[2]%m*q[3]%m*p[4]%m*q[5]%m*p[6]%m*p[7]%m;num[6] = p[1]*p[2]%m*q[3]%m*p[4]%m*p[5]%m*p[6]%m*p[7]%m;num[7] = p[1]*q[2]%m*p[3]%m*q[4]%m*q[5]%m*p[6]%m*q[7]%m;num[8] = p[1]*p[2]%m*p[3]%m*p[4]%m*p[5]%m*p[6]%m*p[7]%m;num[9] = p[1]*p[2]%m*p[3]%m*p[4]%m*q[5]%m*p[6]%m*p[7]%m;for(int i = 0;i <= number;i++){//inv100 is (1/100)^56 mod m -> pow(pow(100,56),m-2)ans = (ans + cal(i) * cal(number-i) % m * inv100 ) % m;}cout << ans % m << endl;} }