一个小练习

LeetCode | Combinations(n选k全排列) Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For example, If n = 4 and k = 2, a solution is: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 阅读详情

【问题描述】
n根木棍在地面上摆成一排,从中选择k根木棍,使得任意两个被选的木棍之间至少隔了m根木棍,有多少种选法?
【输入描述】(A.in)
第一行包含3个整数n、k、m,分别为题目所描述的
【输出描述】(A.out)
输出答案,由于答案很大,需要mod1000000007.
【输入样例】1000 100 5
【输出样例】444301345
【数据范围】
对于30%的数据 : 1<=n<=10,1<=k<=10,0<=m<=10
对于100%的数据: 1<=n<=1000,1<=k<=1000,0<=m<=1000

【问题分析】
分析题意得,总木棍数至少需要(k-1)*m+k根;然而总有一些地方是不能放木棍的,这些木棍有(k-1)*m根,需要空出来,把它们减掉,剩下的就是一个排列组合的问题。

【注意事项】
1. 如果剩下的木棍少于k根,那么需要特判,方案数为0;
2. 求组合数的公式如下:

这里写图片描述
3. 由于答案很大,我们需要对其取模,那么就需要用到乘法逆元,这里既可以分别求出m! 与(n-m)!的乘法逆元再向乘,也可以先乘后求逆元;
4. 逆元是关于模数的,所以快速幂要算1000000007-2次方,别误认为是关于n!-2;
5. 输入输出!!

以下代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 1000000007
int line,chose,ge;
long long jc[1010];
using namespace std;
long long jcheng(int x)
{
  long long ans=1;  
   for(int i=2;i<=x;i++)
     {
        if(jc[i]!=0) 
           ans=jc[i];
         else
          {
            ans=(ans%mod * i%mod)%mod;
            jc[i]=ans;
          }
     }
  return ans;   
}
long long ni(long long x)
{
    long long ans=1;
    long long m=mod-2;
    while(m>0)
      {
        if(m & 1) ans=(ans* (x%mod))%mod;
        x=(x*x)%mod;
        m>>=1;
      }
 return ans%mod;      
}
long long work(int m,long long n)
{
    long long t1,t2,t3,t4;
    t1=jcheng(n);
    t2=jcheng(m);
    t3=jcheng(n-m);
    t4=ni((t2*t3)%mod);
    return (t1%mod*t4%mod)%mod;
}
int main()
{
 freopen("A.in","r",stdin);
 freopen("A.out","w",stdout);   
  memset(jc,0,sizeof(jc));
  jc[0]=1;jc[1]=1;
  scanf("%d%d%d",&line,&chose,&ge);
  long long b=line- ge*(chose-1);
  if(b<chose||line<chose)//¿Û•ֵ㣡 
   {    printf("0");  return 0;  }  
  printf("%lld",work(chose,b)%mod); 
return 0;   }
自己做了一个alv的练习  *&---------------------------------------------------------------------* *& Report  ZALVTEST01 *& *&---------------------------------------------------------------------* *& *& *&----------- 阅读详情

相关推荐

牛客网之SQL刷题练习——一个实用的网站

推荐一个免费在线刷题神器,希望我们都能早日拿到互联网大厂入门券!

qq_43499848的博客 9677

Leetcode之恰有K根木棍可以看到的排列数目

题目: 有 n 根长度互不相同的木棍,长度为从 1 到 n 的整数。请你将这些木棍排成一排,并满足从左侧 可以看到恰好 k 根木棍。从左侧 可以看到 木棍的前提是这个木棍的 左侧 不存在比它 更长的 木棍。 例如,如果木棍排列为 [1,3,2,5,4] ,那么从左侧可以看到的就是长度分别为 1、3 、5 的木棍。 给你 n 和 k ,返回符合题目要求的排列 数目 。由于答案可能很大,请返回对 109 + 7 取余 的结果。 示例 1: 输入:n = 3, k = 2 输出:3 解释:[1,3,2].

qq_35455503的博客 524

U8+ 新建账套

一、登录 账套主管:demo 对账套有修改权限,有账套库权限 系统管理员:admin 其他所有权限 二、新建账套 admin登录–>点击系统管理–>账套–>建立 选择了参照已有账套结转期初:就是上一个的期末数据作为这一次新表的期初数据 启用会计期一旦选择更改不了。 ...

茶茶很困i 3693

从n个整数中取出其中k个,排成一组有序数的排序算法

设数组A中存放互不相同的n个整数,试编写算法,输出从这n个数中取出k个的所有组合(k

ahwl570的专栏 2684

【Dify精讲】第2章:后端服务架构深度剖析

Dify后端采用Flask应用工厂模式实现模块化开发,通过蓝图架构将API分为控制台、Web应用和服务接口三大模块。其设计亮点包括:1) 应用工厂模式支持多环境配置和独立测试;2) 蓝图分层管理实现API模块化,各模块职责清晰;3) 严格遵循RESTful原则设计API接口;4) 使用Flask-RESTful扩展简化API开发。这种架构既保持了Flask的灵活性,又实现了企业级应用的可维护性,是Flask项目架构的优秀实践案例。

wiyi9891的专栏 2126

deepin启动异常处理

修复的命令在执行时会输出大量的修复信息,正常情况下修复完之后输入exit命令回车后,即可正常启动系统。

whxxiang的博客 4370

力扣1866——恰有 K 根木棍可以看到的排列数目(动态规划)

解题思路 f[i][j]表示前i个木棍看到j个,f[n][k]即为答案; 前i个木棍,i最高一定能被看到,如果他在最后一位,相当于由f[i-1][j-1]转移而来,在原来基础的末尾上添加一个; 如果i不在最后一位,则最后一位一定是被挡掉的,可以有i-1种选择,不妨设选择x; 而前面的i-1个数(0x-1,x+1i)的组合方案,能看到j个数; 对此将x+1i这些数全部-1,令其等于xi-1,并不影响相对大小关系,看到的数跟原来一样; 例如1,2,4的排列组合方案与1,2,3的个数相同; 所以前面的i-1个..

lllzzzhhh2589的记录 410

【Unity】Unity 跨平台及编译过程

早期的Unity跨平台是基于MONO运行时的,又通过CLS实现了跨语言。其基本思路是将各个版本的语言统一编译成CIL语言,在不同平台运行时使用CLR进行解释。有点类似于Java的jdk和jvm。 CLS(Common Language System)通用语言规范:CLS是一种规范,类似于schema,当文件被指定遵守CLS规范后,在某语言中写出不符合通用规范的代码后将被警告或报错。 MONO是一个开源工程,其中包含C#编译器,CLR运行时,以及一组类库。该工程常见了一系列符合ECMA标准的.NET工具,MO

一个普普通通的游戏开发者 7236

有n根棍子,棍子的长度为ai。想从中选出三个组成周长尽可能唱的三角形。

#include int max1(int x,int y) { if(x>y) return x; else return y; } int max(int a,int b,int c) { int t; t=max1(a,max1(b,c)); return c; } int main() { int n,i,j

baidu_34872357的博客 6127

npm报错 npm WARN deprecated....的问题解决方式

报错 :npm WARN deprecated … 现象:无法进行有效的vue项目的部署以及npm install 命令的执行。 原因一:版本问题 说明:由于npm的版本过低或者过高导致的报错 检查版本: npm -v 如果版本是比较旧的,或者是最新的,这里可以进行对npm的更新和回退。 更新npm版本: npm updated -d 查看可以更新的版本 npm install -g npm 默认安装最新版本 安装回退指定的版本: npm updated -d 查看所有的版本 npm -g i.

任聪聪的博客 16万+

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1612

一个在线练习编程的网站

在笔者转发一篇非常有意思的文章:http://blog.youkuaiyun.com/chancein007/article/details/53731514中提到什么是“编码套路”(Code Kata),而且提到可以从Dave Thomas的21种实用的编码套路中获取灵感(CodeKata.com),或者你更愿意加入一个你家当地的“编程武馆”(CodingDojo.org),巧合的是,今天上网的时候无意中浏览到一个可以在线练习Code Kata的网站(http://cyber-dojo.org/dojo/index/

超越梦想,一起飞!!! 2万+

uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释

uniapp实现文本的展开与收起功能,uniapp展开全部和收起,uniapp里文本的展开与收起,uniapp中文本内容超出规定行数后展开收起的处理,UNIAPP兼容h5、微信小程序多行文本展开或收起,uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文),uni-app中文本过长-实现折叠与展开效果,中文本内容超出规定行数(字数)后展开收起的处理,超出部分...显示,uniapp适用于uniapp多行文本溢出显示...,多行文本展开或收起,uni-app-文本展开/收起折叠功能,支

🏆 前端领域优质创作者 5639

分享一个打字练习网站

成为一个优秀的程序员,打字速度虽然不是必要条件。但是一个打字快的程序员,必然会享受自己的打字速度,速度快听着啪啪声实在是爽的不行。 RatatypeRatatype 是一个在线的打字教程网站,能够帮助你提高键盘输入速度。TYPING TUTOR在TYPING TUTOR版块中逐步练习你的指法。每天练习几节内容。学习完TYPING TUTOR内容相信你的盲打速度绝对会上升一个层次。TYPING TES

甲壳虫爱上了夏天 2万+

你以为你懂 Java 反射?看了这篇源码分析,我发现我以前都错了

摘要:本文讲述了一次生产环境Metaspace内存溢出的故障排查经历。事故源于一个通用数据导出功能中频繁使用反射调用method.invoke(),触发了JVM的"膨胀机制":当同一Method对象调用超过15次时,JVM会动态生成GeneratedMethodAccessor类,导致Metaspace被撑爆。文章分析了问题根源在于循环中反复调用getMethods()创建新Method对象,并提出了三种解决方案:缓存Method对象、改用MapStruct/MethodHandle工具

BUG猿的博客 770

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

发现一个编程练习的地方

http://ac.jobdu.com/ 是一个练习编程的好地方啊,推荐给大家

pplin的专栏 460

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

每天一个Java小练习

每天一个Java小练习 第一天: 三维数组遍历求和 三维不平衡数组如下:Int a[][] []= {{{1,2},{3,4,5}},{{6,7},{8,9,10,11}}}; 编程实现输出数组a各个元素,并求各元素之和。 public class Test { public static void main(String[] args) { int a[][] []= {{{1,2},{3,4,5}},{{6,7},{8,9,10,11}}}; int s=0;

weixin_42614314的博客 526

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一个js购物车累加的一个小练习

var jian = document.getElementById('jian'); //获取元素的id var zongjia = document.getElementById('zongjia');//获取总价的id var num = 6;//初始价格 zongjia.innerHTML = &amp;amp;amp;amp;quot;¥&amp;amp;amp;amp;quot; + num;//给文本赋值 var nums = num;//每次累加的值 jian...

weixin_43854760的博客 654

html 表单练习 博客_练习:创建一个简单HTML5表单

在本练习中,您将使用几个新的<input>标记属性和类型创建一个简单的表单。 您创建的是表格的螺母和螺栓,而不是钟声和哨子。 目的是建立一个框架,在该框架上可以开发丰富的Internet应用程序(RIA),同时确保对声音HTML5表单构造的结构和语义基础的理解。 常用缩略语 CSS3:级联样式表版本3 GUI:图形用户界面 HTML5:超文本标记语言版本5 ...

cuyi7076的博客 1201

一个很香的python练习网站

推荐一个python练习网站w3resource,练习题包括python的基础数据类型,函数、内置的一些库比如os、datatime、collections等等,还有一些第三方的库, 每道题会给出题目描述,然后提供代码编辑窗口, 还有网站给出的问题解进行比对。 更香的是,在给出的解答代码后,还会给出代码的执行流程图, 更更香的是,不仅给出代码的执行流程图,还给出了代码的可视化执...

测试轩 5368

从今天开始每天写一个练习小代码

从今天开始每天写一个练习小代码

91道奇技术 474

[Java]关于用数组实现队列的一个小练习

[Java]关于用数组实现队列的一个小练习 本人刚开始接触编程的一个小练习,里面有很多不足之处,大家有意见尽管说 数组实现队列的功能 import java.util.Arrays; public class Arraylist_impl{ public static void main(String[] args) { Arraylist_impl list = new Arraylist_impl(); list.add(1); list.add(

IAMARRAY的博客 236

计算机打字练习程序,一个简单的打字练习程序

类似于学习机上的指法练习程序,简单而实用 #includemain(){int x,y,i,j;unsigned int Timer;char ch;char key;char *kb[]={"Q W E R T Y U I O P [ ]","A S D F G H J K L ; ’","Z X C V B N M , . /"};long AllCounter=0,RightCounter...

weixin_34338504的博客 712

第一个基础练习题

练习1:判断奇偶 练习2:使用for打印棱形 练习3:用while循环计算1+1/2!+1/3!+...1/20! 1 /* 2 * 3 *Excise by http://www.cnblogs.com/WhoMercy 4 * 5 */ 6 public class Exercise { 7 public static void main(...

Jiay0810的博客 218

一个SQL的小练习

好久没写博,考试结束了,分数出来了,这次应该可以拿本证书。闲着没事干,把上次做的一个小小的SQL练习贴出来。create table rk_stuInfo( rkid varchar(10) NOT NULL, rkname varchar(10) NOT NULL, rkc

sghgcn的专栏 620
上一篇: 关于高精度除法
下一篇: 树状数组求逆序对
「已注销」
博客等级 码龄10年 2粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值