卡特兰数&&prufer序列&&BSGS水题集
首先说一下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水题集的更多相关文章
- 「刷题」卡特兰数&prufer序列
1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可 ...
- 洛谷 p1044 栈 【Catalan(卡特兰数)】【经典题】
题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p ...
- 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)
题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数 ...
- 【省选水题集Day1】一起来AK水题吧! 题目(更新到B)
题解:http://www.cnblogs.com/ljc20020730/p/6937954.html 水题A: [AHOI2001]质数和分解 题目网址: https://www.luogu.or ...
- 数的划分(NOIP2001&水题测试2017082401)
题目链接:数的划分 这题直接搜索就行了.给代码,思路没什么好讲的,要讲的放在代码后面: #include<bits/stdc++.h> using namespace std; int d ...
- 咸鱼的ACM之路:DFS水题集
DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...
- DP入门水题集
HDU 1087 Input contains multiple test cases. Each test case is described in a line as follow:N value ...
- 【题解】【合并序列(水题)P1628】
原题链接 这道题目如果连字符串的基本操作都没学建议不要做. 学了的很简单就可以切,所以感觉没什么难度- 主要讲一下在AC基础上的优化(可能算不上剪枝) 很明显,这道题我们要找的是前缀,那么在字符串数组 ...
- java水题集
POJ - 1220 进制转换 import java.io.*; import java.util.*; import java.math.*; public class Main { public ...
随机推荐
- Windows10搭建开发环境----MySQL8.0.17安装
Windows10 MySQL8解压版最新最全图文安装配置 一.官网下载解压版安装包 MySQL官网 1. 进入官网点击downloads,如图: 2. 翻到网页底部,点击如图位置: 3. 点击MyS ...
- 实战SpringCloud响应式微服务系列教程(第七章)
本章节继续介绍:Flux和Mono操作符(二) 1.条件操作符 Reactor中常用的条件操作符有defaultIfRmpty.skipUntil.skipWhile.takeUntil和takeWh ...
- spring5 源码深度解析----- 事务增强器(100%理解事务)
上一篇文章我们讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,实际上也就是用了AOP那一套,也讲解了Advisor,pointcut验 ...
- k8s中负载均衡器【ingress-nginx】部署
在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供了以下几种方案: Node ...
- ES6 —— entries(),keys()和values()
ES6 提供三个新的方法 —— entries(),keys()和values() —— 用于遍历数组.它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的 ...
- 直线扫描转换-DDA算法
直线扫描转换-DDA算法 直线段的扫描转换算法 已知两个点,求直线. 为了在光栅显示器上用这些离散的像素点逼近这条直线,需要知道这些像素点的x,y坐标. 求出过P0,P1的直线段方程: y=kx+b ...
- Java之微信公众号开发
这次以文本回复作为案例来讲解Java相关得微信公众号开发. 首先必须要有一个个人微信公众号 个人微信公众号相关的接口权限有限,不过用于个人学习体验一下足够了,如图: 然后进入微信公众后台,点击基本配置 ...
- 微信小程序路由跳转
微信小程序路由跳转 1.wx.switchTab(Object object) 这里的tabBar是底下的导航栏指定的页面, 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 参数 O ...
- (已解决)STM32L151使用串口发送数据第一字节为FE问题!
最近学习到串口发送数据时遇到一个问题:第一个字节总是FE,后面才是对的数据. 最终解决的方法是: 讲GPIO复用的操作放到GPIO配置之前! 体现在代码中就是: //打开GPIO时钟 RCC_AHBP ...
- java集合之linkedList链表基础
LinkedList链表: List接口的链接列表实现.允许存储所有元素(包含null).使用频繁增删元素. linkedList方法: void addFirst(E e) 指定元素插入列表的开头 ...