LOJ 10214 计算器 题解
k==1时,快速幂就好了;
k==2时,exgcd就好了,但要注意取模范围的控制;
k==3时,BSGS可以解决高次同余方程:
然后就可以开心的A掉了,但要注意特殊情况的特判
- #include <bits/stdc++.h>
- using namespace std;
- long long KSM(long long a,long long b,long long p)
- {
- long long res=;
- while(b){
- if(b&) res=res*a%p;
- a=a*a%p;
- b/=;
- }
- return res%p;
- }
- void solve1(int t)
- {
- while(t--){
- long long y,z,p;
- cin>>y>>z>>p;
- printf("%lld\n",KSM(y,z,p)%p);
- }
- }
- long long d;
- void exgcd(long long a,long long b,long long &x,long long &y)
- {
- if(b==){
- x=;
- y=;
- d=a;
- return;
- }
- exgcd(b,a%b,y,x);
- y-=(a/b)*x;
- }
- void solve2(int t)
- {
- while(t--){
- long long y,z,p;
- cin>>y>>z>>p;
- long long ha,la;
- exgcd(y,p,ha,la);
- if(z%d!=){
- cout<<"Orz, I cannot find x!"<<endl;
- }
- else{
- cout<<(((z*ha/d)%p+p)%p+p)%p<<endl;
- }
- }
- }
- void BSGS(long long a,long long ans,long long p)
- {
- map<long long ,long long> Myhash;
- ans%=p;
- int tmp=sqrt(p)+;
- for(int i=;i<tmp;i++){
- Myhash[(ans*KSM(a,i,p))%p]=i;
- }
- a=KSM(a,tmp,p)%p;
- if(a==&&ans==){
- cout<<""<<endl;
- return;
- }
- if(a==&&ans!=){
- cout<<"Orz, I cannot find x!"<<endl;
- return;
- }
- for(int i=;i<=tmp;i++){
- if(Myhash.find(KSM(a,i,p))!=Myhash.end()&&(i*tmp-Myhash[KSM(a,i,p)]>=)){
- cout<<i*tmp-Myhash[KSM(a,i,p)]<<endl;
- return;
- }
- }
- cout<<"Orz, I cannot find x!"<<endl;
- }
- void solve3(int t)
- {
- while(t--){
- long long y,z,p;
- cin>>y>>z>>p;
- BSGS(y,z,p);
- }
- }
- int main()
- {
- int t,k;
- cin>>t>>k;
- if(k==){
- solve1(t);
- }
- else if(k==){
- solve2(t);
- }
- else solve3(t);
- }
LOJ 10214 计算器 题解的更多相关文章
- LOJ 一本通一句话题解系列:
第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...
- BZOJ2242:[SDOI2011]计算器——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2242 https://www.luogu.org/problemnew/show/P2485 你被 ...
- LOJ P10249 weight 题解
每日一题 day58 打卡 Analysis 这道题搜索的想法非常巧妙,从两端向中间找,这样可以保证仅仅对于head或tail而言,需要用到的前缀和与后缀和是单调递增的,这样排个序就解决了. 值得一提 ...
- LOJ P10013 曲线 题解
每日一题 day38 打卡 Analysis 这道题运用的是三分,就是说具有一定的单调性,找最大最小值,然后和二分基本类似,就是说特性就是说当前两个点比较,较优的点和最优点在相对了较差点的同侧,就是说 ...
- LOJ P10002 喷水装置 题解
每日一题 day35 打卡 Analysis 先将不符合条件的区间去掉(即半径小于W,不然宽度无法符合),将符合条件的按区间存入节点中.区间的左边界是x-sqrt(r*r-W*W/4.0),要计算x轴 ...
- LOJ P10016 灯泡 题解
每日一题 day50 打卡 Analysis 用初中学的相似推一波式子,再用三分一搞就好了. #include<iostream> #include<cstdio> #incl ...
- LOJ P10015 扩散 题解
每日一题 day49 打卡 Analysis 用dis数组记录每两个点之间的时间,再用一个传递闭包来维护最小的时间就好了 #include<iostream> #include<cs ...
- 【网络流24题】最长k可重线段集(费用流)
[网络流24题]最长k可重线段集(费用流) 题面 Cogs的数据有问题 Loj 洛谷 题解 这道题和最长k可重区间集没有区别 只不过费用额外计算一下 但是,还是有一点要注意的地方 这里可以是一条垂直的 ...
- 【网络流24题】最长k可重区间集(费用流)
[网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...
随机推荐
- Vue组件使用
一.组件概念 有html模板,有css样式,有js逻辑的集合体 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的 ...
- fastdfs 中client.conf 文件
# connect timeout in seconds# default value is 30sconnect_timeout=30 连接超时 # network tim ...
- 二分mid的取法
二分的两种形式: 1.范围缩小时,r = mid,l = mid + 1,取中间值时,mid = (l + r) >> 1. 2.范围缩小时,l = mid,r = mid - 1,取中间 ...
- 17.Python print()函数高级用法
前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能. print() 函数的详细语法格式如下: print (val ...
- [CSP-S模拟测试]:迷宫(最短路)
题目传送门(内部题123) 输入格式 输入文件的第一行为四个正整数$n,m,k,d$. 接下来$m$行,每行三个整数$u,v,w$,描述一条无向道路. 输入文件最后一行包含$k$个整数,为$p_0,p ...
- Alpha发布--美工+文案
此作业对应要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8677 一.美工: 1.产品logo 2.原型页面展示 2.1 进入萌 ...
- div随窗口变化设置高度
window.onscroll = function () { sc(); }; window.onresize = function () { sc(); }; window.onload = fu ...
- 怎么理解一个规模大且结构复杂的c工程源码
很久以前,当要着手一个规模很大,结构复杂的c工程源码时,总是感觉无从下手.这个时候,一般google一下”XX源码分析“.当这个源码是很广泛使用的时,这样到也能得到不少启发:很不幸,经常要接触一些很少 ...
- Spring配置多个数据源,并实现数据源的动态切换转载)
1.首先在config.properties文件中配置两个数据库连接的基本数据.这个省略了 2.在spring配置文件中配置这两个数据源: 数据源1 <!-- initialSize初始化时建立 ...
- kotlin之数组
一.使用arrayOf函数定义可以存储任意值的数组 var arr1 = arrayOf(1,2,3,'a') println(arr1[3]) 二.使用arrayOfNulls函数定义数组 var ...