日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

noip2016 组合数问题

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 noip2016 组合数问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

組合數(shù)表示的是從n個(gè)物品中選出m個(gè)物品的方案數(shù)。舉個(gè)例子,從(1,2,3) 三個(gè)物品中選擇兩個(gè)物品可以有(1,2),(1,3),(2,3)這三種選擇方法。根據(jù)組合數(shù)的定 義,我們可以給出計(jì)算組合數(shù)的一般公式:

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

小蔥想知道如果給定n,m和k,對(duì)于所有的0 <= i <= n,0 <= j <= min(i,m)有多少對(duì) (i,j)滿(mǎn)足是k的倍數(shù)。

輸入輸出格式

輸入格式:

?

第一行有兩個(gè)整數(shù)t,k,其中t代表該測(cè)試點(diǎn)總共有多少組測(cè)試數(shù)據(jù),k的意義見(jiàn) 【問(wèn)題描述】。

接下來(lái)t行每行兩個(gè)整數(shù)n,m,其中n,m的意義見(jiàn)【問(wèn)題描述】。

?

輸出格式:

?

t行,每行一個(gè)整數(shù)代表答案。

?

輸入輸出樣例

輸入樣例#1:
1 2 3 3 輸出樣例#1:
1 輸入樣例#2:
2 5 4 5 6 7 輸出樣例#2:
0 7

說(shuō)明

【樣例1說(shuō)明】

在所有可能的情況中,只有是2的倍數(shù)。

【子任務(wù)】

終于開(kāi)始填noip的坑了.

分析:其實(shí)對(duì)于組合數(shù),我們有一個(gè)公式:c[i][j] = c[i-1][j-1] + c[i-1][j],但是如果n達(dá)到2000,這個(gè)數(shù)可能會(huì)超級(jí)大,于是蒟蒻的我在考場(chǎng)上寫(xiě)高精度......其實(shí)完全不需要,既然要求mod k = 0的個(gè)數(shù),那么我們可以利用公式(a + b) mod c == (a mod c + b mod c) mod c,然后每算出一個(gè)c,我們就能根據(jù)它是不是0來(lái)判斷它是不是k的倍數(shù),那么如何求c[0][0]到c[n][m]整除k的個(gè)數(shù)呢?一般而言,求和要用到前綴和,本題要用到二維前綴和,sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + ok[i][j],優(yōu)化一下時(shí)間,看到t很大,先預(yù)處理(2000,2000)的組合數(shù)即可.

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <string>using namespace std;int t, k, n, m,ans[2010][2010],c[2010][2010],ok[2010][2010];void init() {c[0][0] = 1;for (int i = 1; i <= 2000; i++){c[i][0] = 1;for (int j = 1; j <= i; j++){c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % k;if (c[i][j] == 0)ok[i][j] = 1;}}for (int i = 1; i <= 2000; i++)for (int j = 1; j <= 2000; j++)ans[i][j] = ans[i - 1][j] + ans[i][j - 1] - ans[i - 1][j - 1] + ok[i][j]; }int main() {scanf("%d%d", &t, &k);init();for (int i = 1; i <= t; i++){scanf("%d%d", &n, &m);printf("%d\n", ans[n][m]);}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/zbtrs/p/7242568.html

總結(jié)

以上是生活随笔為你收集整理的noip2016 组合数问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。