【bzoj2242】【SDOI2011】计算器
来源:互联网 发布:python黑客教程 编辑:程序博客网 时间:2024/05/29 09:49
= =这道三合一的水题,第一问快速幂,第二问exgcd,第三问BSGS,然后代码很容易写,其实也蛮长的QAQ
#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<map>#include<cmath>using namespace std;typedef long long ll;ll p;map<ll,ll>hs;inline ll fpow(ll a,ll b){ ll ans=1; for (;b;b>>=1,a=a*a%p) if (b&1)ans=ans*a%p; return ans;}inline ll exgcd(ll a,ll b,ll &x,ll &y){ if (b==0) { x=1; y=0; return a; } int q=exgcd(b,a%b,x,y); int tmp=x; x=y; y=tmp-a/b*y; return q;}inline ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}void solve2(ll y,ll z){ ll q=gcd(y,p); if (z%q!=0){printf("Orz, I cannot find x!\n");return;} ll x,k; exgcd(y,p,x,k); x*=(z/q); q=y*p/q/y; x=((x%q)+q)%q; printf("%lld\n",x);}inline void bsgs(ll y,ll z){ if (y%p==0){printf("Orz, I cannot find x!\n");return;} int pd=0; hs.clear(); ll m,y_m,mul,now,ans; m=ceil(sqrt(p)); mul=1; hs[mul*z%p]=0; for (int i=1;i<=m;i++) { mul=mul*y%p; now=mul*z%p; hs[now]=i; } y_m=fpow(y,m); mul=1; for (int i=1;i<=m;i++) { mul=mul*y_m%p; if (hs[mul]) { pd=1; ans=m*i-hs[mul]; printf("%lld\n",ans); break; } } if (!pd){printf("Orz, I cannot find x!\n");}}int main(){// freopen("std.out","w",stdout); int n,k; cin>>n>>k; if (k==1) { while (n--) { ll y,z; scanf("%lld%lld%lld",&y,&z,&p); printf("%lld\n",fpow(y,z)); } } else if (k==2) { while(n--) { ll y,z; scanf("%lld%lld%lld",&y,&z,&p); solve2(y,z); } } else { while(n--) { ll y,z; scanf("%lld%lld%lld",&y,&z,&p); bsgs(y,z); } } return 0;}
0 0
- bzoj2242【sdoi2011】计算器
- [BZOJ2242][SDOI2011]计算器
- [bzoj2242][SDOI2011]计算器
- Bzoj2242:[SDOI2011]计算器:BSGS
- [bzoj2242][SDOI2011]计算器
- 【SDOI2011】【BZOJ2242】计算器
- BZOJ2242 [SDOI2011]计算器
- bzoj2242 [SDOI2011]计算器
- 【BZOJ2242】[SDOI2011]计算器
- 【bzoj2242】【SDOI2011】计算器
- BZOJ2242 SDOI2011 计算器
- BZOJ2242 [SDOI2011]计算器 【BSGS】
- BZOJ2242 [SDOI2011]计算器 题解&代码
- bzoj2242 : [SDOI2011]计算器 [BSGS算法]
- 【bzoj2242】[SDOI2011]计算器 快速幂+exgcd+BSGS
- 【bzoj2242】[SDOI2011]计算器 快速幂+BSGS
- [BZOJ2242][SDOI2011][BSGS][拓展欧几里得]计算器
- bzoj2242 [SDOI2011]计算器(KSM+扩欧+bsgs)
- 初中OJ1599. 【GDKOI2004】香樟树
- 说说程序员不解风情的瞬间
- java编程思想2
- IO流_字符流复制文本文件案例3
- 2017年规划
- 【bzoj2242】【SDOI2011】计算器
- AtCoder Grand Contest 010 B - Boxes 验证解的存在性 2017/2/6
- 什么是双绞线
- 51NOD 1682 中位数计数
- 理解 Java 的 GC 与 幽灵引用
- HTML5 & CSS3初学者指南(4) – Canvas使用
- framebuffer之s3cfb_probe分析
- Total Order Partitioner
- rsync 命令详解