题目描述

组合数C(n,m)表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给出计算组合数的一般公式:

C(n,m)=n!/m!(n-m)!

其中n! = 1 × 2 × · · · × n

小葱想知道如果给定n,m和k,对于所有的0 <= i <= n,0 <= j <= min(i,m)有多少对 (i,j)满足C(i,j)是k的倍数。

输入输出格式

输入格式:

第一行有两个整数t,k,其中t代表该测试点总共有多少组测试数据,k的意义见 【问题描述】。

接下来t行每行两个整数n,m,其中n,m的意义见【问题描述】。

输出格式:

t行,每行一个整数代表答案。

输入输出样例

输入样例#1:

  1. 1 2
  2. 3 3
输出样例#1:

  1. 1
输入样例#2:

  1. 2 5
  2. 4 5
  3. 6 7
输出样例#2:

  1. 0
  2. 7

说明

【样例1说明】

在所有可能的情况中,只有C(2,1)=2是2的倍数。

【子任务】

這個題,首先暴力思路是質因數分解。(70分)

  1. #include<cstdio>
  2. int t,k,n,m,ans,pd,a;
  3. int s[]={,,,,,,,};
  4. int bz[],bd[];
  5. int main(){
  6. freopen("problem.in","r",stdin);
  7. freopen("problem.ans","w",stdout);
  8. scanf("%d%d",&t,&k);
  9. for(int i=;i<&&k>=s[i];i++) while(k%s[i]==){k/=s[i];bz[i]++;}
  10. while(t--){
  11. ans=;
  12. scanf("%d%d",&n,&m);
  13. for(int i=;i<=n;i++)
  14. for(int j=;j<=i&&j<=m;j++){
  15. pd=;
  16. for(int k=j+;k<=i;k++){
  17. a=k;
  18. for(int l=;l<&&a>=s[l];l++) while(a%s[l]==){a/=s[l];bd[l]++;}
  19. }
  20. for(int k=;k<=i-j;k++){
  21. a=k;
  22. for(int l=;l<&&a>=s[l];l++) while(a%s[l]==){a/=s[l];bd[l]--;}
  23. }
  24. for(int k=;k<;k++){
  25. if(bd[k]<bz[k]) pd=;
  26. bd[k]=;
  27. }
  28. ans+=pd;
  29. }
  30. printf("%d\n",ans);
  31. }
  32. }

暴力

然後,組合數有一個遞推公式,即C(i,j)=C(i-1,j)+C(i-1,j-1),也就是大名鼎鼎的楊輝三角。

  1. #include<cstdio>
  2. int t,k,n,m,ans;
  3. int c[][];
  4. int main(){
  5. freopen("problem.in","r",stdin);
  6. freopen("problem.ans","w",stdout);
  7. scanf("%d%d",&t,&k);
  8. c[][]=c[][]=;
  9. for(int i=;i<=;i++)
  10. for(int j=;j<=i;j++){
  11. c[i][j]=c[i-][j]+c[i-][j-];
  12. c[i][j]%=k;
  13. }
  14. while(t--){
  15. ans=;
  16. scanf("%d%d",&n,&m);
  17. for(int i=;i<=n;i++)
  18. for(int j=;j<=i&&j<=m;j++)
  19. if(!c[i][j]) ++ans;
  20. printf("%d\n",ans);
  21. }
  22. return ;
  23. }

90分

而後提前處理一下,把查詢變成O(1)。

  1. 1 #include<cstdio>
  2. 2 int t,k,n,m,a;
  3. 3 int c[2010][2010];
  4. 4 int ans[2010][2010];
  5. 5 int main(){
  6. 6 freopen("problem.in","r",stdin);
  7. 7 freopen("problem.ans","w",stdout);
  8. 8 scanf("%d%d",&t,&k);
  9. 9 c[1][0]=c[1][1]=1;
  10. 10 for(int i=2;i<=2000;i++)
  11. 11 for(int j=0;j<=i;j++){
  12. 12 c[i][j]=c[i-1][j]+c[i-1][j-1];
  13. 13 c[i][j]%=k;
  14. 14 }
  15. 15 for(int i=1;i<=2000;i++){
  16. 16 a=0;
  17. 17 for(int j=0;j<i;j++){
  18. 18 if(!c[i][j]) ++a;
  19. 19 ans[i][j]=ans[i-1][j]+a;
  20. 20 }
  21. 21 for(int j=i;j<=2000;j++) ans[i][j]=ans[i][i-1];
  22. 22 }
  23. 23 while(t--){
  24. 24 scanf("%d%d",&n,&m);
  25. 25 printf("%d\n",ans[n][m]);
  26. 26 }
  27. 27 return 0;
  28. 28 }

NOIP第二水的題,而後。。。

NOIP2016 D2T1 組合數問題(problem)的更多相关文章

  1. [NOIP2016day2T1] 組合數問題(problem)

    题目描述 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们 ...

  2. 何解決 LinqToExcel 發生「無法載入檔案或組件」問題何解決 LinqToExcel 發生「無法載入檔案或組件」問題

    在自己的主機上透過 Visual Studio 2013 與 IISExpress 開發與測試都還正常,但只要部署到測試機或正式機,就是沒辦法順利執行,卡關許久之後找我協助.我發現錯誤訊息確實很「一般 ...

  3. [亂數] <細說> C/C++ 亂數基本使用與常見問題

    陸陸續續寫了 EA  一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由 ...

  4. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

  5. oracle系統表、數據字典介紹與日常問題診斷

    oracle系統表.數據字典介紹與日常問題診斷 數據字典是由唯讀的table和view組成的,產生於$oracle_home\rdbms\admin\catalog.sql.裡面儲存Oracle資料庫 ...

  6. 【Java算法學習】斐波那契數列問題-兔子產子經典問題

    /** * 用遞推算法求解斐波那契數列:Fn = Fn-2 +Fn-1; */ import java.util.*; public class Fibonacci { public static v ...

  7. [ Eclipse ] [ Problem ] Eclipse 無法開啟問題

    因為 Eclipse 在設定環境的過程掛掉太多次,擷取一些網路上優秀的文章當作備份 http://www.ewdna.com/2013/12/Eclipse-Loading-Workbench.htm ...

  8. (转)約瑟夫問題的兩個O(log n)解法

    約瑟夫問題的兩個O(log n)解法 這個是學習編程時的一個耳熟能詳的問題了: n個人(編號爲0,1,...,n-1)圍成一個圈子,從0號開始依次報數,每數到第m個人,這個人就得自殺, 之後從下個人開 ...

  9. ROHS無鉛問題解答!ROHS IPC SGS

    無鉛smt(smd)問題1. 問Maxim關于無鉛的定義是什么?答無鉛表示在封裝或產品制造中不含鉛(化學符號為Pb).IC封裝中,Pb在外部引腳拋光或電鍍中很常見.對于晶片級封裝(UCSP和倒裝芯片) ...

随机推荐

  1. 支持单色条码图像生成的条形码控件Barcode Professional

    Barcode Professional for .NET Windows Forms条形码控件是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的.NE ...

  2. 多功能节点连线绘图控件Nevron Diagram for .NET使用方法及下载地址

    Nevron Diagram for .NET是一个功能强大,世界上顶级的.NET图表控件.可扩展的图形报表构架,可以帮您创建功能丰富的Winforms及Webforms图表解决方案.这个产品构建于N ...

  3. C# WinForm程序向datagridview里添加数据

    在C#开发的winform程序中,datagridview是一个经常使用到的控件.它可以以类似excel表格的形式规范的展示或操作数据,我也经常使用这个控件.使用这个控件首先要掌握的就是如何向其中插入 ...

  4. SharePoint 2013 开发——APP安全模型

    博客地址:http://blog.csdn.net/FoxDave 除非开启了SharePoint网站的匿名访问,否则对于入站的请求,必须要有一个身份验证的过程(Authentication),这个 ...

  5. MySQL表的增删改查和列的修改(二)

    一.使用Like模糊查找搜索前缀为以“exam_”开头的表名 show tables like 'exam_%' ; 语句结束符号是:也是用\G来表示 二.MySQL表的CRUD 2.1 创建表: C ...

  6. ThinkPHP中Session用法详解

    在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检 ...

  7. 安全攻城狮研发技能栈V1.0,附详细点评~

    2015-12-21 正宗好PT 正宗好PT 今天公司年会,又木有抽到奖,求安慰/(ㄒoㄒ)/~~ 言归正传,我曾经在推特发过一个Skill CheatSheet,被转发和点赞了几百次,我又更新了一下 ...

  8. ubuntu添加共享出错

    早上设置一个共享目录share. 右键共享,之后系统自动安装软件samba,之后共享出错: "net usershare"返回错误 255:net usershare: canno ...

  9. js控制打印 转的

    很多时候,我们在做系统的时候要做打印功能,打印在js中其实很简单,不过这个很简单的代码并不能满足我们的特定需求,比如我们需要打印的表单在很多文字的中间,或者文字中包含一些广告或者图片什么的,这就很难用 ...

  10. Jira中Activity Stream中显示Localhost不能正常访问的处理

    在“介绍”中 “你可以在系统管理页面 编辑此段文字.”将地址改为IP和端口即可