【Usaco 2009 Feb】Bullcow 牡牛和牝牛
【题目】
传送门
Description
约翰要带 n(1≤n≤100000)n(1≤n≤100000)n(1≤n≤100000) 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛。牛们要站成一排。但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有 k(0≤k<n)k(0≤k<n)k(0≤k<n) 只牝牛。
请计算一共有多少种排队的方法。所有牡牛可以看成是相同的,所有牝牛也一样。答案对 500001150000115000011 取模。
Input
一行,输入两个整数 nnn 和 kkk。
Output
一个整数,表示排队的方法数。
Sample Input
4 2
Sample Output
6
HINT
666 种方法分别是:牝牝牝牝,牡牝牝牝,牝牡牝牝,牝牝牡牝,牝牝牝牡,牡牝牝牡
【分析】
牡(muˇmǔmuˇ)牛,公牛的意思,牝(pıˋnpìnpıˋn)牛,母牛的意思
好啦这不是这道题的重点,重点是这道题的算法
不难发现,如果有 xxx 头牡牛,一定会有 (x−1)⋅k(x-1)\cdot k(x−1)⋅k 头牝牛,也就是说牡牛只能在剩下的 n−(x−1)⋅kn-(x-1)\cdot kn−(x−1)⋅k 个位置上选,方案数就是 Cn−(x−1)⋅k              xC^{\;\;\;\;\;\;\;x}_{n-(x-1)\cdot k}Cn−(x−1)⋅kx
那么循环枚举有多少个牡牛,按公式计算答案后累加,到 x>n−(x−1)⋅kx>n-(x-1)\cdot kx>n−(x−1)⋅k 退出就可以了
最后吐槽一下,数据范围是不是有误啊,数组开小导致 WA 了好久
【代码】
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
#define Mod 5000011
using namespace std;
int fac[N],inv[N];
int Power(int a,int b)
{int ans=1;while(b){if(b&1)ans=1ll*ans*a%Mod;a=1ll*a*a%Mod;b>>=1;}return ans;
}
void prework()
{int i;fac[0]=fac[1]=1;for(i=2;i<N;++i) fac[i]=1ll*fac[i-1]*i%Mod;inv[N-1]=Power(fac[N-1],Mod-2);for(i=N-2;~i;--i) inv[i]=1ll*inv[i+1]*(i+1)%Mod;
}
int C(int n,int m)
{return 1ll*fac[n]*inv[m]%Mod*inv[n-m]%Mod;
}
int main()
{prework();int n,k,i,num,ans=1;scanf("%d%d",&n,&k);for(i=1;i<=n;++i){num=n-(i-1)*k;if(i>num) break;ans=(ans+C(num,i))%Mod;}printf("%d",ans);return 0;
}
【Usaco 2009 Feb】Bullcow 牡牛和牝牛相关推荐
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(DP)
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 353 Solved: 248 ...
- 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 243 Solved: 167 ...
- [Usaco2009 Feb]Bullcow 牡牛和牝牛
原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=3398 容易想到的一种\(dp\)就是:设\(dp[i][j]\)表示前\(i\)头牛里面有 ...
- bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...
- bzoj 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
Description 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至 ...
- 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)...
http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,"至少"一词可以给我 ...
- BZOJ3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
标签:DP,组合数学 Time Limit: 1 Sec Memory Limit: 128MB Submit: 335 Solved: 235 [Submit][Status][Discuss] ...
- bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
Description 约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至 ...
- BZOJ1579 USACO 2009 Feb Gold 3.Revamping Trails Solution
标题效果:一个N积分m无向图边.它可以是路径k右边缘值变0,确定此时1-n最短路径长度. Sol:我以为我们考虑分层图,图复制k+1部分,每间0~k一层.代表在这个时候已经过去"自由边缘&q ...
最新文章
- 【实施工程师之家】linux安装tomcat(yum安装tomcat)
- 使用PowerMock模拟构造函数
- vfp 调用 mysql uft-8 connstring_(最全的数据库连接字符串)connectionstring
- 【赛事】京东百万巨奖寻多传感器融合定位算法英雄
- mds算法python函数_分享python mds,sha256加密算法,c#对应sha256加密算法
- 也来学学插件式开发续-利用MEF
- windows 自带计算器 calc 的使用
- 清空数据库中的某个表中数据
- 汉语中的通用量词:个,块
- oracle登录卡,【Oracle连接问题】关于windows xp3上oracle连接登录卡住的问题
- C# gdal创建和读取tiff文件
- timestamp与datetime的对比
- 从六度分隔到无尺度网络
- Python中歌词解析
- 2020最新苹果企业级开发者账号续费流程
- Android学习笔记之如何使用圆形菜单实现旋转效果...
- Redis源码阅读,从入门到放弃
- android id 重名_android 中不同的Xml中id可以重名吗?
- 小白从零开始学习区块链的个人笔记(一) 什么是区块链
- 【建议收藏】功率电子器件界面热阻和接触热阻是如何测量的?
热门文章
- HR管理的本质是激发每一个人的善意
- KeyXing魔兽显血改键工具|制作过程
- 移动固态硬盘中安装Ubuntu18.04,并且运行于其他电脑
- D. Unusual Sequences (数论,质因子分解,dp)
- PKI体系简易JAVA实现(一):时间戳服务器TSA
- opa847方波放大电路_采用电压反馈放大器OPA846、OPA847.ppt
- 中台的问题,是技术的问题,还是人的问题
- 单例模式的五种实现形式(懒汉式,饿汉式,双空判断,内部类,枚举)
- js逆向验证码篇之极验4代
- Linux配置JDK环境——步骤详解