题目大意:

给定一个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. python update数据

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/23 23:57 # @Author : lijunjiang # @Fi ...

  2. hbase异常:java.io.IOException: Unable to determine ZooKeeper ensemble

    项目中用到hbase,有时候可能会报一些异常,比如java.io.IOException: Unable to determine ZooKeeper ensemble 等等,当出现这个问题时,根据个 ...

  3. 第一章:1-10、试在下列条件下比较电路交换和分组交换。要传送的报文共x(bit),从源站到目的站共经过k段链路,每段链路的传播时延为d(s),数据率为C(bit/s)。在电路交换时电路的建立时间为s(s)。在分组交换时分组长度为p(bit),且各结点的排队等待时间可忽略不计。问在怎样的条件下,分组交换的时延比电路交换的要小?

    <计算机网络>谢希仁著第四版课后习题答案答:对电路交换,当t=s时,链路建立: 当t=s+x/C,发送完最后一bit:                 当t=s+x/C+kd,所有的信息到 ...

  4. (1)请求web

    用来测试api的例子 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  5. MyBatis笔记:invalid bound statement (not found)

    maven项目在本地运行的时候没有问题,一旦把war包部署到测试机上就不能运行.查看了一下tomcat日志发现抛出这样的错误:invalid bound statement (not found),后 ...

  6. my-git-wiki-doing

    github项目quick setup git初始化 git init git添加remote git remote add origin YOURS_REMOTE_URL git修改remote的u ...

  7. C语言基础之函数

    1.什么情况下定义函数: 添加一个常用的新功能 2.函数的定义格式 返回值类型  函数名(形式参数列表) { 函数体 } 3.定义函数需要明确的东西 1> 起一个有意义的函数名 2> 函数 ...

  8. @selector和SEL

    遇到selector发现不是很明白,网上搜到的零零星星的介绍也不成体系,索性自己翻译一下,加深一下印象.原文来自官方API文档下的Selectors. Selectors 在OC中,selector有 ...

  9. adb devices 找不到设备怎么办 --- 2

    问题现象:在电脑上安装好手机驱动后,手机进入设置---->应用程序---->开发----->勾选USB调试后连接电脑,,在CMD命令中输入adb devices发现没有设备. 解决方 ...

  10. 隐藏服务器真实IP的方法来防止DDOS攻击

    2017-08-22 作者:小唐 点击: 10,500次 在无盘系统的环境下,服务器软件存在漏洞,就容易受到DDOS攻击,隐藏服务器真实IP是解决问题最好的方法,下面小编与大家分享一下隐藏服务器真实I ...