[NOIP2016day2T1] 組合數問題(problem)
题目描述
组合数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 2
3 3
1
2 5
4 5
6 7
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)的更多相关文章
- NOIP2016 D2T1 組合數問題(problem)
题目描述 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们 ...
- 何解決 LinqToExcel 發生「無法載入檔案或組件」問題何解決 LinqToExcel 發生「無法載入檔案或組件」問題
在自己的主機上透過 Visual Studio 2013 與 IISExpress 開發與測試都還正常,但只要部署到測試機或正式機,就是沒辦法順利執行,卡關許久之後找我協助.我發現錯誤訊息確實很「一般 ...
- [亂數] <細說> C/C++ 亂數基本使用與常見問題
陸陸續續寫了 EA 一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由 ...
- D. Rescue Nibel! 解析(思維、組合、離散化、差分)
Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...
- oracle系統表、數據字典介紹與日常問題診斷
oracle系統表.數據字典介紹與日常問題診斷 數據字典是由唯讀的table和view組成的,產生於$oracle_home\rdbms\admin\catalog.sql.裡面儲存Oracle資料庫 ...
- 【Java算法學習】斐波那契數列問題-兔子產子經典問題
/** * 用遞推算法求解斐波那契數列:Fn = Fn-2 +Fn-1; */ import java.util.*; public class Fibonacci { public static v ...
- [ Eclipse ] [ Problem ] Eclipse 無法開啟問題
因為 Eclipse 在設定環境的過程掛掉太多次,擷取一些網路上優秀的文章當作備份 http://www.ewdna.com/2013/12/Eclipse-Loading-Workbench.htm ...
- (转)約瑟夫問題的兩個O(log n)解法
約瑟夫問題的兩個O(log n)解法 這個是學習編程時的一個耳熟能詳的問題了: n個人(編號爲0,1,...,n-1)圍成一個圈子,從0號開始依次報數,每數到第m個人,這個人就得自殺, 之後從下個人開 ...
- ROHS無鉛問題解答!ROHS IPC SGS
無鉛smt(smd)問題1. 問Maxim關于無鉛的定義是什么?答無鉛表示在封裝或產品制造中不含鉛(化學符號為Pb).IC封裝中,Pb在外部引腳拋光或電鍍中很常見.對于晶片級封裝(UCSP和倒裝芯片) ...
随机推荐
- E20170709-hm
scrape vt. 擦,刮; 擦去; 擦伤,刮破; 挖空;
- Atlantis(坐标离散化)
http://poj.org/problem?id=1151 题意:给出矩形的左上角坐标和右下角坐标(坐标的y轴是向下的),求出矩形面积的并.. 今天好困啊..迷迷糊糊的听会神给讲了讲,敲完之后调试了 ...
- 0619-dedeCMS数据表
CMS的层级从前台分主要分为首页--栏目页--内容页,从后台分主要是四张表之间的关系: 1.模型表--dede_channeltype(顶级) 2.栏目表--dede_arctype 3.数据表:分为 ...
- HTML Email 编写指南
今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周收到一封邮件,了解本周的大事. 有一天,我就在想, ...
- php安全过滤类
/*ansic码-Url码表: http://www.w3school.com.cn/tags/html_ref_urlencode.html ---------------------------- ...
- Android内存管理(9)*MAT:Heap Dump,Shallow Heap,Retained Heap,Dominating Tree,GC Roots等的含义
原文: http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fheapdump.ht ...
- 331 Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化
序列化二叉树的一种方法是使用前序遍历.当我们遇到一个非空节点时,我们可以记录这个节点的值.如果它是一个空节点,我们可以使用一个标记值,例如 #. _9_ / \ 3 2 ...
- scala的Map
package com.test.scala.test object MapTest { def main(args: Array[String]): Unit = { //定义一个不可变的map v ...
- 【1】Jdk1.8中的HashMap实现原理
HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 内部实现 ...
- JS——回调函数
1.回调函数作为参数的形式进行使用 2.回调函数一定程度上达到了解耦效果(模块化.功能化) <script> console.log(op(1, 2, add)); console.log ...