1. 程式人生 > >【NOIP 2016 提高組】組合數問題

【NOIP 2016 提高組】組合數問題

【題目】

傳送門

題目描述:

組合數 C n m C_{n}^{m} 表示的是從 n n

個物品中選出 m m 個物品的方案數。舉個例子,從 ( 1 , 2 ,
3 ) (1,2,3)
三個物品中選擇兩個物品可以有 ( 1 , 2 )
(1,2)
( 1 , 3 ) (1,3) ( 2 , 3 ) (2,3) 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 C n m C_{n}^{m} 的一般公式:

C n m = n ! m ! ( n m ) ! C_{n}^{m}=\frac{n!}{m!(n-m)!}

其中 n ! = 1 × 2 × . . . × n n!=1×2×...×n ;特別地,定義 0 ! = 1 0!=1

小蔥想知道如果給定 n n m m k k ,對於所有的 0 i n 0≤i≤n 0 j m i n ( i , m ) 0≤j≤min(i,m) 有多少對 ( i , j ) (i,j) 滿足 C i j C_{i}^{j} k k 的倍數。

輸入格式:

第一行有兩個整數 t t k k ,其中 t t 代表該測試點總共有多少組測試資料, k k 的意義見【問題描述】。

接下來 t t 行每行兩個整數 n n m m ,其中 n n m m 的意義見【問題描述】。

輸出格式:
輸出 t t 行,每行一個整數代表所有的 0 i n 0≤i≤n 0 j m i n ( i , m ) 0≤j≤min(i,m) 中有多少對 ( i , j ) (i,j) 滿足 C i j C_{i}^j k k 的倍數。

樣例資料:

【樣例 1 1

輸入
1 2
3 3

輸出
1

【樣例 2 2

輸入
2 5
4 5
6 7

輸出
0
7

備註:

【樣例 1 1 說明】
在所有可能的情況中,只有 C 2 1 C_2^1 2 2 的倍數。

【資料規模與約定】
在這裡插入圖片描述


【分析】

90 pts:

妙啊,暴力 90 90 分啊

其實在考 n o i p noip 的時候, 90 90 分就約等於滿分了吧,反正如果我 t 1 t1 90 90 分了,肯定就把更多的時間花在 t 2 , t 3 t2,t3

要得到這 90 90 分,我們需要知道一個東西,即 C n m = C n 1 m + C n 1 m 1 C_n^m=C_{n-1}^{m}+C_{n-1}^{m-1}

是不是很眼熟,對,這就是楊輝三角的遞推公式啊

所以我們預處理出 2000 2000 以內的所有組合數(邊做邊取模),然後用 O( n m nm )查詢就行了

100 pts:

我離 A A t 1 t1 只差一個字首和。。。

由於每次詢問都是從 0 0 開始的,而且沒有修改,就想到字首和

就是用 a n s n , m ans_{n,m} 表示對於詢問 n , m n,m 的答案(也是預處理出來的)

更新的時候,就是 a n s i , j = a n s i , j 1 + a n s i 1 , j a n s i 1 , j 1 ans_{i,j}=ans_{i,j-1}+ans_{i-1,j}-ans_{i-1,j-1}

如果此時 C i j % k = 0 C_{i}^{j}\% k=0 a n s i , j ans_{i,j} 就加 1 1

(實在不太理解就畫個圖吧,畫個圖應該就明白了)

然後實際操作的時候注意一下邊界的細節問題就行了


【程式碼】

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 2005
using namespace std;
int n,m,t,k;
int C[N][N],ans[N][N];
void init()
{
	int i,j;
	C[0][0]=1;
	for
            
           

相關推薦

NOIP 2016 提高合數問題

【題目】 傳送門 題目描述: 組合數 C n m

NOIP 2016 提高憤怒的小鳥

DH ---------以上初三THU/PKU大爺---- Alan_cty LYD XHM HZJ ZZ ---以下是大神%-- YMW Samjia2000 werkeytom_ftd Crazy_czy WorldWide_D Yxuan

NOIP 2016 換教室

研讀資料,我們發現,28分是可以輕鬆拿到的: 對於的一個點,直接即可。 其餘的標紫色的資料點,跑一遍最短路,依次相加各個教室之間的最短路徑長度即可。 其實,↑ 也是建立在你知道期望是啥的基礎上的。 期望這個東西,本蒟蒻還是沒有理解它的線性.... 有

借教室 NOIP 2016 Day1 T2 線段樹絕對不超時TLE

emmm,不知道說什麼,線段樹吧,不過不進行區間修改的裸的線段樹是不行的,比暴力分還低,我們應該想到區間修改求最小值,也就是把初值賦成每天的教室數量,然後求最小值即可。 區間修改自然是要加lazy 但是,我們不需要求出最小值的值是多少,因此,我們不需要單獨找一遍區間最

noip 2016普及

scrip one clu sel b+ -s 位置 ref print T1.買鉛筆 題目鏈接 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4

NOIP 2017 提高逛公園

【題目】 傳送門 題目描述: 策策同學特別喜歡逛公園。公園可以看成一張 nnn 個點 mmm 條邊構成的有向圖,且沒有自環和重邊。其中 111 號點是公園的入口,nnn 號點是公園的出口,每條邊有一個非負權值,代表策策經過這條邊所要花的時間。 策策每天都會去逛公

NOIP 2008 提高傳紙條

【題目】 傳送門 題目描述: 小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成一個 mmm 行 nnn 列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行

SDNU 1179.金明的預算方案NOIP 2006 提高揹包問題7月30

金明的預算方案 Description 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:“你的房間需要購買哪些物品,怎麼

NOIP 2018 提高貨幣系統

【題目】 傳送門 題目描述: 在網友的國度中共有 n n n 種不同面額的貨幣,第

NOIP 2018 提高鋪設道路

【題目】 傳送門 題目描述: 春春是一名道路工程師,負責鋪設一條長度為 n n n 的道路。

模擬(玩具謎題NOIP 2016 提高 Day 1 第一題vijos2003)

順時針 std 字符 true cnblogs 中一 else point 整數和 描述 小南有一套可愛的玩具小人,它們各有不同的職業。 有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了一個圈,它們有的面朝圈內,有的面朝圈外。如下圖: 這時sin

NOIP 2016 提高 Day2 憤怒的小鳥

http://blog.csdn.net/u011056504/article/details/53367538 原理我懂了 注意到資料範圍:N<=18  有什麼演算法?  暴力?狀壓!  狀壓DP,對於每隻豬1和0表示是否被打掉了  設f[s]為當前狀態的最小

NOIP模擬10-21的士碰撞

min urn cmp dir cnblogs struct noip 開始 format Description ??輛車在一條數軸上,車的編號為1到??。編號為??的車坐標為??[??],初始方 向為??????[??](左或右),初始位置兩兩不同。每輛車每個時刻行

Java入門提高Day5 Java中的回調(二)

彈出對話框 java入門 也會 color 編程 args performed show clas   Java中有很多個Timer,常用的有兩個Timer類,一個java.util包下的Timer,一個是javax.swing包下的Timer,兩個Timer類都有用到回調

Java入門提高Day11 Java代理——JDK動態代理

創建 pri 建立 ret and etc bool 提高 跳舞   今天來看看Java的另一種代理方式——JDK動態代理   我們之前所介紹的代理方式叫靜態代理,也就是靜態的生成代理對象,而動態代理則是在運行時創建代理對象。動態代理有更強大的攔截請求功能,因為可以獲得類的

Java入門提高Day12 Java代理——Cglib動態代理

效率 object urn 而且 什麽 tor clas ams 提高   今天來介紹另一種更為強大的代理——Cglib動態代理。   什麽是Cglib動態代理?   我們先回顧一下上一篇的jdk動態代理,jdk動態代理是通過接口來在運行時動態創建委托類的代理對象,但是跟靜

Java入門提高Day13 Java中的反射機制

== getchar 復制對象 enc 類型判斷 amt sim 博客 contains   前一段時間一直忙,所以沒什麽時間寫博客,拖了這麽久,也該更新更新了。最近看到各種知識付費的推出,感覺是好事,也是壞事,好事是對知識沈澱的認可與推動,壞事是感覺很多人忙於把自己的知識

Java入門提高Day15 Java泛型再探——泛型通配符及上下邊界

編譯器 pan 會有 認識 方法重載 上界 圖片 解決 int   上篇文章中介紹了泛型是什麽,為什麽要使用泛型以及如何使用泛型,相信大家對泛型有了一個基本的了解,本篇將繼續講解泛型的使用,讓你對泛型有一個更好的掌握和更深入的認識。   上篇中介紹完泛型之後,是不是覺得泛型

Java入門提高Day16 Java異常處理(下)

http final 自定義異常 2個 輸入 也有 推薦 錯誤 num   今天繼續講解java中的異常處理機制,主要介紹Exception家族的主要成員,自定義異常,以及異常處理的正確姿勢。 Exception家族   一圖勝千言,先來看一張圖。   Excepti

noip系列——圖論貨車運輸

ble 更新 www 回來 現在 可能 路徑 們的 啊啊啊 P1967 貨車運輸 唔快下課啦我先寫寫思路吧qwq 顯然對於每輛貨車經過的路徑中,邊權最小的邊越大,答案越優 ——>先求一個最大生成樹保證樹上的邊邊權值都盡可能大