题目描述

组合数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 2
3 3
输出样例#1:

1
输入样例#2:

2 5
4 5
6 7
输出样例#2:

0
7

说明

【样例1说明】

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

【子任务】

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

 #include<cstdio>
int t,k,n,m,ans,pd,a;
int s[]={,,,,,,,};
int bz[],bd[];
int main(){
freopen("problem.in","r",stdin);
freopen("problem.ans","w",stdout);
scanf("%d%d",&t,&k);
for(int i=;i<&&k>=s[i];i++) while(k%s[i]==){k/=s[i];bz[i]++;}
while(t--){
ans=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=i&&j<=m;j++){
pd=;
for(int k=j+;k<=i;k++){
a=k;
for(int l=;l<&&a>=s[l];l++) while(a%s[l]==){a/=s[l];bd[l]++;}
}
for(int k=;k<=i-j;k++){
a=k;
for(int l=;l<&&a>=s[l];l++) while(a%s[l]==){a/=s[l];bd[l]--;}
}
for(int k=;k<;k++){
if(bd[k]<bz[k]) pd=;
bd[k]=;
}
ans+=pd;
}
printf("%d\n",ans);
}
}

暴力

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

 #include<cstdio>
int t,k,n,m,ans;
int c[][];
int main(){
freopen("problem.in","r",stdin);
freopen("problem.ans","w",stdout);
scanf("%d%d",&t,&k);
c[][]=c[][]=;
for(int i=;i<=;i++)
for(int j=;j<=i;j++){
c[i][j]=c[i-][j]+c[i-][j-];
c[i][j]%=k;
}
while(t--){
ans=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=i&&j<=m;j++)
if(!c[i][j]) ++ans;
printf("%d\n",ans);
}
return ;
}

90分

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

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

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

[NOIP2016day2T1] 組合數問題(problem)的更多相关文章

  1. NOIP2016 D2T1 組合數問題(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. bzoj3505 [Cqoi2014]数三角形——组合数+容斥

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3505 好题啊好题...好像还曾经出现在什么智力测试卷中来着...当时不会现在还是无法自己推出 ...

  2. TS流解析 四

    一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video.Audio以及我们需要学习的PAT.PMT等 ...

  3. VPS主机

    腾讯云企业认证 备案域名要是顶级域名格式,所以不能是www.blueheartzf.com,而要是blueheartzf.com

  4. E20170627-gg

    ring   n. 戒指,指环; 铃声,钟声; 环形物; 拳击场;   vi. 按铃,敲钟; 回响; 成环形; rear   n. 后部,背面,背后; 臀部; (舰队或军队的) 后方,后尾,殿后部队; ...

  5. 【HTML5】基于HTML5的高性能动画与游戏

    其实这篇文章类似版本早在12年就在网上各处出现了,也随着HTML5的兴起,HTML的新特性也是倍受开发者们追捧,自然相关HTML5的高性能动画与游戏的相关文章也是层出不穷的,笔者也是在12年接触的相关 ...

  6. ACM_Reverse Bits(反转二进制)

    Reverse Bits Time Limit: 2000/1000ms (Java/Others) Problem Description: Reverse bits of a given 32 b ...

  7. RabbitMQ~消息的产生和管理(15672)

    上一讲说了rabbitmq在windows环境的部署,而今天主要说一下消息在产生后,如何去查看消息,事实上,rabbitmq为我们提供了功能强大的管理插件,我们只要开启这个插件即可,它也是一个网站,端 ...

  8. [转] 64位Oracle 11g R2的客户端连接时报ORA-01019错误

    本文转自:http://blog.csdn.net/downmoon/article/details/8038583 在Win8企业版64位环境下,连接Oracle11g 服务端,搞了整整两天,特将过 ...

  9. 微信自定义分享功能实现Tips

    以MVC为例 前台js通过.post()方法传给后台特定Controller当前页面的url,后台获取后,进行处理: 1.获取access_token:https://mp.weixin.qq.com ...

  10. Count the consecutive zero bits (trailing) on the right with multiply and lookup

    我在网上看到了一点神奇的代码,用来计算一个数字末尾连续零的个数. 刚好我在优化一个I2C读写函数(只写入I2C特定bit),觉得这个很有用.经过尝试,确实没问题. 下面我隆重介绍一下: Count t ...