bzoj 1485 [HNOI2009]有趣的数列 卡特兰数

2023-10-04 02:59

本文主要是介绍bzoj 1485 [HNOI2009]有趣的数列 卡特兰数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

把排好序的序列看成一对对括号,要把他们往原数列里塞,所以就是括号序合法方案数
即为卡特兰数

f(n)=Cn2nn+1

求的时候为避免除法,可以O(n)计算每个素数出现次数,最后乘起来,打完之后发现其实根本不用快速幂……

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 2000005
using namespace std;
int prime[N],minp[N],num[N],tot,n,p;
bool bo[N];
long long ans=1;
void getprime(){for(int i=2;i<=2*n;i++){if(!bo[i]){prime[++tot]=i;minp[i]=tot;}for(int j=1;j<=tot&&prime[j]*i<=2*n;j++){bo[i*prime[j]]=1;minp[i*prime[j]]=j;if(i%prime[j]==0) break;}}
}
void add(int x,int y){while(x!=1){num[minp[x]]+=y;x/=prime[minp[x]];}
}
int main()
{scanf("%d%d",&n,&p);getprime();for(int i=n+1;i<=2*n;i++)add(i,1);for(int i=1;i<=n;i++)add(i,-1);add(n+1,-1);for(int i=1;i<=tot;i++)if(num[i]){while(num[i]){if(num[i]&1)ans=(ans*prime[i])%p;prime[i]=(prime[i]*prime[i])%p;num[i]>>=1;}}printf("%d\n",ans);
}

这篇关于bzoj 1485 [HNOI2009]有趣的数列 卡特兰数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1157

相关文章

c#编程:有一个分数序列,2/1,3/2,5/3,8/5,13/8,21/13....找出数列的规律并求出其前30项的和

using System;using System.Collections.Generic;using System.Linq;using System.Text;//有一个分数序列,2/1,3/2,5/3,8/5,13/8,21/13....找出数列的规律并求出其前30项的和namespace ans1{class Program{static void Main(string[]

从网易校招编程题谈起,轻松理解有趣的0-1背包问题

从网易的一道算法题开始 最近在准备春招实习,偶然做到网易的一道编程题,一方面找了很多博客看的云里雾里,这里特别写下解题的思路和逻辑,一方面加深印象,另一方面供需要的你学习参考。好了,话不多说,开始吧。本文提供思路,并给出Java代码实现例子,供大家参考。 先睹为快 来源:网易2017春招笔试真题编程题 时间限制:1秒 空间限制:32768K 一种双核CPU的两个核能够同时的处理任务,现在有

LeetCode665.非递减数列

LeetCode刷题记录 文章目录 📜题目描述💡解题思路⌨C++代码 📜题目描述 给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 示例1

[CQU 21466] zzblack与斐波那契数列 (矩阵快速幂)

CQU - 21466 求 f(⌈(5√+12)2m⌉) f( \lceil {(\frac {\sqrt{5}+1} {2})}^{2m} \rceil )%2238065148 其中 f(n) f(n)是 Fibonacci Fibonacci数列的第 n项 首先要求项数,一看 m很大,肯定是快速幂 但是底数是个浮点数,肯定不能直接快速幂 所以要给底数加一个 (5√

类与接口的一个有趣程序例子

面向对象编程中,类和接口是最基础的两个概念了。下面写一个简单的程序,分别演示使用基类与接口如何编写程序。程序很简单,不用过多解释,直接上代码了。广大程序员兄弟们一定能够明白是什么意思吧。 先是类的方式。 <?php/*** 类模式老婆* Wife基类*/class Wife {public function Cook($howToCook, $vegetableArray) {$this-

有趣的 Oracle JDBC 驱动包命名问题 - ojdbc6 和 ojdbc14 哪个新?!

有趣的 Oracle JDBC 驱动包命名问题 - ojdbc6 和 ojdbc14 哪个新?! 1 背景概述 最近协助一个小兄弟排查了某作业使用 sqoop 采集 oracle 数据的失败问题,问题现象,问题原因和解决方法都挺直观,但在此过程中发现了一个有趣的 Oracle JDBC 驱动包命名问题,不留意还真不好发现,故在次跟大家分享下。 2 问题现象 某 sqoop import 作

斐波那契数列求第N项递归改进

递归思路: int fib(int n) {if ( 2 > n) {return n;}return fib(n-1) + fib(n-2);} 展开递归计算过程,如下为求第fib(5)的递归过程。 如上发现好多重复计算过程,时间与空间的消耗也是必然的。 颠倒计算方向,由自顶而下递归,为自底而上迭代(动态规划) 算法描述为: int fib(int n) {int f = 0, g

Python数列求和

1 问题 如何用python解决数学问题?如何用python数列求和? 2 方法 代码清单 1 Courier New字体,23磅行间距>>> def sum_num():    input_num = input("输入一个0-9的整数:")    try:        input_num = int(input_num)        if input_num > 9 or input_

高中数学:数列-累加法与累乘法

一、累加法 主要用来解决类似等差数列递推公式的相关变形题目 1、推导等差数列的通项公式 2、题型1 对递推式变形,通项的系数为1,常数项d变成含n的一次函数 解: 题型2 对递推式变形,通项的系数为1,常数项d变成含n的指数函数 解: 题型3 对题型2的变形 解: 二、累乘法 主要用来解决类似等比数列递推公式的相关变形题目 1、推导等比数列通项公式

printf有趣的\033

目录(?)[-] printf有趣的033 代码分析 printf有趣的\033 1 2 3 4 5 int main ( int argc , char * * argv ) {          printf ( "\033[44;37;5m hello world\033[0m\n" ) ;          retu