[SDOI 2011]计算器
Description
Input
输入包含多组数据。
Output
Sample Input
3 1
2 1 3
2 2 3
2 3 3
【样例输入2】
3 2
2 1 3
2 2 3
2 3 3
Sample Output
【样例输出1】
2
1
2
【样例输出2】
2
1
0
Hint
【数据规模和约定】
对于100%的数据,1<=y,z,p<=10^9,为质数,1<=T<=10。
题解
数论三合一。
第一问,快速幂。
第二问,扩欧求特解。
第三问,BSGS。
- //It is made by Awson on 2018.1.16
- #include <set>
- #include <map>
- #include <cmath>
- #include <ctime>
- #include <queue>
- #include <stack>
- #include <cstdio>
- #include <string>
- #include <vector>
- #include <cstdlib>
- #include <cstring>
- #include <iostream>
- #include <algorithm>
- #define LL long long
- #define Abs(a) ((a) < 0 ? (-(a)) : (a))
- #define Max(a, b) ((a) > (b) ? (a) : (b))
- #define Min(a, b) ((a) < (b) ? (a) : (b))
- #define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
- using namespace std;
- const LL MOD = ;
- void read(LL &x) {
- char ch; bool flag = ;
- for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || ); ch = getchar());
- for (x = ; isdigit(ch); x = (x<<)+(x<<)+ch-, ch = getchar());
- x *= -*flag;
- }
- void write(LL x) {
- if (x > ) write(x/);
- putchar(x%+);
- }
- LL t, l, a, b, c;
- map<LL, int>mp;
- LL exgcd(LL a, LL b, LL &x, LL &y) {
- if (b == ) {x = , y = ; return a; }
- LL d = exgcd(b, a%b, x, y), t = x;
- x = y, y = t-a/b*y;
- return d;
- }
- LL quick_pow(LL a, LL b, LL c) {
- LL ans = ;
- while (b) {
- if (b&) ans = ans*a%c;
- a = a*a%c, b >>= ;
- }
- return ans;
- }
- LL BSGS(LL a, LL b, LL c) {
- if (b == ) return ;
- if (a == && b != ) return -;
- mp.clear();
- LL tim = ceil(sqrt(c)), tmp = b%c;
- for (int i = ; i <= tim; i++) {
- mp[tmp] = i, tmp = tmp*a%c;
- }
- LL t = tmp = quick_pow(a, tim, c);
- for (int i = ; i <= tim; i++) {
- if (mp.count(tmp)) return tim*i-mp[tmp];
- tmp = tmp*t%c;
- }
- return -;
- }
- void work() {
- read(t), read(l);
- while (t--) {
- read(a), read(b), read(c);
- if (l == ) write(quick_pow(a, b, c)), putchar('\n');
- else if (l == ) {
- LL x, y; LL d = exgcd(a, c, x, y);
- if (b%d) printf("Orz, I cannot find x!\n");
- else {x = x*b/d, d = c/d; write((x%d+d)%d), putchar('\n'); }
- }else {
- LL ans = BSGS(a%c, b%c, c);
- if (ans == -) printf("Orz, I cannot find x!\n");
- else write(ans), putchar('\n');
- }
- }
- }
- int main() {
- work();
- return ;
- }
[SDOI 2011]计算器的更多相关文章
- [BZOJ 2242] [SDOI 2011] 计算器
Description 你被要求设计一个计算器完成以下三项任务: 给定 \(y,z,p\),计算 \(y^z \bmod p\) 的值: 给定 \(y,z,p\),计算满足 \(xy≡ z \pmod ...
- 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...
- [BZOJ 2243] [SDOI 2011] 染色 【树链剖分】
题目链接:BZOJ - 2243 题目分析 树链剖分...写了200+行...Debug了整整一天+... 静态读代码读了 5 遍 ,没发现错误,自己做小数据也过了. 提交之后全 WA . ————— ...
- BZOJ 2243 SDOI 2011染色
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2243 算法讨论: 树链剖分把树放到线段树上.然后线段树的每个节点要维护的东西有左端点的颜色 ...
- [bzoj2286][Sdoi 2011]消耗战
[bzoj2286]消耗战 标签: 虚树 DP 题目链接 题解 很容易找出\(O(mn)\)的做法. 只需要每次都dp一遍. 但是m和n是同阶的,所以这样肯定会T的. 注意到dp的时候有很多节点是不需 ...
- [SDOI 2011]黑白棋
Description 题库链接 给出一个 \(1\times n\) 的棋盘,棋盘上有 \(k\) 个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 \( ...
- [SDOI 2011]染色
Description 题库链接 给定一棵有 \(n\) 个节点的无根树和 \(m\) 个操作,操作有 \(2\) 类: 将节点 \(a\) 到节点 \(b\) 路径上所有点都染成颜色 \(c\) : ...
- [SDOI 2011]消耗战
Description 题库链接 给你一棵 \(n\) 个节点根节点为 \(1\) 的有根树,有边权. \(m\) 次询问,每次给出 \(k_i\) 个关键点.询问切断一些边,使这些点到根节点不连通, ...
- [BZOJ 2285] [SDOI 2011] 保密
Description 传送门 Solution 这道题的最大难点在于读懂题意(雾 分数规划求出 \(n\) 到 \(1\cdots n_1\) 每个点的最小 \(\sum\frac{t_i}{s_i ...
随机推荐
- Maven学习笔记二
依赖范围 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api&l ...
- alpha-咸鱼冲刺day9-紫仪
总汇链接 一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 大概差不多了.不过提交似乎又出了问题正在修改ing 四,问题困难 页面整合啥的凑合一下.因为后面跟着学长速成的PH ...
- 201621123060《JAVA程序设计》第二周学习总结
1.本周学习总结 本周学习了JAVA中的引用类.包装类(学习了一种语法:自动装箱)和数组(遍历数组的新方法foreach循环). 2. 书面作业 1.String-使用Eclipse关联jdk源代码 ...
- 服务器数据恢复_服务器xfs数据丢失数据恢复
简介:太原一家公司的服务器出现故障,服务器是linux服务器,连接了一台某型号的存储,文件系统为xfs文件系统.管理员使用xfs_repair工具试图对文件系统进行修复但修复失败,linux服务器中所 ...
- raid5 阵列硬盘离线数据恢复成功案例
数据恢复故障描述: 某研究院 DELL 磁盘阵列崩溃,内置15块1TB硬盘搭建的RAID5阵列.一开始有一块硬盘离线,在更换新硬盘进行同步的过程中,第二块磁盘指示灯报警,同步失败,阵列无法正常工作. ...
- Entity Framework Core Code First
参考地址:https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/new-db
- windows 10下通过python3.6成功搭建jupyter 服务器
最近通过python学习爬虫技术,发现一个工具jupyter notebook很不错,该工具明显优势通过浏览器可以输入多行python代码,支持在线运行以及运行结果保存功能,在线验证python小模块 ...
- vue-入门
数据绑定 <!--步骤1:创建html文件--> <!DOCTYPE html> <html lang="en"> <head> ...
- 4-51单片机WIFI学习(开发板51单片机自动冷启动下载原理)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743936.html 这一篇说一下自己板子的51单片机自动冷启动下载原理,我挥舞着键盘和鼠标,发誓要把世界写个明 ...
- Docker学习笔记 - Docker的简介
传统硬件虚拟化:虚拟硬件,事先分配资源,在虚拟的硬件上安装操作系统,虚拟机启动起来以后资源就会被完全占用. 操作系统虚拟化:docker是操作系统虚拟化,借助操作系统内核特性(命名空间.cgroups ...