题目大意:

给定一个N*M的棋盘,棋子可以攻击其左右距离不超过K的棋子。问有多少种放法使得棋盘上的棋子不能互相攻击。

N,M,K都在1到1000000000的范围内,结果对100003取模。

官方题解:

http://apps.topcoder.com/wiki/display/tc/TCO'10+Wildcard+Round

解题思路:

这题行与行之间没有关系是从一开始就之间看的出来的,所以只要求出一行的种数就能搞定该题。

假设一行有W个格子中放r个棋子,使得r个棋子之间的距离都超过K,做法是先全部任意的放进去,然后再往每个棋子(除了最右边的那个)右面插入K个棋子,这样就能保证棋子与棋子之间距离超过K,但是会使棋盘增加(r-1)*K个棋子,所以一开始就把多出来的格子减掉就可以了,所以放的方案数是C[W-(r-1)*K][r];其实这题考虑的是棋子之间的距离都要超过K,换一种约束,如果第i个棋子与第i+1个棋子之间的距离要超过Ki,这样也是没问题的,设sum=sigma(Ki),i<r,则所的方案数为C[w-sum][r];

当然组合数可能很大,然后要用Lucas定理来计算,于是收获了一份预处理版的Lucas定理。

这题比较无语的地方是当K比较小的时候,必须用矩阵连乘做,当K大的时候,必须用组合数做,两者要定一个界,定不好就超时。

代码:

见官方题解就OK;

TCO'10 Wildcard Round 1000pt的更多相关文章

  1. TCO'10 Online Round 3 1000pt

    题目大意: 密码串由小写字母.大写字母和数字组成,要求求出小写字母个数不少于L个.大写字母个数不少于U个.数字个数不少于D个的长度为N密码串的种数. 答案对 1000000009 取模 解题思路: 自 ...

  2. [每日一题2020.06.10]Codeforces Round #644 (Div. 3) ABCDEFG

    花了5个多少小时总算把div3打通一次( 题目链接 problem A 题意 : 两个x*y的矩形不能重叠摆放, 要放进一个正方形正方形边长最小为多少 先求n = min(2x, 2y, x+y) 再 ...

  3. @topcoder - TCO19 Regional Wildcard Wildcard Round - D1L2@ Diophantine

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 令 p[] 为质数序列:p[0] = 2, p[1] = 3, ...

  4. matlab初学之roundn和round

    文章出处: http://evaevazhuxun.blog.sohu.com/154543859.html http://blog.sina.com.cn/s/blog_a4034b2801012o ...

  5. delphi的取整函数round、trunc、ceil和floor

    delphi的取整函数round.trunc.ceil和floor 首先引入math单元 uses math; 1.Round(四舍六入五留双) 功能说明:对一个实数进行四舍五入.(按照银行家算法) ...

  6. Python基础(10)--数字

    本文的主题是 Python 中的数字.会详细介绍每一种数字类型,它们适用的各种运算符, 以及用于处理数字的内建函数.在文章的末尾, 简单介绍了几个标准库中用于处理数字的模块. 本文地址:http:// ...

  7. python 内建函数功能函数 abs() coerce() divmod() round() pow()

    >>> abs(-1)1>>> abs(10.)  10.0>>> abs(1.2-2.1j)2.4186773244895647>> ...

  8. Delphi 常用函数(数学函数)round、trunc、ceil和floor

    源:Delphi 常用函数(数学函数)round.trunc.ceil和floor Delphi 常用函数(数学) Delphi中怎么将实数取整? floor 和 ceil 是 math unit 里 ...

  9. SQL 中详解round(),floor(),ceiling()函数的用法和区别?

    SQL 中详解round(),floor(),ceiling()函数的用法和区别? 原创 2013年06月09日 14:00:21   摘自:http://blog.csdn.net/yueliang ...

随机推荐

  1. query的list()和iterate()区别 面试题

    query的list()和iterate()区别 1.返回的类型不一样,list返回List,iterate返回iterator 2.查询策略不同. 获取数据的方式不一样,list会直接查询数据库,i ...

  2. What does this bit-manipulating function do?

    http://stackoverflow.com/questions/8637142/what-does-this-bit-manipulating-function-do unsigned long ...

  3. Distributed Cache Coherence at Scalable Requestor Filter Pipes that Accumulate Invalidation Acknowledgements from other Requestor Filter Pipes Using Ordering Messages from Central Snoop Tag

    A multi-processor, multi-cache system has filter pipes that store entries for request messages sent ...

  4. iOS开发者证书申请及应用上线发布详解

    一个小教程登录开发者中心:http://developer.apple.com/ 第零部分:本地生成密钥1.打开mac的钥匙串访问  2.选择钥匙串的证书助理(有些可能是英文的)   3.点击继续后存 ...

  5. (4) python--seaborn

    seaborn封装了matplotlib的一些风格,简单的介绍一下

  6. python学习之-- 动态导入模块

    python 动态导入模块方法1: __import__ 说明: 1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块. 2. __import__(module)相当于import mod ...

  7. 牛客小白月赛6 指纹锁(set容器的骚操作)

    原题地址: 题目描述     HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁.     该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说 ...

  8. Apache2 httpd.conf 配置详解

    Apache2 httpd.conf 配置详解 <第一部分> 常用配置指令说明 1. ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相 ...

  9. 查看sqlserver的端口号

    背景 这几天想写一个使用java连接sqlserver的数据库连接测试程序.但是在查看数据库连接字符格式以后发现需要sqlserver数据库服务的端口号.在安装sqlserver的时候也没有提到端口号 ...

  10. jquery $(document).ready() 与js原生的window.onload的区别总结

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间       ...