首先说一下BSGS的一个坑点:

解方程A^x≡B(mod p)

需要特判一个东西=>A%p==B%p==0?

如果相等的话puts("1")反之则无解。

因为如果A%p=0,那么无法移项,导致BSGS算法的错误

进入正题:

一   卡特拉数(C(2*n,n)/(n+1))用于处理01序列里任意位置0的个数>1的情况。。

但知道定义没用,重要的是打表找规律。

善于用next_permutation,搜索等工具找出前几项。

记住卡特兰数的前几项:1 2 5 14 42 132 429。(反正也只能求出这几项)

至于求法,先化到最简,取模可以用lucas,不取模的高精。

喜欢高精除的畜生就打高精除,不喜欢的就分解质因数,数据小的也可以O(n^2)枚举。

贴一下分解质因数的代码:

 #include<cstdio>
#include<iostream>
using namespace std;
#define MAXN 4000005
int prime[MAXN],tot,n,frpr[MAXN],fenzi[MAXN],tot1;
void pre()
{
for(int i=;i<=*n;i++)
{
if(!frpr[i])
{
frpr[i]=i;
prime[++tot]=i;
}
for(int j=;j<=tot;j++)
{
if(prime[j]*i>*n)break;
frpr[prime[j]*i]=prime[j];
if(!(i%prime[j]))break;
}
}
return ;
}
void Get_pr(int x,int opt)
{
while(x!=)
{
if(opt==)fenzi[frpr[x]]++;
else fenzi[frpr[x]]--;
x/=frpr[x];
}
return ;
}
int main()
{
int p,ans=;
scanf("%d%d",&n,&p);
pre();
for(int i=n+;i<=*n;i++)Get_pr(i,);
for(int i=;i<=n;i++)Get_pr(i,);
for(int i=;i<=tot;i++)
{
while(fenzi[prime[i]]>)
{
ans=1ll*ans*prime[i]%p;
fenzi[prime[i]]--;
}
}
cout<<ans<<endl;
return ;
}

二  prufer序列

用n-2个点表示n个节点的有标号树,可以证明prufer序列和对应的树都是唯一确定的。

由此可以得到一些推论:

1. n个点构成的无根树的个数:n^(n-2)

2. 确定n个点度数分别为d1,d2…时无根树个数: (n-2)!/((d1-1)!*(d2-1)!*…)

3.  n个点的有标号有根树的个数: n*n^(n-2)=n^(n-1)

4. 所有节点的度之和为n*2-2

除了统计树的个数,别的。。。就没啥了(听说还能优化暴力枚举)

三 BSGS

模板:

 void insert(int x,int d)
{
int k=x%mod;
val[++cnt]=x;nxt[cnt]=head[k];id[cnt]=d;head[k]=cnt;
}
int find(int x)
{
int k=x%mod;
for(int i=head[k];i;i=nxt[i])
if(val[i]==x)return id[i];
return -;
}
int BSGS()
{
int m=ceil(sqrt(p*1.0)),bs=;
int now=;insert(B%p,);//insert A^j*B
if(B==)return ;
for(int i=;i<m;i++)
{
now=1ll*now*A%p;
insert(1ll*now*B%p,i);
}
now=1ll*now*A%p;
for(int i=m;;i+=m)
{
bs=1ll*bs*now%p;
int x=find(bs);
if(x!=-)return i-x;
if(i>p)break;
}
return -;
}

除了上面提到的坑点,还有就是根据题意啦

卡特兰数&&prufer序列&&BSGS水题集的更多相关文章

  1. 「刷题」卡特兰数&prufer序列

    1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可 ...

  2. 洛谷 p1044 栈 【Catalan(卡特兰数)】【经典题】

    题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p ...

  3. 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)

    题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数 ...

  4. 【省选水题集Day1】一起来AK水题吧! 题目(更新到B)

    题解:http://www.cnblogs.com/ljc20020730/p/6937954.html 水题A: [AHOI2001]质数和分解 题目网址: https://www.luogu.or ...

  5. 数的划分(NOIP2001&水题测试2017082401)

    题目链接:数的划分 这题直接搜索就行了.给代码,思路没什么好讲的,要讲的放在代码后面: #include<bits/stdc++.h> using namespace std; int d ...

  6. 咸鱼的ACM之路:DFS水题集

    DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...

  7. DP入门水题集

    HDU 1087 Input contains multiple test cases. Each test case is described in a line as follow:N value ...

  8. 【题解】【合并序列(水题)P1628】

    原题链接 这道题目如果连字符串的基本操作都没学建议不要做. 学了的很简单就可以切,所以感觉没什么难度- 主要讲一下在AC基础上的优化(可能算不上剪枝) 很明显,这道题我们要找的是前缀,那么在字符串数组 ...

  9. java水题集

    POJ - 1220 进制转换 import java.io.*; import java.util.*; import java.math.*; public class Main { public ...

随机推荐

  1. ef core实现无感知软删除

    很多web程序一般的偶不会设计真的物理删除了. 基本上都是在在数据库加一个标记,就得当作已经删除了.同时在查询的时候,过滤已经标记删除的数据 ef core实现软删除是非常简单的,直接在OnModel ...

  2. .NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?

    前言 获取UnionID是开发微信公众号/小程序中很有必要的一个环节,特别是针对一个公司拥有多个公众号小程序而推出的机制,实现打通账户一体化,用UnionID来区分多平台的唯一性. 官方的解释:如果开 ...

  3. Python_三元运算与lambda表达式

    [是什么] 三元运算是if...else...的简化版,lambda表达式是函数的简化版 三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1> ...

  4. Python3_基础

    目录 数据类型 变量 数据类型的转换 算术操作符 输入 字符串常用方法 数据类型 我们先来看看三种常见的数据类型 字符串 str 在Python中,字符串一般都用引号引起来,不管是用单引号还是双引号都 ...

  5. win server 2008R2 安装telnet 在VM虚拟机中

    服务器端: 第一步:  安装telnet 先固定,ip地址,因为虚拟机之间通信需要同网段,所以先固定ip, 第二步: 服务管理器>功能>添加功能 >服务器上安装服务器端telnet ...

  6. opencv::模糊图像2

    中值滤波 统计排序滤波器 中值对椒盐噪声有很好的抑制作用 medianBlur(Mat src, Mat dest, ksize) 双边滤波 均值模糊无法克服边缘像素信息丢失缺陷.原因是均值滤波是基于 ...

  7. LeetCode初级算法--动态规划01:爬楼梯

    LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  8. jmeter-控制业务比例

    方式一: 多线程组 缺点:由于各事务相应时间一般不一致,故只能粗略的控制业务占比 实例:待补充

  9. 在Python中,输出格式:%d , %6d , %-6d, %06d , %.6f的一些区分

    和C/C++编程语言一样 %d 普通的整数输出 i = 1 sum = 0 while i <= 100: sum += i i += 1 print("1到100的和为:%d&quo ...

  10. java23种设计模式(三)单例模式

    原文地址:https://zhuanlan.zhihu.com/p/23713957 一.概述 1.什么是单例模式? 百度百科是这样定义的:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个 ...