news 2026/3/27 17:51:16

分数取模的应用

作者头像

张小明

前端开发工程师

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/3/23 1:08:37

PMW-800-1000钢绞线锚具液压脉动疲劳试验系统

PMW-800-1000钢绞线锚具液压脉动疲劳试验系统 一、概述 1. PMW-400-1000/800-2000型电液式钢绞线锚具脉动疲劳试验系统适用于对各种预应力混凝土用钢绞线、预应力筋用锚具等疲劳荷载性能试验&#xff1b;配置相应的试验辅具&#xff0c;也可用于大型零部件如混凝土结构件、钢…

作者头像 李华
网站建设 2026/3/18 0:01:50

Java做人工智能:JBoltAI框架的四大基础能力揭秘

在Java开发者的世界里&#xff0c;AI不再是遥不可及的未来科技。借助JBoltAI框架&#xff0c;Java也能轻松玩转AI&#xff0c;实现各种智能应用。今天&#xff0c;我们就来聊聊JBoltAI框架中的四大基础AI能力&#xff1a;文档处理、Text2Sql、Text2JSON和流式对话&#xff0c;看…

作者头像 李华
网站建设 2026/3/24 11:58:59

app手机防盗器实现方案

https://blog.csdn.net/geniusChinaHN/article/details/157735318 国家机密&#xff0c;无可奉告

作者头像 李华
网站建设 2026/3/21 15:38:12

用PaperRed写毕业论文真是太轻松了

aperRed是一款专为大学生、研究生及博士生打造的智能写作神器&#xff0c;核心聚焦提升论文撰写效率。它依托先进的自然语言处理技术与机器学习算法&#xff0c;能迅速生成高质量论文内容&#xff0c;覆盖摘要、大纲至正文全环节&#xff0c;适配各类写作场景需求。 PaperRed配…

作者头像 李华
网站建设 2026/3/24 0:51:31

基于SpringBoot的大学校园线上商城管理系统开发任务书

基于SpringBoot的大学校园线上商城管理系统开发任务书 一、任务背景 当前大学校园线下消费场景存在便捷性不足、商品品类有限、管理效率低下等问题&#xff0c;师生购物需求难以得到高效满足&#xff0c;传统校园小卖部、线下摊位无法实现24小时服务&#xff0c;且商品管理、订…

作者头像 李华