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

分数取模的应用

这是牛客寒假营第一场的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; }
http://www.jsqmd.com/news/342619/

相关文章:

  • AI代理记忆综述:从“短期失忆“到统一框架,一文读懂智能体记忆系统设计
  • $\chi^2(k)$
  • Java后端实习模拟面试实录:高并发、分布式与数据库核心问题深度解析(牛客网一面)
  • 热销榜单:2026年国内高口碑凤凰单丛茶厂家推荐 - 睿易优选
  • PMW-800-1000钢绞线锚具液压脉动疲劳试验系统
  • Java实习模拟面试实录:致远互联一面高频考点全解析 —— Spring MVC、线程安全、AOP、分库分表、MySQL优化一网打尽!
  • 导师要求降AI率怎么办?如何快速降低论文AIGC疑似度 - 我要发一区
  • HCIP第一次作业
  • 必看!2026年重庆预应力配件公司推荐排行榜,连接器预应力配件供应商哪家权威? - 睿易优选
  • PQW系列乘用车车轮旋转弯曲疲劳试验机
  • apple script 激活指定的vscode的窗口,以‘notes’开头的窗口
  • 2026年重庆1*7钢绞线厂家推荐,主要有哪些值得关注的供应商? - 睿易优选
  • 鼠大侠授权系统V2.0最新版下载
  • 论文降AI率要花多少钱?AIGC疑似度优化的成本分析 - 我要发一区
  • 2026全新个人发卡网 可以上传自己收款码无需第三地方接口带搭建教程
  • 2026中医执医考试机构课程推荐:哪些值得选 - 医考机构品牌测评专家
  • 2026年评价高的心理公司推荐:成都心理专家/成都心理医生/成都心理咨询专家/成都心理咨询师/成都心理咨询机构/选择指南 - 优质品牌商家
  • 小笑授权系统V7.3全开源版支持二开
  • 中医执业医师视频课程推荐:高效备考指南 - 医考机构品牌测评专家
  • 华为链路聚合原理 - 教程
  • 文科论文怎么降AI率?人文社科类论文的AIGC检测应对策略 - 我要发一区
  • 基于html的书城阅读器系统的设计与实现(源码+论文+部署+安装)
  • 理工科论文AI检测率高怎么办?技术类论文降AIGC疑似度的特殊技巧 - 我要发一区
  • 2026年成都心理咨询机构厂家最新推荐:成都心理专家/成都心理医生/成都心理咨询专家/成都心理咨询中心/成都心理咨询师/选择指南 - 优质品牌商家
  • 安装nodejs,安装cnpm,安装Angular脚手架,创建Angular项目
  • 全网热议!2026年速度快的电动车口碑推荐榜单,助您轻松选择心仪的电动车 - 睿易优选
  • 2026年企业加密软件评测服务商口碑排名及数据防泄露系统公司解析 - 睿易优选
  • 【2026最新实测】Notepad++中文版下载安装全攻略:从安装到插件配置一文搞懂(附安装包) - xiema
  • 项目_华为杯数学建模竞赛_第三
  • 2026年锂电池厂家权威推荐榜:代步车锂电池/太阳能路灯维修/客三轮锂电池/小区太阳能路灯/市政太阳能路灯/成都太阳能路灯/选择指南 - 优质品牌商家