卡特兰数&&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…
1.网格 转换模型,翻折容斥出解. 2.有趣的数列 抽象一下模型,把奇数项当作横坐标,偶数项当作纵坐标,就是从n*n矩阵左下角走到右上角并且每一步x<=y的方案数,发现是卡特兰数,关于gcd,可以线筛出质数,顺手处理每个数的最小质因子,从而快速得到每个数的唯一分解,从而约分. 3.树屋阶梯 把每放上一块后当前x的最大值和y的最大值想象成坐标点,这样是n*n矩阵从左下角走到右上角并且每一步x>=y的方案数,发现是卡特兰数,唯一分解约分高精乘. 4.数的计数 裸的prufer,注意各种特判即可.…
题目链接:https://www.luogu.org/problemnew/show/P1044 转载于:https://www.luogu.org/blog/QiXingZhi/solution-p1044 题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何一门数据结构的课程都会介绍栈.宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,…
题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数! 完全背包都会打吧,原来是最优值,现在是累计值. 状态转移方程:f[j]=f[j]+f[j-w[i]],w[i]是待选质数. 理解:一个数要拆成若干素数和,等同于拆成所有该数减去一个素数差的方案数之和(而不是最优方案数) 但这么做需要初始化为0,同时用滚动数组可以减小时间和空间复杂度. 代码如下:…
题解:http://www.cnblogs.com/ljc20020730/p/6937954.html 水题A: [AHOI2001]质数和分解 题目网址: https://www.luogu.org/problem/show?pid=2563 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如,9 的质数和表达式就有四种本质不同的形式: 9 = 2 + 5 + 2 =…
题目链接:数的划分 这题直接搜索就行了.给代码,思路没什么好讲的,要讲的放在代码后面: #include<bits/stdc++.h> using namespace std; int dfs(int n,int k,int cur){ if(k==1){ return 1; //1 } int ans=0; for(int i=cur;i*k<=n;i++){ //2 ans+=dfs(n-i,k-1,i); } return ans; } int main(){ int n,k; s…
DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P1596 [USACO10OCT] 湖计数Lake Counting DFS入门题,求连通块的. #include<iostream> #include<algorithm> using namespace std; ]={-,-,-, , , ,,};//方向 ]={-, , ,-, ,-…
HDU 1087 Input contains multiple test cases. Each test case is described in a line as follow:N value_1 value_2 …value_N It is guarantied that N is not more than 1000 and all value_i are in the range of 32-int.A test case starting with 0 terminates th…
原题链接 这道题目如果连字符串的基本操作都没学建议不要做. 学了的很简单就可以切,所以感觉没什么难度- 主要讲一下在AC基础上的优化(可能算不上剪枝) 很明显,这道题我们要找的是前缀,那么在字符串数组有序的前提下,拥有这个前缀的字符串应该是连在一起的! 那么也就是说,如果以前找到过有这个前缀的,但是遇到了找不到了情况了! 就应该return 0! 代码很简单 贴一下吧: #include<bits/stdc++.h> using namespace std; string a[1000010]…
POJ - 1220 进制转换 import java.io.*; import java.util.*; import java.math.*; public class Main { public static int GetNum(char c) { if (Character.isDigit(c))return c-'0'; if (Character.isUpperCase(c))return c-'A'+10; if (Character.isLowerCase(c))return…