news 2026/5/9 9:04:09

分数取模的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分数取模的应用

这是牛客寒假营第一场的A题,这是我第一次接触分数取模的题,从这里面学到了分数取模以及乘法逆元的相关知识。

我的整体思路就是定义两个数组p1和p2,其中p1中存放的是1-7个灯管亮的概率,p2中存放的是1-7个灯管不亮的概率。其中就用到了分数取模操作。其中用到了快速幂算法。接着在基于当前每个灯管亮的概率下,再去分别计算每个数字亮的概率,最后在将所有满足A + B = C的形式的 数的概率加起来就能得到最终的答案。我觉得难点主要是在分数取模这一步。

分数取模的具体解释如下:

具体代码如下:

#include <bits/stdc++.h> #define MOD 998244353 #define ll long long using namespace std; //a的b次方 ll qkm(ll a,ll b){ ll ans = 1; ll base = a; while (b){ if (b & 1){ ans = (ans * base) % MOD; } b >>= 1; base = (base * base) % MOD; } return ans; } void solve(){ ll c; cin>>c; //p1是1-7灯管亮的概率,p2是1-7灯管不良的概率 vector<ll> p1(8),p2(8); for (int i = 1;i <= 7;++i){ ll x; cin>>x; p1[i] = (x * qkm(100,MOD - 2)) % MOD; p2[i] = (1 - p1[i] + MOD) % MOD; // cout<<p1[i]<<" ! "<<p2[i]<<endl; } vector<ll> abc(10); vector<vector<ll>> num(10,vector<ll> (10));//每个数字亮的概率p num[0][1] = num[0][1] = num[0][2] = num[0][3] = num[0][5] = num[0][6] = num[0][7] = 1; num[1][3] = num[1][6] = 1; num[2][1] = num[2][3] = num[2][4] = num[2][5] = num[2][7] = 1; num[3][1] = num[3][3] = num[3][4] = num[3][6] = num[3][7] = 1; num[4][2] = num[4][3] = num[4][4] = num[4][6] = 1; num[5][1] = num[5][2] = num[5][4] = num[5][6] = num[5][7] = 1; num[6][1] = num[6][2] = num[6][4] = num[6][5] = num[6][6] = num[6][7] = 1; num[7][1] = num[7][3] = num[7][6] = 1; num[8][1] = num[8][2] = num[8][3] = num[8][4] = num[8][5] = num[8][6] = num[8][7] = 1; num[9][1] = num[9][2] = num[9][3] = num[9][4] = num[9][6] = num[9][7] = 1; for (int i = 0;i <= 9;++i){ ll ss = 1; for (int j = 1;j <= 7;++j){ if (num[i][j] == 1){ ss = (ss * p1[j]) % MOD; } else{ ss = (ss * p2[j]) % MOD; } } abc[i] = ss; } ll fz = 0; for (int i = 0;i <= c;++i){ ll sh = 1; ll g,s,b,q; g = i % 10; s = i % 100 / 10; b = i % 1000 / 100; q = i / 1000; sh = (sh * abc[g]) % MOD; sh = (sh * abc[s]) % MOD; sh = (sh * abc[b]) % MOD; sh = (sh * abc[q]) % MOD; g = (c - i) % 10; s = (c - i) % 100 / 10; b = (c - i) % 1000 / 100; q = (c - i) / 1000; sh = (sh * abc[g]) % MOD; sh = (sh * abc[s]) % MOD; sh = (sh * abc[b]) % MOD; sh = (sh * abc[q]) % MOD; if (fz == 0){ fz = sh; } else{ fz = (fz + sh) % MOD; } } cout<<fz<<endl; } int main() { int t; cin>>t; while (t--){ solve(); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 16:07:03

VMWARE虚拟机上不了网络

VMWARE虚拟机上不了网络 尝试了csdn上的各种方案&#xff0c;但是接出来的结果都是错误的&#xff0c;下面是唯一可行的&#xff0c;前提是使用的NAT模式 检查网络联通状态 mzmz-virtual-machine:~$ ping 8.8.8.8 -c 4 connect: 网络不可达测试证实不可用 检查网卡路由信息 mz…

作者头像 李华
网站建设 2026/5/4 12:58:11

Java零基础入门救星!

对于Java零基础学习者而言&#xff0c;“抄代码”是最直接的入门方式——通过借鉴网上案例&#xff0c;快速熟悉语法、感知代码逻辑&#xff0c;积累基础编程经验。但多数小白都会陷入“抄代码也崩”的尴尬循环&#xff1a;网上复制的代码粘贴到自己项目中&#xff0c;要么满屏…

作者头像 李华
网站建设 2026/5/8 7:27:51

生成式引擎优化GEO崛起:企业营销新焦点与四大核心策略

当下&#xff0c;人工智能内容生成正渐渐变成信息获取的主流渠道&#xff0c;此时&#xff0c;一种新的优化技术引发了数字营销以及内容策略领域的关注&#xff0c;它就是生成式引擎优化&#xff0c;一般简称为GEO。这一概念可不是把传统SEO策略直接搬到AI环境那么简单&#xf…

作者头像 李华
网站建设 2026/5/6 4:43:42

如何在iPhone上恢复已删除的笔记的综合指南

你是不是不小心删除了 iPhone 上的笔记&#xff1f;丢失重要的笔记总是让人心烦意乱&#xff0c;尤其是当它们包含着宝贵的信息或珍贵的回忆时。好在&#xff0c;如果你有 iPhone&#xff0c;有几种方法可以恢复已删除的笔记。在本文中&#xff0c;我们将逐步探讨如何恢复 iPho…

作者头像 李华