news 2026/4/23 16:28:45

分数取模的应用

作者头像

张小明

前端开发工程师

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/4/23 13:03:29

基于html的书城阅读器系统的设计与实现(源码+论文+部署+安装)

感兴趣的可以先收藏起来&#xff0c;还有在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望可以帮到大家。 一、程序背景 随着信息技术和移动互联网的迅猛发展&#xff0c;数字阅读已成为主流知识获取方式。传统…

作者头像 李华
网站建设 2026/4/23 13:03:33

保姆级Windows版宝塔面板搭建教程:新手也能轻松上手运维

作为一名长期和服务器打交道的开发者&#xff0c;我深知新手配置Windows服务器环境的痛苦——手动安装IIS、PHP、MySQL&#xff0c;光是解决各种依赖冲突和端口占用问题&#xff0c;就能耗掉大半天时间。而宝塔面板的出现&#xff0c;直接把复杂的运维操作变成了"点点点&q…

作者头像 李华
网站建设 2026/4/23 16:28:39

Python 绘制动态跳动爱心|情人节专属浪漫代码,新手零基础也能上手

马上就是情人节&#xff0c;程序员的浪漫从一行行代码开始&#xff01;今天分享一款纯 Python 内置库实现的动态跳动爱心&#xff0c;无需复杂第三方依赖&#xff0c;黑色背景搭配粒子化爱心&#xff0c;自带自然的跳动节奏和柔和光晕&#xff0c;既适合送给心仪的人制造惊喜&a…

作者头像 李华
网站建设 2026/4/17 13:17:08

C++基于微服务脚手架的视频点播系统---客户端(3)

这是即时通讯系统开发实战的第三篇技术指南。在前两篇中&#xff0c;我们完成了项目架构设计、环境搭建、启动页开发以及主窗口的基础外观定制&#xff08;去边框、加阴影&#xff09;。本篇将深入探讨客户端界面的布局策略&#xff0c;剖析 Qt 布局系统的核心机制&#xff0c;…

作者头像 李华
网站建设 2026/4/23 16:28:21

数字孪生解决方案推荐哪家?实战案例解析

数字孪生——这个听起来有点科幻的词&#xff0c;其实早已悄悄潜入我们现实世界的各个角落。它远不止是三维建模或者虚拟仿真那么简单&#xff0c;更像是以数据为血脉、模型为骨架、智能为神经的“数字生命体”&#xff0c;在虚拟空间中持续生长&#xff0c;与现实物体同步呼吸…

作者头像 李华