卡特兰数&&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 ...
随机推荐
- 启动一个Activity的几种方式
在Android中我们可以通过下面两种方式来启动一个新的Activity,注意这里是怎么启动,而非 启动模式!!分为显示启动和隐式启动! 1. 显式启动:通过包名来启动,写法如下: ①最常见的: st ...
- ELK日志分析系统(4)-elasticsearch数据存储
1. 概述 logstash把格式化的数据发送到elasticsearch以后,elasticsearch负责存储搜索日志数据 elasticsearch的搜索接口还是很强大的,这边不详细展开,因为k ...
- 【TencentOS tiny】又有一个操作系统开源
新闻 2019年9月18日,腾讯宣布将开源 自主研发的轻量级物联网实时操作系统TencentOS tiny.相比市场上其它系统,腾讯TencentOS tiny在资源占用.设备成本.功耗管理以及安全稳 ...
- PCA 算法核心:高维度向量向低维度投影
Principal Component Analysis:主成分分析 步骤 5 步: 1.去平均值,也就是将向量中每一项都减去各自向量的平均值 2.计算矩阵的方差,协方差,特征值, 3,.把特征值从大 ...
- samba文件共享服务部署
1.安装samaba服务程序 yum install -y samba 2.查看smaba文件,由于注释空行较多,选择过滤 egrep -v "#|;|^$" /etc/samba ...
- 数据挖掘:python数据清洗cvs里面带中文字符
数据清洗,使用python数据清洗cvs里面带中文字符,意图是用字典对应中文字符,即key值是中文字符,value值是index,自增即可:利用字典数据结构没有重复key值的特性,把中文字符映射到了数 ...
- 从前端到全栈:JavaScript逆袭之路
JavaScript如何做到上天入地无所不能?JavaScript真的能一统江湖吗? 背景 近年来,前端技术日新月异,前端已经不仅仅是网页,更多的开始由狭义向广义发展. 先后涌现出了具备后端能力的no ...
- 高精度运算略解 在struct中重载运算符
高精度 高精度,即高精度算法,属于处理大数字的数学计算方法.在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字. 重载运算符 运算符重载,就是对已有的运算符重新进行 ...
- 给iOS中高级求职者的一份面试题解答
前段时间更新了一篇 给iOS中高级面试官的一份招聘要求 收到很多小伙伴的点赞与关注.可能有很多小伙伴已经带着我在那篇文章给大家提供的一些面试技巧 & 其中的面试题 已经开始招聘或者应聘了!这里 ...
- 如何在项目中使用Spring异步调用注解@Async
本文主要介绍如何使用Spring框架提供的异步调用注解@Async,异步线程池配置.异常捕获处理. 开启@Async注解支持 使用@Async注解的之前,必须在项目中启动时调用@EnableAsync ...