无聊的计算姬

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]的更多相关文章

  1. bzoj4766 文艺计算姬

    Description "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞.普通计算机能计算一个带标号完全图的生成树个数, ...

  2. bzoj 4765: 普通计算姬

    Description "奋战三星期,造台计算机".小G响应号召,花了三小时造了台普通计算姬.普通计算姬比普通计算机要厉害一些 .普通计算机能计算数列区间和,而普通计算姬能计算树中 ...

  3. BZOJ_4765_普通计算姬_分块+dfs序+树状数组

    BZOJ_4765_普通计算姬_分块 Description "奋战三星期,造台计算机".小G响应号召,花了三小时造了台普通计算姬.普通计算姬比普通计算机要厉害一些 .普通计算机能 ...

  4. BZOJ 4765 普通计算姬 (分块 + BIT)

    4765: 普通计算姬 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 1547  Solved: 329[Submit][Status][Discus ...

  5. BZOJ4766:文艺计算姬(矩阵树定理)

    Description "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数 ...

  6. 2018.06.30 BZOJ4765: 普通计算姬(dfs序+分块+树状数组)

    4765: 普通计算姬 Time Limit: 30 Sec Memory Limit: 256 MB Description "奋战三星期,造台计算机".小G响应号召,花了三小时 ...

  7. 【BZOJ】4766: 文艺计算姬

    [题目]给定两边节点数为n和m的完全二分图,求生成树数取模给定的p.n,m,p<=10^18. [算法]生成树计数(矩阵树定理) [题解]参考自 [bzoj4766]文艺计算姬 by WerKe ...

  8. bzoj 4766: 文艺计算姬 -- 快速乘

    4766: 文艺计算姬 Time Limit: 1 Sec  Memory Limit: 128 MB Description "奋战三星期,造台计算机".小W响应号召,花了三星期 ...

  9. BZOJ4765: 普通计算姬

    BZOJ4765: 普通计算姬 题目描述 传送门 题目分析 求的和非常奇怪,不具有连续性,所有上树的数据结构全死了. 考虑分块,思考对于一段连续的询问区间可以直接询问整块,零散块可以在树上dfs序暴力 ...

随机推荐

  1. 30分钟 带你浅入requirejs源码

    因为最近项目想现实一个单页功能,用的是react ,然后看了一下react route,挖槽 gzip后16k? 然后我简单写了一个纯单页(不支持多页的单页,所有入口都经过rewrite跑到index ...

  2. LeetCode - 67. Add Binary(4ms)

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  3. 机器学习 (一) 单变量线性回归 Linear Regression with One Variable

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang的个人笔 ...

  4. MAC下Python3.5安装问题

    mac中自动集成了python2.7,但是作为程序员总是希望用最新的版本, 刚才安装python3.5后,python -V,依然提示是,2.7: 然后在 .bash_profile后面找到pytho ...

  5. [Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询

    以字段为中心的查询(Field-centric Queries) 上述提到的三个问题都来源于most_fields是以字段为中心(Field-centric),而不是以词条为中心(Term-centr ...

  6. Angular 2018 All in One

    Angular 2018 https://cli.angular.io/ v7.0.6 https://angular.io/ https://angular.cn/ v7.0.4 $ npm i - ...

  7. 安装和配置hadoop集群步骤

    hadoop集群的安装步骤和配置 hadoop是由java语言编写的,首先我们肯定要在电脑中安装jdk,配置好jdk的环境,接下来就是安装hadoop集群的步骤了,在安装之前需要创建hadoop用户组 ...

  8. C#中多态

    我的理解是:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态. 1: OverRide 实现多态 public class Animal { public virtual void ...

  9. Lua学习笔记:面向对象

    Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...

  10. 【题解】SDOI2014旅行

    洛谷P3313 大概是一道树链剖分的裸题.可以看出如果不是查询相同宗教的这一点,就和普通的树链剖分毫无两样了.所以针对每一个宗教都单独开一棵线段树,变成单点修改+区间查询.只不过宗教数目很多,空间消耗 ...