【Foreign】无聊的计算姬 [Lucas][BSGS]
无聊的计算姬
Time Limit: 10 Sec Memory Limit: 256 MB
Description

Input

Output

Sample Input
6
2 2 3 4
3 2 7 9
2 1 2 9
3 1 6 7
1 5 3 7
1 9 2 8
Sample Output
Math Error
3
Math Error
6
6
1
HINT

Solution
我们可以分步骗分。(Task1直接快速幂即可。)
对于前50分:
对于Task2,我们直接暴力枚举,出现一个重复的停止,判断是否存在即可,对于Task3,直接n^2递推组合数即可。
对于11~16的20分:
对于Task2,我们运用BSGS求解即可,对于Task3,直接上Lucas即可。
BearChild不会做满分,满分要运用exBSGS以及exLucas&&CRT。
Code
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<map>
using namespace std;
typedef long long s64; const int ONE = ; map <int,int> f; int T;
int type,y,z,MOD;
int Jc[ONE];
int C[][]; int get()
{
int res=,Q=; char c;
while( (c=getchar())< || c>)
if(c=='-')Q=-;
if(Q) res=c-;
while((c=getchar())>= && c<=)
res=res*+c-;
return res*Q;
} int Quickpow(int a,int b,int MOD)
{
int res=;
while(b)
{
if(b&) res=(s64)res*a%MOD;
a=(s64)a*a%MOD;
b>>=;
}
return res;
} namespace PC
{
int Make_C(int a,int b,int MOD)
{
C[][]=;
for(int i=;i<=a;i++)
{
C[i][]=;
for(int j=;j<=b;j++)
C[i][j] = (C[i-][j]+C[i-][j-]) % MOD;
}
return C[a][b];
} int C(int n,int m,int MOD)
{
int up = Jc[n];
int down = (s64)Jc[m] * Jc[n-m] % MOD;
return (s64)up * Quickpow(down,MOD-,MOD) % MOD;
} int Lucas(int n,int m,int MOD)
{
Jc[]=;
for(int i=;i<=MOD;i++) Jc[i] = (s64)Jc[i-] * i % MOD;
int res = ;
while(n && m)
{
res = (s64)res * C(n%MOD,m%MOD,MOD) % MOD;
n/=MOD; m/=MOD;
}
return res;
}
} namespace PB
{
int Make_min(int a,int b,int MOD)
{
int res=;
if(res==b) return ;
f.clear();
for(int i=;i<=;i++)
{
res = (s64)res * a % MOD;
if(f[res]) return -;
f[res] = ;
if(res==b) return i;
}
return -;
} int BSGS(int A,int B,int MOD)
{
if(A % MOD == ) return -;
int m = sqrt(MOD) + ;
f.clear();
int record = B % MOD;
for(int i=;i<=m;i++)
{
record = (s64) record * A % MOD;
f[record] = i;
} int A_m = Quickpow(A,m,MOD);
record = ;
for(int i=;i<=m;i++)
{
record = (s64)record * A_m % MOD;
if(f[record])
{
int x = (i * m %MOD- f[record]+MOD) %MOD;
return x;
}
}
return -;
}
} int main()
{
T=get();
while(T--)
{
type=get();
y=get(); z=get(); MOD=get();
if(type==) printf("%d\n",Quickpow(y,z,MOD));
if(type==)
{
if(z<= && y<=)
printf("%d\n",PC::Make_C(z,y,MOD));
else
printf("%d\n",PC::Lucas(z,y,MOD));
}
if(type==)
{
if(z<= && y<=)
{
int res=PB::Make_min(y,z,MOD);
if(res==-) printf("Math Error\n");
else printf("%d\n",res);
}
else
{
int res=PB::BSGS(y,z,MOD);
if(res==-) printf("Math Error\n");
else printf("%d\n",res);
}
}
}
}
【Foreign】无聊的计算姬 [Lucas][BSGS]的更多相关文章
- bzoj4766 文艺计算姬
Description "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞.普通计算机能计算一个带标号完全图的生成树个数, ...
- bzoj 4765: 普通计算姬
Description "奋战三星期,造台计算机".小G响应号召,花了三小时造了台普通计算姬.普通计算姬比普通计算机要厉害一些 .普通计算机能计算数列区间和,而普通计算姬能计算树中 ...
- BZOJ_4765_普通计算姬_分块+dfs序+树状数组
BZOJ_4765_普通计算姬_分块 Description "奋战三星期,造台计算机".小G响应号召,花了三小时造了台普通计算姬.普通计算姬比普通计算机要厉害一些 .普通计算机能 ...
- BZOJ 4765 普通计算姬 (分块 + BIT)
4765: 普通计算姬 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 1547 Solved: 329[Submit][Status][Discus ...
- BZOJ4766:文艺计算姬(矩阵树定理)
Description "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数 ...
- 2018.06.30 BZOJ4765: 普通计算姬(dfs序+分块+树状数组)
4765: 普通计算姬 Time Limit: 30 Sec Memory Limit: 256 MB Description "奋战三星期,造台计算机".小G响应号召,花了三小时 ...
- 【BZOJ】4766: 文艺计算姬
[题目]给定两边节点数为n和m的完全二分图,求生成树数取模给定的p.n,m,p<=10^18. [算法]生成树计数(矩阵树定理) [题解]参考自 [bzoj4766]文艺计算姬 by WerKe ...
- bzoj 4766: 文艺计算姬 -- 快速乘
4766: 文艺计算姬 Time Limit: 1 Sec Memory Limit: 128 MB Description "奋战三星期,造台计算机".小W响应号召,花了三星期 ...
- BZOJ4765: 普通计算姬
BZOJ4765: 普通计算姬 题目描述 传送门 题目分析 求的和非常奇怪,不具有连续性,所有上树的数据结构全死了. 考虑分块,思考对于一段连续的询问区间可以直接询问整块,零散块可以在树上dfs序暴力 ...
随机推荐
- [Effective Python] 用Pythonic方式来思考
Effective Python chap.1 用Pythonic方式来思考 Pythonic: 一门语言的编程习惯是由用户来确立的. 1. 确认自己所使用的Python版本 2. 遵循PEP8风格指 ...
- springmvc项目搭建四-基于前端框架完善页面的数据显示
上一篇把前端框架先放上去了,现在开始前后端进行交互,对数据进行显示. 效果如图所示...中间经历了数据显示不上去的问题,是对于spring的注解了解不够,问题及其解决可以参照上一篇问题处理... 目前 ...
- vue2.0中vue-router使用总结
#在vue-cli所创建的项目中使用 进入到项目的目录后使用 npm install vue-router --save 安装vue-router,同时保存在webpack.Json配置文件中,然 ...
- 玩lua
https://my.oschina.net/wangxuanyihaha/blog/186401
- windows curl 命令
windows 64 curl 命令的使用 https://blog.csdn.net/qq_27093465/article/details/53545693 curl命令可以通过命令行的方式,执行 ...
- WebSocket简单介绍(WebSocket 实战)(3)
这一节里我们用一个案例来演示怎么使用 WebSocket 构建一个实时的 Web 应用.这是一个简单的实时多人聊天系统,包括客户端和服务端的实现.客户端通过浏览器向聊天服务器发起请求,服务器端解析客户 ...
- Param指南
param name标签是在这个播放插件中嵌入的一些功能和播放参数: <param name="playcount" value="1"><! ...
- [洛谷P2210]Haywire
题目大意:有$n(n\leqslant12)$个数,每个数和其他三个数连边,求一个排列,使得边的长度最小 题解:状压$DP$,$f_{i,j}$表示当前确定的数状态为$i$,有$j$条边起点被确定终点 ...
- bzoj
准确率爆棚啊,然而
- JavaScript的相等(==)与全等(===)
有段代码如下: view source print? 1 if (![] == []) { 2 //Code 3 } ![] == [],true or false? 我们都知道,ECMA ...