@hdu - 6372@ sacul

目錄

  • @description@
  • @solution@
  • @accepted code@
  • @details@

@description@

定義矩陣 \(A_i\) 是一個大小為 \(p^i*p^i\) 的矩陣,其中 \(p\) 是第 \(c\) 個素數(c 給定),且 \(A_i[x][y] = [C(x, y) \mod p > 0]\)(其中 C(x, y) 是組合數)。
行列從 0 開始計數。

再定義 \(F[i][j]\) 表示 \((A_i)^j\) 中所有元素之和。

\(\sum_{i=1}^n\sum_{j=1}^{k}F[i][j]\)。對 10^9 + 7 取模。

Input
第一行包含一個整數 T,然后接下來是 T 組數據:
每一組數據包含三個整數 c, n, k (0 < n ≤ 10^9, 0 < c, k ≤ 10^5)。意義如上。

Output
對于每組數據,輸出一個整數表示答案。

Sample Input
1
1 1 1
Sample Output
3

@solution@

看上去這個題非常不可做,先定義了一個矩陣,然后又要求矩陣冪,然后又要把這個矩陣冪中所有元素求和,然后又要把這些矩陣求和的結果再求和。
但是你只需要找到突破口,剩下的部分就一氣呵成(其實一氣呵成這個詞不能這么用。。。今年中考考了這玩意兒,然后做錯了,所以印象深刻。。。)
怎么找突破口?你只需要把題目倒過來讀注意到矩陣的定義涉及到組合數對素數取模,于是就可以牽扯出 lucas 定理。

lucas 定理是什么?其實很簡單。對于 \(C(n, m) \mod p\),我們將 n, m 拆成 p 進制數的形式,即 \(n = n_0 + n_1*p^1 + ..., m = m_0 + m_1*p^1 + ...\)
于是 lucas 定理告訴我們:\(C(n, m) = C(n_0, m_0)*C(n_1, m_1)*... \mod p\)
證明這個定理也不難,只是與這道題無關所以暫且不提。

很顯然 \(C(n, m) \mod p \ge 0\),所以我們只需要判斷 \(C(n, m) \mod p = 0\) 是否成立即可。
又因 \(n_i < p, m_i < p\) (因為是 p 進制嘛),所以 \(C(n_i, m_i)\) 不可能含因子 p,故我們只需要對于每一個 i 判斷是否 \(C(n_i, m_i) = 0\),而前面那個等價于 \(n_i > m_i\)
所以 \(A_i[x][y]\) 為 1 等價于在 p 進制下 x 的每一位都 ≤ y 的對應位。

現在考慮 \((A_i)^j[x][y]\) 怎么求。
先試著考慮 \((A_i)^2[x][y]\),可以發現 \((A_i)^2[x][y] = \sum_{z}A_i[x][z]*A_i[z][y]\),只有當 \(A_i[x][z], A_i[z][y]\) 都為 1 時才會產生貢獻。
這有點兒像偏序的關系,因為有些傳遞性和偏序形成鏈的感覺在里面。
或者用圖論的語言,如果 \(A_i[x][y] = 1\) 則 x 向 y 連邊。則 \((A_i)^2[x][y]\) 則有點兒像走兩步(中途可以停留在原地)從 x 到達 y 的方案數。
從而簡單推廣,可以得到 \((A_i)^j[x][y]\) 表示走 j 步從 x 到達 y 的方案數。

那么 F[i][j] 的含義是什么?為了計數的方便我們暫且不用圖論的語言描述。
F[i][j] 表示長度為 i 的 p 進制的數字串,選出 j+1 個記為 s0, s1, ... sj,對于第 x 位(1≤x≤n)始終滿足 s0[x] ≤ s1[x] ≤ ... ≤ sj[x] 的方案總數。
怎么求 F[i][j] 呢?其實也比較簡單。因為每一位都是獨立的,所以考慮某一位然后乘法原理乘起來即可。
我們發現如果確定了 s0[x], s1[x], ..., sj[x] 分別是哪些數,它們的順序始終是一定的(即排序過后的順序)。所以我們相當于是求 x1 + ... + xp = j + 1 的非負整數解的個數。經典的組合數學問題,答案為 C(j+p, j+1)。
于是 F[i][j] = C(j+p, j+1)^i。

于是 \(\sum_{i=1}^n\sum_{j=1}^{k}F[i][j] = \sum_{i=1}^n\sum_{j=1}^{k}C(j+p, j+1)^i = \sum_{j=1}^{k}\sum_{i=1}^nC(j+p, j+1)^i\)
枚舉 j 然后等比數列求和即可。
注意 C(j+p, j+1) 與 C(j+p+1, j+1+1) 之間實際上是有倍數的關系(你可以把它們拆成階乘形式以觀察到這一點)。于是我們可以直接遞推而不用預處理階乘。

@accepted code@

#include<cstdio>
const int MAXM = 1299709;
const int MOD = int(1E9) + 7;
int pow_mod(int b, int p) {int ret = 1;while( p ) {if( p & 1 ) ret = 1LL*ret*b%MOD;b = 1LL*b*b%MOD;p >>= 1;}return ret;
}
int prm[MAXM + 5], pcnt;
bool nprm[MAXM + 5];
void init() {for(int i=2;i<=MAXM;i++) {if( !nprm[i] )prm[++pcnt] = i;for(int j=1;1LL*i*prm[j]<=MAXM;j++) {nprm[i*prm[j]] = true;if( i % prm[j] == 0 )break;}}
}
int solve(int p, int n, int k) {int ans = 0, tmp = p;for(int j=1;j<=k;j++) {tmp = 1LL*tmp*(j + p)%MOD*pow_mod(j + 1, MOD - 2)%MOD;if( tmp == 1 )ans = (ans + n)%MOD;else ans = (ans + 1LL*(pow_mod(tmp, n + 1) - 1)*pow_mod(tmp - 1, MOD-2)%MOD - 1)%MOD;}return (ans + MOD)%MOD;
}
int main() {init();int T; scanf("%d", &T);for(int i=1;i<=T;i++) {int c, n, k; scanf("%d%d%d", &c, &n, &k);printf("%d\n", solve(prm[c], n, k));}
}

@details@

似乎總喜歡廢話很多。。。明明一個不是很復雜的題目卻寫了這么多東西。。。

這道題有一個點就是:等比數列要特判公比為 1 的情況。
。。。雖然數學上經常考這個東西,不過還是沒記住。。。

轉載于:https://www.cnblogs.com/Tiw-Air-OAO/p/11147167.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277343.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實驗室里人越來越少啊!

研二下半學期了。研三的師哥師姐們都忙著找工作&#xff0c;有的已經去工作了。只是偶而來實驗室轉轉。研一的師弟師妹&#xff0c;現在還都有課&#xff0c;實驗室也沒他們的機器&#xff0c;所以幾乎不來實驗室。我們研二的有四個人&#xff0c;兩個北京的。其中一個在外面打…

在一臺機器上搭建多個redis實例

默認Redis程序安裝在/usr/local/redis目錄下&#xff1b; 配置文件&#xff1a;/usr/local/redis/redis.conf&#xff0c;該配置文件中配置的端口為默認端口&#xff1a;6379&#xff1b; Redis的啟動命令路徑&#xff1a;/usr/local/bin/redis-server。 可以指定端口啟動多個R…

2年前 影子

1. 請問您知道 xxxx嗎 ? 麻煩了您? 2. 您在公司待了多長時間了&#xff1f; 3. 您覺得公司怎么樣&#xff1f; 。。。。。。 待續&#xff01; 轉載于:https://www.cnblogs.com/nucdy/p/11151470.html

linux是只讀添加 來覆蓋,Linux之指令 重定向 文件覆蓋和文件追加

CXF支持 SOAP1&period;1 SOAP1&period;2協議SOAP協議分為兩個版本 1.1 1.2 默認支持1.1 實現方式: 1.編寫接口 import javax.jws.WebService; WebService public inte ...USACO Section 2&period;4&colon; Bessie Come Home因為題目給了邊的信息,所以比較…

分層架構web容器的配置安全

轉自&#xff1a;http://hi.baidu.com/shineo__o/item/7520d54c24d234c71081da82 /ps:本以為這是一個偶然配置失誤造成的問題&#xff0c;但最近幾天無聊時測試發現&#xff0c;有此類似問題的站點就有上百個&#xff0c;所以在這里粗糙總結一下&#xff01; 通常我們會碰到這樣…

Jenkins-Gitlab配置方法

1&#xff09;本機首先安裝好git軟件2&#xff09;然后安裝gitlab插件,在可選插件中查找gitlab,點擊直接安裝3&#xff09;然后進入系統管理-系統設置 首先進入Gitlab中復制需要的 token 值在 Profile Settings - Account把復制的值&#xff0c;復制到新增頁面中轉載于:https:…

高速緩沖存儲器的功能、結構與工作原理

2.3 高速緩沖存儲器&#xff08;Cache&#xff09; 2.3.1 高速緩沖存儲器的功能、結構與工作原理   高速緩沖存儲器是存在于主存與CPU之間的一級存儲器&#xff0c; 由靜態存儲芯片(SRAM)組成&#xff0c;容量比較小但速度比主存高得多&#xff0c; 接近于CPU的速度。 Cache…

洛谷 P1417 烹調方案 (01背包拓展)

一看到這道題就是01背包 但是我注意到價值和當前的時間有關。 沒有想太多&#xff0c;直接寫&#xff0c;0分 然后發現輸入方式不對…… 改了之后只有25分 我知道wa是因為時間會影響價值&#xff0c;但不知道怎么做。 后來看了題解&#xff0c;發現我對01背包理解不夠透徹普通0…

LeetCode 77.組合求和

給定一個無重復元素的數組 candidates 和一個目標數 target &#xff0c;找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的數字可以無限制重復被選取。 說明&#xff1a; 所有數字&#xff08;包括 target&#xff09;都是正整數。解集不能包含重復的組合…

18函數對象19command模式20函數對象在STL中的應用

Item 18. Function ObjectsItem 19. Commands and HollywoodItem 20. STL Function Objects1、unction Objects是什么函數對象聽起來挺嚇人&#xff0c;其實并不神秘&#xff0c;它也是一個類的對象&#xff0c;只不過該類重載了操作符(),使得對象使用以來跟函數一樣。class Fi…

linux df命令功能,Linux df命令簡要介紹

日常工作生活中&#xff0c;我們常需要查看系統當前的磁盤空間使用情況。在windows下&#xff0c;只需簡單點擊我的電腦&#xff0c;就看到帶進度條的系統磁盤使用情況&#xff0c;非常直觀。那linux命令行下如何實現同樣的功能呢&#xff1f;這就是我們今天要介紹的df命令。df…

spring集成RabbitMQ配置文件詳解(生產者和消費者)

1&#xff0c;首先引入配置文件org.springframework.amqp&#xff0c;如下&#xff1a; <dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId><version>1.7.1.RELEASE</version></de…

一天的學習成果:hash輸出,dcache工作原理,include的home directory,fist optype的含義...

最先獲得突破的是解決了下午的崩潰問題。其實原因很簡單&#xff0c;我聲明了一個unsigned int型指針&#xff0c;但是沒有給它分配空間…… 解決了這個問題之后就很簡單了&#xff0c;調用定義在linux/dcache.c文件中的full_name_hash函數對文件名進行hash計算。這里發現了一個…

linux顯示fio為非法指令,FORTRAN運行錯誤消息列表中英對照.doc

FORTRAN運行錯誤消息列表中英對照Fortran的運行時錯誤消息列表本節列出了英特爾Fortran運行時庫(RTL)處理的錯誤。對于每一個錯誤&#xff0c;該表提供了錯誤號&#xff0c;嚴重性代碼&#xff0c;錯誤信息文本&#xff0c;條件符號名稱&#xff0c;而錯誤的詳細說明。在程序中…

各種證書

軟考高級信息系統項目管理師https://www.zhihu.com/question/29904891 轉載于:https://www.cnblogs.com/trumbull/p/11154514.html

linux面試題中的簡答題,[計算機]linux面試題簡答題部分.doc

[計算機]linux面試題簡答題部分linux面試題(簡答題部分)2 簡述進程的啟動、終止的方式以及如何查看進程&#xff1f;答&#xff1a;啟動進程的方式分為手動啟動和自動啟動兩種方式,其中手動啟動的方法用services 服務名 start;或者是./腳本名稱,自動啟動進程的方法有將進程服務…

const用法

const的用法很讓人葷菜&#xff0c;現在總結以下&#xff1a;1&#xff0c;必須初始化2&#xff0c;作為函數的參數是個好習慣&#xff0c;const在*號左邊所指常量值&#xff0c;在右邊所指的是常量指針3&#xff0c;const成員函數的目的是指明該函數可以在const對象上調用,也就…

Multiverse: Revolutionary Backend for Alembic // Multiverse: 下一代Alembic后端

J CUBE&#xff0c;日本最大的動畫公司Polygon Picture&#xff08;以下簡稱PPI&#xff09;公司成立的專職R&D公司隆重推出Multiverse&#xff0c;下一代Alembic存儲后端。 我們還開發了針對Autodesk Maya的工具&#xff0c;運用Multiverse在流程中。 "multiverse&qu…

c語言 程序延時 校準,c語言實現系統時間校正工具代碼分享

//*******************************************************************//Time Protocol是一種非常簡單的應用層協議。它返回一個未格式化的32位二進制數字,//這個數字描述了從1900年1月1日午夜到現在的秒數。服務器在端口37監聽協議請求&#xff0c;以//TCP/IP或者UDP/IP格式…

近半年能力沒進步原因分析與求助

2019獨角獸企業重金招聘Python工程師標準>>> 20180907 思維方式有缺陷&#xff0c;想到的解決方法經常不是最有效率的。導致工作時間內基本沒自由學習的時間。 業余時間不夠專注&#xff0c;學習方向經常變&#xff0c;沒能堅持搞透一個點就換書看&#xff0c;沒有總…