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

牛客周赛 Round 101--幂中幂plus

F-幂中幂plus_牛客周赛 Round 101

问题难点:

1.k最大可达10^18,无法暴力计算每个ci

2.ci的计算为幂套幂,很容易TLE或者溢出

3.mod很小(<=10^6),说明会有循环节出现

解决方案思路:

1.利用c_i=base^{c_{i-1}}%mod这个递推关系,用一个数组提前打表模拟知道循环节出现。

2.对所有ci做前缀和si=c1+c2+...+ci,方便o(1)查询

3.若k再循环节前,否则用舒徐额拆分+循环节前缀和快速计算

  • a[i]: 表示第 iii 项 cic_ici​

  • s[i]: 表示前缀和 si=∑j=1icjs_i = \sum_{j=1}^{i} c_jsi​=∑j=1i​cj​

  • f[x]: 记录值为 xxx 的 c_i 出现在哪个位置,方便找循环开始的位置

快速幂函数

ll mi(ll a,ll b) {if(!b) return 1;if(b&1) return a * mi(a, b-1) % m;return mi(a*a%m, b/2);
}
手写递归快速幂,计算a^bmodm,效率为logb
主函数
cin >> q;
while (q--) {cin >> n;if (n < N) cout << s[n] % m << endl; // 若在打表范围内,直接查表else {x = N - 1; // 打表到 a[x]res = s[x]; // s[x] 是 c_1 到 c_{x} 的前缀和n -= x;     // 还剩下 n 项未处理// y 是 a[x] 在前面出现的位置(说明出现了循环)y = f[mi(b, a[x])]; // 找出循环起点位置c = N - y;          // 循环节长度res += (s[x] - s[y-1]) % m * (n / c % m); // 整段循环节累加n %= c;             // 剩下不足一整段的部分res += s[y + n - 1] - s[y - 1]; // 补上不足的那一段cout << res % m << endl;}
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
#define ll long long
ll q,n,m,i,j,k,b,c,x,y,res;
ll a[N],s[N],f[N];
ll mi(ll a,ll b)
{if(!b) return 1;if(b&1) return a*mi(a,b-1)%m;return mi(a*a%m,b/2);
}
void solve()
{cin>>b>>a[0]>>m;for(b%=m,i=1;i<N;i++){a[i]=mi(b,a[i-1]);s[i]=s[i-1]+a[i];f[a[i]]=i;}cin>>q;while(q--){cin>>n;if(n<N) cout<<s[n]%m<<endl;else{x=N-1,res=s[x],n-=x;y=f[mi(b,a[x])],c=N-y;res+=(s[x]-s[y-1])%m*(n/c%m);n%=c,res+=s[y+n-1]-s[y-1];cout<<res%m<<endl;}}
}
signed main()
{int t = 1;// cin>>t;while (t--){solve();}return 0;
}
http://www.dtcms.com/a/290458.html

相关文章:

  • 【计算机组成原理】浮点数表示与运算
  • 开尔文封装的 SiC MOSFET 器件可靠性实例研究
  • Java学习----NIO模型
  • 朝歌智慧盘古信息:以IMS MOM V6重构国产化智能终端新生态
  • 20250720问答课题-基于BERT与混合检索问答系统代码解读
  • 论文笔记:EDITING MODELS WITH TASK ARITHMETIC
  • 【论文阅读】Nonparametric clustering of RNA-sequencing data
  • 【力扣】第42题:接雨水
  • Smart Tomcat
  • 人工智能教研室暑期培训flask全栈开发培训
  • 元图 CAD:PDF 与 CAD 格式互转的完美解决方案
  • 【Python 】dotenv 模块与用法介绍及Flask 集成用法示例
  • 力扣-45.跳跃游戏II
  • 解决mac chrome无法打开本地网络中的内网网址的问题
  • 【HTML】图片比例和外部div比例不一致,最大程度占满
  • CSS实现背景色下移10px
  • 网络协议(四)网络层 路由协议
  • Vue组件之间通信
  • 使用相机不同曝光时间测试灯光闪烁频率及Ai解释
  • 【Java + Vue 实现图片上传后 导出图片及Excel 并压缩为zip压缩包】
  • 过往记录系列 篇七:大A突破3500点历史梳理
  • STM32 USB键盘实现指南
  • 格式工厂5.21.0简介
  • Idea上拉取代码解决冲突的总结
  • Scott Brinker:Martech代理时代兴起,结构性的洗牌刚刚开始;SaaS定价模式迅速被按效果付费所取代
  • 时序数据库在工业物联网领域的核心优势与应用价值
  • mongodb源代码分析createCollection命令由create.idl变成create_gen.cpp过程
  • MongoDB 查询时区问题
  • MySQL主从同步集群(Docker搭建)
  • 安装docker可视化工具 Portainer中文版(ubuntu上演示,所有docker通用) 支持控制各种容器,容器操作简单化 降低容器门槛