无聊的计算姬

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. 【数据库】 SQLite 语法

    [数据库] SQLite 语法 一 . 创建数据库 1. 只需创建数据库,只需创建文件,操作时将连接字符串指向该文件即可 2. 连接字符串 : data source = FilePath; 不能加密 ...

  2. 关于相对布局RelativeLayout的各种属性介绍

    RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西. 相 ...

  3. 类和实例属性的查找顺序 mro查找

    如果多个类继承父类,然后又被多个类继承这种复杂的问题,可以使用 mro方法 例如: class A: pass class C(D): pass class B(D): pass class A(B, ...

  4. 【转】ASP.NET Core 快速入门(环境篇)

    原文链接:http://www.cnblogs.com/zhaopei/p/netcore.html [申明]:本人.NET Core小白.Linux小白.MySql小白.nginx小白.而今天要说是 ...

  5. CSS属性,可以完成99%的页面编写

    border:    border:4px dotted red;            宽度 样式 颜色 solid(实线)    border-style:        -none:       ...

  6. 剑指offer-变态跳台阶09

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution: def jumpFloorII(self, n ...

  7. C++ XML文件解析

    使用tinyxml2库,git地址https://github.com/leethomason/tinyxml2 只需要使用tinyxml2.h tinyxml2.cpp即可,同时需要using na ...

  8. 【WebService】——CXF整合Spring

    相关博客: [WebService]--入门实例 [WebService]--SOAP.WSDL和UDDI 前言: 之前的几篇博客基本上都是使用jdk来实现WebService的调用,没有使用任何框架 ...

  9. Resources for Browser/Webkit/GPU

    Tali Garsiel's site: http://taligarsiel.com/ Webkit Main Flow Chromium Project: http://www.chromium. ...

  10. 好用的在线pdf转化器

    https://smallpdf.com/cn/compress-pdf