卡特兰数&&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 ...
随机推荐
- opencv之膨胀与腐蚀
腐蚀和膨胀 Erosion/Dilation erosion/dilation,用白话说,就是让图像亮的区域收缩和扩张. 原理 我们定义一个卷积核矩阵.这个矩阵可以是任何形状的,但通常而言,是矩形或者 ...
- 可能是把 ZooKeeper 概念讲的最清楚的一篇文章
转载自:https://github.com/Snailclimb/JavaGuide/blob/master/%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6/ZooKeep ...
- Java描述设计模式(15):责任链模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...
- 解决seajs ie8 对象不支持charAt 属性。
在使用 seajs做项目,今天偶然发现在ie9以下的ie版本会 报出 对象不支持charAt 属性.刚开始还以为是自己写的js部分出了问题,经过几个小时的奋战.最终找到了其根源.在sea-debug. ...
- [Luogu2973][USACO10HOL]赶小猪Driving Out the Piggi…
题目描述 The Cows have constructed a randomized stink bomb for the purpose of driving away the Piggies. ...
- Cocos2d-x 学习笔记(15.1) EventDispatcher
EventDispatcher对监听器进行管理,围绕着监听器工作.可以添加.删除.暂停/恢复监听器.分发事件到监听器. 1. 一些成员 /** 把ListenerID和同ID监听器的容器对应 */ s ...
- 利用phar实行php反序列化命令执行漏洞复现
利用phar实行php反序列化命令执行(测试环境复现) 前言 一般说到反序列化漏洞,第一反应都是unserialize()函数.然而安全研究员Sam Thomas分享了议题”It’s a PHP un ...
- 2.2 C语言_实现数据容器vector(排序功能)
上一节我们说到我们己经实现了一般Vector可以做到的自动扩充,告诉随机存取,那么现在我们需要完成vector的一个排序的功能. 排序算法我们网上一百度哇~~!很常见的就有8大排序算法: 1.选择排序 ...
- Leetcode(5)最长回文子串
Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定一个字符串 s,找到 s 中 最长 的回文子串.你可以假设 s 的最大长度为 1000.' 第一种方法:未完成:利用回文子串的特点 ...
- 巨杉Tech | SequoiaDB数据域及存储规划
1 背景近年来,企业的各项业务发展迅猛,客户数目不断增加,后台服务系统压力也越来越大,系统的各项硬件资源也变得非常紧张.因此,在技术风险可控的基础上,希望引入大数据技术,利用大数据技术优化现有IT系统 ...