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

【题解】[GenshinOI Round 3] P9816 少项式复合幂

题目链接

分析

首先这题给了很大的提示信息 注意 m 和 p 的范围 , 很自然的想到可以先把所有可能的 f ( x ) f(x) f(x) 算出来.

思维误区

有些人在算完 f ( x ) f(x) f(x) 之后可能就会去思考找环的问题,然后一些码力弱的大佬就会祭掉.

在经过仔细的观察之后 (大多数人其实一眼就看出来了罢 , 可以发现最终答案的计算是符合结合律的,或者说具有传递性? 所以考虑倍增.

f a [ i ] [ j ] fa[i][j] fa[i][j] 表示 f 1 < < j ( i ) f_{1<<j}(i) f1<<j(i) 的值,初始时把 f [ i ] [ 0 ] f[i][0] f[i][0] 算出来,后面就可以直接倍增了.

Code

#include <bits/stdc++.h>
#define int long long
const int N = 1e5+10;using namespace std;
int m,q,p;
int ksm(int a, int b){int ans = 1;while(b){if(b&1){ans = ans * a % p;}a = a*a%p;b >>= 1;}return ans;
}
int a[30],b[30];
int f[N];
int get(int x){int ans = 0;for(int i = 1; i <= m; i++){ans = (ans + a[i]*ksm(x,b[i])%p) % p;}return ans;
}
bool vis[N];
int belong[N];
vector<int> e[N];
int fa[N][30]; 
void init(){for(int i = 0; i < p; i++){fa[i][0] = get(i);}for(int i = 1;i <= 25; i++){for(int j = 0; j < p; j++){fa[j][i] = fa[fa[j][i-1]][i-1];}}
}
signed main(){cin >> m >> q >> p;for(int i = 1; i<= m; i++){cin >> a[i] >> b[i];a[i] %= p;} init();while(q--){int x,y;cin >> x >> y;x %= p;for(int i = 25; i >= 0; i--){if((1 << i) <= y) x = fa[x][i],y -= (1<<i);}cout << x << endl;}return 0;
}
http://www.lryc.cn/news/215128.html

相关文章:

  • 手写数字识别--神经网络实验
  • 双11消费遇冷?如何让消费回归心智原点
  • 一分钟了解:什么是Image Matting?
  • 微信小程序 跳转客服页面
  • 10个简单增删改查的免费Spring Boot源代码项目
  • mysql数据表设计
  • pytorch复现4_Resnet
  • 【数据库】形式化关系查询语言(一):关系代数Relational Algebra:基本运算、附加关系代数、扩展的关系代数
  • 【计算机网络】计算机网络和因特网
  • JAVA面经整理(9)
  • IPD(集成产品开发)模式下的产品研发流程
  • Flutter GetX的使用
  • 【Amazon】AWS实战 | 快速发布安全传输的静态页面
  • 前后端登录的密码加密和解密
  • 使用 Curl 和 DomCrawler 下载抖音视频链接并存储到指定文件夹
  • 取消Excel打开密码的两种方法
  • 多测师肖sir_高级金牌讲师_jmeter 反向代理录制脚本
  • 网络取证-Tomcat-简单
  • 3.Linux常用操作(传输、crontab定时、匹配日期删除文件等)
  • ChatGPT对未来发展的影响?一般什么时候用到GPT
  • 在Win10系统进行MySQL的安装、连接、卸载
  • Windows下pm2调用npm和nuxt的办法
  • 本地仓库转为git仓库推送到gitee
  • CSS以及JavaScript
  • JVM——类的生命周期(加载阶段,连接阶段,初始化阶段)
  • CSS中实现元素居中的几种方法总结
  • 保护听力戴什么耳机比较好?开放式耳机能保护听力吗?
  • 【JVM】垃圾回收机制
  • MySQL数据库入门到精通——运维篇(2)
  • 投资者如何保障个人利益?行业律师与欧科云链专家给出建议