NOIP2016 D2T1 組合數問題(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第二水的題,而後。。。
NOIP2016 D2T1 組合數問題(problem)的更多相关文章
- [NOIP2016day2T1] 組合數問題(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和倒裝芯片) ...
随机推荐
- 支持单色条码图像生成的条形码控件Barcode Professional
Barcode Professional for .NET Windows Forms条形码控件是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的.NE ...
- 多功能节点连线绘图控件Nevron Diagram for .NET使用方法及下载地址
Nevron Diagram for .NET是一个功能强大,世界上顶级的.NET图表控件.可扩展的图形报表构架,可以帮您创建功能丰富的Winforms及Webforms图表解决方案.这个产品构建于N ...
- C# WinForm程序向datagridview里添加数据
在C#开发的winform程序中,datagridview是一个经常使用到的控件.它可以以类似excel表格的形式规范的展示或操作数据,我也经常使用这个控件.使用这个控件首先要掌握的就是如何向其中插入 ...
- SharePoint 2013 开发——APP安全模型
博客地址:http://blog.csdn.net/FoxDave 除非开启了SharePoint网站的匿名访问,否则对于入站的请求,必须要有一个身份验证的过程(Authentication),这个 ...
- MySQL表的增删改查和列的修改(二)
一.使用Like模糊查找搜索前缀为以“exam_”开头的表名 show tables like 'exam_%' ; 语句结束符号是:也是用\G来表示 二.MySQL表的CRUD 2.1 创建表: C ...
- ThinkPHP中Session用法详解
在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检 ...
- 安全攻城狮研发技能栈V1.0,附详细点评~
2015-12-21 正宗好PT 正宗好PT 今天公司年会,又木有抽到奖,求安慰/(ㄒoㄒ)/~~ 言归正传,我曾经在推特发过一个Skill CheatSheet,被转发和点赞了几百次,我又更新了一下 ...
- ubuntu添加共享出错
早上设置一个共享目录share. 右键共享,之后系统自动安装软件samba,之后共享出错: "net usershare"返回错误 255:net usershare: canno ...
- js控制打印 转的
很多时候,我们在做系统的时候要做打印功能,打印在js中其实很简单,不过这个很简单的代码并不能满足我们的特定需求,比如我们需要打印的表单在很多文字的中间,或者文字中包含一些广告或者图片什么的,这就很难用 ...
- Jira中Activity Stream中显示Localhost不能正常访问的处理
在“介绍”中 “你可以在系统管理页面 编辑此段文字.”将地址改为IP和端口即可