【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序暴力 ...
随机推荐
- 关于==和equals()方法&Java中string与char如何转换&String,StringBuffer
1.对于基本数据类型,可以直接使用==和!=进行内容比较 如:int x=30; int y=30; x==y; //true 基本数据类型 简单类型(基本类型) bo ...
- javascript 自定义发布与订阅
//声明一个类,与普通的类的声明不一样, function Girl() { //将类的事件声明成一个私有的属性,里面是一个对象 this._events = {} } /* { "失恋&q ...
- Linux用户态程序计时方式详解[转]
转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确 ...
- spring多个定时任务quartz配置
spring多个定时任务quartz配置 <?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.spring ...
- ASP NET Core ---POST, PUT, PATCH, DELETE,Model 验证
参照 草根专栏- ASP.NET Core + Ng6 实战:https://v.qq.com/x/page/u0765jbwc6f.html 一.POST 安全性和幂等性 安全性是指方法执行后并不会 ...
- [OpenCV]DMatch类和KeyPoints类:特征点匹配
DMatch struct CV_EXPORTS_W_SIMPLE DMatch { CV_WRAP DMatch() : queryIdx(-), trainIdx(-), imgIdx(-), d ...
- python基础训练营01
一.基础讲解: 1.1 文件末尾的.py后缀,指出这个文件,是一个python文件,因此,系统将使用python解释器来运行该文件,确定文件中每一个单词的含义. 1.2 python编辑/运行方法: ...
- spring mvc:实现给Controller函数传入list<pojo>参数
[1]前端js调用示例: ...insertStatisData?statisDatas=[{'cid':'2','devId':'9003','deviceName':'测试名','endTime' ...
- 指针C语言
一.PTA实验作业 题目一:6-7输出月份英文名 1.PTA提交列表 2.设计思路和流程图 这题只需补充子函数,定义指针数组month[12],分别从一月到十二月,再定义一个字符,让它为NULL,当输 ...
- lintcode-133-最长单词
133-最长单词 给一个词典,找出其中所有最长的单词. 样例 在词典 { "dog", "google", "facebook", &quo ...