bzoj1856
这是一道无比涨姿势的题目
首先总结一下这种输入几个数的题目,
一般不是递推就是数学题
显然,这道题用递推是无法做到O(n)的复杂度的
那我们就考虑这是一道数学题了
我已开始纠结在正向思维了,正向求好像确实不容易;
某牛的报告点醒了我,我们设符合条件的序列为x,不符合的为y
则x+y=c(n+m,n);
现在我们只要求出y即可
然后弱渣的我又卡住了,
还是大牛的报告引用:我们不妨将0看做-1,那么对于一个不合法的序列,必然存在一个位置使得前缀和为-1,我们设这个最小的位置为k,即:a1+a2+……ak=-1,那么前缀和k-1为0,且ak=-1。接着,若我们将所有n+m个的这前k个数字取反,那么得到一个新的数列含有n+1个1和 m-1个-1,这个新的数列有C(n+m,n+1)种。不合法序列与新构造的这个序列是一一对应的关系。
太神了。怎么想到的orz
所以,ans=c(n+m,n)-c(n+m,n+1);
因为n>m, 所以c(m+n,n)-c(n+m,n+1);
(其实现在来看,这就是一个经典的卡特兰数的模型的变形)
由于是组合还需要取模,就要涉及到除法取模;
能回避除法取模的递推法(杨辉三角)复杂度肯定会TLE,
然后我又涨姿势了,
a/b ≡ac (mod p);
bc ≡1 (mod p) 我们把c叫做b的乘法逆元;
一个数a除以另一个数b同余于a乘以b的乘法逆元模p
怎么证呢?
我们把乘法逆元的式子变换一下得 bc=pk+1 k∈Z
则b=(pk+1)/c
则a/b=a*c*(pk+1)≡ac (mod p)
乘法逆元存在的充要条件是gcd(b,p)=1
由于p=20100403>n+m,且是一个质数
显然gcd(b,p)=1;
那么怎么求乘法逆元呢?
看到之前的变换式我们也不难想到,扩展欧几里得
这道题唯一让我欣慰的地方就是,扩展欧几里得写对了……
const mo=;
var ans:int64;
n,m,i:longint; procedure exgcd(a,b:int64;var x,y:int64);
var xx,yy:int64;
begin
if b= then
begin
x:=;
y:=;
end
else begin
exgcd(b,a mod b,x,y);
xx:=x;
yy:=y;
x:=yy;
y:=xx-a div b*yy;
end;
end; function re(a,p:int64):int64;
var x,y:int64;
begin
exgcd(a,p,x,y);
x:=(x+mo) mod mo;
exit(x);
end; function get(x:int64):int64;
var i:int64;
begin
i:=;
get:=;
while i<x do
begin
inc(i);
get:=get*i mod mo;
end;
end; function c(x,y:int64):int64;
var a,b,d:int64;
begin
a:=get(x);
b:=get(y);
d:=get(x-y);
c:=a*re(b,mo) mod mo*re(d,mo) mod mo;
end; begin
readln(n,m);
ans:=c(n+m,n)-c(n+m,n+);
ans:=(ans+mo) mod mo;
writeln(ans);
end.
bzoj1856的更多相关文章
- BZOJ1856 [Scoi2010]字符串 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8084577.html 题目传送门 - BZOJ1856 题意概括 找出由n个1,m个0组成的字符串,且任意前几个 ...
- 【BZOJ1856】[SCOI2010]字符串(组合数学)
[BZOJ1856][SCOI2010]字符串(组合数学) 题面 BZOJ 洛谷 题解 把放一个\(1\)看做在平面直角坐标系上沿着\(x\)正半轴走一步,放一个\(0\)看做往\(y\)轴正半轴走一 ...
- BZOJ1856[SCOI2010]字符串
Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgw ...
- [BZOJ1856][SCOI2010]字符串(组合数学)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1856 分析:http://www.cnblogs.com/jianglangcaiji ...
- bzoj千题计划299:bzoj1856: [Scoi2010]字符串
http://www.lydsy.com/JudgeOnline/problem.php?id=1856 卡特兰数 从(1,1)走到(n,m),不能走y=x 上方的点,求方案数 从(1,1)走到(n, ...
- BZOJ1856或洛谷1641 [SCOI2010]生成字符串
BZOJ原题链接 洛谷原题链接 可以将\(1\)和\(0\)的个数和看成是\(x\)轴坐标,个数差看成\(y\)轴坐标. 向右上角走,即\(x\)轴坐标\(+1\),\(y\)轴坐标\(+1\),表示 ...
- 2018.09.25 bzoj1856: [Scoi2010]字符串(组合数学)
传送门 如果有n==m的条件就是卡特兰数. 但现在n不一定等于m. 我们可以考虑用求卡特兰数一样的方法来求答案. 我们知道有一种求卡特兰数的方法是转到二维平面求答案. 这道题就可以这样做. 我们将这个 ...
- BZOJ1856: [Scoi2010]字符串(组合数)
题意 题目链接 Sol \(30 \%\)dp: \(f[i][j]\)表示放了\(i\)个\(1\)和\(j\)个\(0\)的不合法方案 f[0][0] = 1; cin >> N &g ...
- BZOJ1856:[SCOI2010]字符串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1856 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还 ...
随机推荐
- SDP协议分析
一.SDP协议介绍 SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP).会话初始协议(SIP).实时流协议(RTSP).MIME 扩展协 ...
- Web服务器集群搭建关键步骤纪要
前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...
- 《WPF程序设计指南》读书笔记——第6章 Dock与Grid
1.DockPanel面板 using System; using System.Windows; using System.Windows.Controls; using System.Window ...
- hdu 4717 The Moving Points(第一个三分题)
http://acm.hdu.edu.cn/showproblem.php?pid=4717 [题意]: 给N个点,给出N个点的方向和移动速度,求每个时刻N个点中任意两点的最大值中的最小值,以及取最小 ...
- js中批量处理样式——cssText的使用
http://www.cnblogs.com/snandy/archive/2011/03/12/1980444.html
- fiddler 插件开发
本文主要讲解使用.net C#语言开发Fiddler插件. 1.在Fiddler 会话列表中添加自定义列 使用FiddlerApplication.UI.lvSessions.AddBoundColu ...
- PHP获取APP客户端的IP地址的方法
分析php获取客户端ip 用php能获取客户端ip,这个大家都知道,代码如下: /** * 获取客户端ip * @param number $type * @return string */ func ...
- weblogic集群无法启动,提示java.lang.NumberFormatException
我有两台weblogic9.2做的集群A,B,A是主服务器,B是受管服务器,后来通过脚本启动weblogic服务,A服务启动异常,经查后台的日志文件发现报错消息如下: WebLogic Server ...
- java 读取文件中文乱码问题
很少写java io的代码,今天整了一个发现 本地调试好好的,放到jmeter里就打印乱码.一番折腾,终于搞定~直接上代码: List<Order> orderList = new Arr ...
- MySQL提示:The server quit without updating PID file问题的解决办法
错误如下: [root@snsgou mysql]# service mysql restartMySQL server PID file could not be found![失败]Startin ...