1. 程式人生 > >bzoj4870&luogu3746 [六省聯考2017]組合數問題

bzoj4870&luogu3746 [六省聯考2017]組合數問題

題目的大意就是要求我們從n*k個數字中選擇%k餘r的方案數

這裡寫圖片描述

定義f(i,j)=∑∞t=0Cj+tki
f(i,j)=f(i−1,j)+f(i−1,(j−1) mod k)

這道題我們轉移是用狀態轉移因為每次都是前一個i-1轉移過來的

不妨設當前狀態

1 2 3 4 5 6

a b c d e f

那麼我們開一個矩陣可以知道

1 2 3 4 5 6

1 1 1

2 1 1

3 1 1

4 1 1

5 1 1

6 1 1

我一開始初值給錯了,應該給0~k-1中每個ii都給1

因為我們知道這相當於給取i個為1留了一種可能

#include<cstdio>
#include<cstring>
#define N 55
struct matrix{
    int f[N][N],l,c;
}ans,m;
int n,p,k,r;
inline matrix multiply(matrix a,matrix b){
    matrix c;memset(c.f,0,sizeof(c.f));
    c.l=a.l;c.c=b.c;
    for
(int i=0;i<a.l;++i) for (int j=0;j<b.c;++j) for (int z=0;z<a.c;++z){ c.f[i][j]=((long long) a.f[i][z]*b.f[z][j]%p+c.f[i][j])%p; } return c; } int main(){ freopen("3746.in","r",stdin); scanf("%d%d%d%d",&n,&p,&k,&r);long
long t=(long long)n*k; m.c=m.l=k; for (int i=0;i<k;++i) m.f[i][i]++,m.f[(i-1+k)%k][i]++; ans.c=k;ans.l=k; for (int i=0;i<k;++i) ans.f[i][i]=1; for (;t;t>>=1,m=multiply(m,m)){ if (t&1) ans=multiply(m,ans); } printf("%d",ans.f[0][r]); return 0; }

相關推薦

bzoj4870&luogu3746 [2017]合數問題

題目的大意就是要求我們從n*k個數字中選擇%k餘r的方案數 定義f(i,j)=∑∞t=0Cj+tki f(i,j)=f(i−1,j)+f(i−1,(j−1) mod k) 這道題我們轉移是用狀態轉移因為每次都是前一個i-1轉移過來的 不妨設當前狀

2017 合數問題

矩陣快速冪 問題 div set 合數 node href urn turn 題鏈 SOL: 可以把原題看做在n*k個數裏選p個數且p%k=r, 有DP f[i][j]=f[i-1][j]+f[i-1][j-1] 矩陣快速冪加速轉移即可。 #include<

P3746 [2017]合數問題

P3746 [六省聯考2017]組合數問題 \(dp_{i,j}\)表示前\(i\)個物品,取的物品模\(k\)等於\(r\),則\(dp_{i,j}=dp_{i-1,(j-1+k)%k}+dp_{i-1,j}\) \(dp_{i,0},dp_{i,1},dp_{i,2}.....dp_{i,k-1}\)

【[2017]合數問題】

好水啊 但是我傻啊 我們設\(dp[i][j]=\sum_{t=0}^{∞}\binom{ik}{j+tk}\) 根據組合數萬年不變的遞推式\(\binom{n}{m}=\binom{n-1}{m-1}+\binom{n-1}{m}\) 我們有\(dp[i][j]=dp[i-1][j]+dp[i-1]

洛谷3746 [2017]合數問題

標籤:組合數,矩陣快速冪,倍增 題目 題目傳送門 題目描述 組合數 C(n,m) 表示的是從 n 個互不相同的物品中選出 m 個物品的方案數。舉個例子,從 (1;2;3) 三個物品中選擇兩個物品可以有 (1;2);(1;3);(2;3) 這三種選擇

【BZOJ 4870】【2017合數問題

其實我剛看到題目跟大部分人的反應是一樣的,暴力Lucas定理。。。 後來發現沒說模數一定是質數,那沒事還是能騙好多分的。 然而事實上是那些暴力分根本用不到Lucas定理。。。 正解: 所求式子的

[2017]相逢是問候

多少 i++ ans 問題 不用 .... int out content 相逢是問候 2017-09-09 Description Informatikverbindetdichundmich. 信息將你我連結。B君希望以維護一個長度為n的數組,這個數組的下標為從1到

[2017]分手是祝願

return inline c++ www. bits 有關 const fin def 題面在這裏 題意 有n盞燈,當前狀態為亮或者不亮,當改變第x盞燈的開關狀態時(由亮變暗,由暗變亮),為x約數編號的燈也會改變開關狀態 B先生先隨機操作,當存在一種能使用小於k的操作次數

2017 期末考試

++ hsb += esp mes signed scan fine href 題鏈 SOL:我們枚舉最晚的一門學科在什麽時候出成績,統計答案即可。 我們考慮兩種方法,搞一搞就好了。 #include<bits/stdc++.h> #define N

[2017]壽司餐廳

pty urn pos www. pen all for || space 題鏈 這道題長著網絡流的數據範圍。 最大權閉合子圖問題 跑最小割 #include<bits/stdc++.h> #define eho(x) for(int& i

2017 Day1

bool IT uil body res == read putchar HR 2018.3.18 Test 時間:3.5h 得分:太zz不寫了(T3 60暴力分就我沒看。。) T1 BZOJ.4868.[六省聯考2017]期末考試 題目鏈接 /* 所有人都只與最大的bi有

洛谷 P3750 [2017]分手是祝願

splay pen log pro names ios include for lap 傳送門 題解 //Achen #include<algorithm> #include<iostream> #include<cstring> #

洛谷P3747 [2017]相逢是問候

solution AC print int geo typename uil color tps 傳送門 題解 擴展歐拉定理。 線段樹維護,已經全改到底了的節點就不管,不然暴力修改下去。 //Achen #include<algorithm> #includ

洛谷P3745 [2017]期末考試

close tin cto ide include efi vector play mil 傳送門 題解 //Achen #include<algorithm> #include<iostream> #include<cstring>

洛谷P3749 [2017]壽司餐廳

傳送門 分享圖片 pro name 直接 ostream AR sed splay 傳送門 題解 這幾道都是上周llj講的題,題解也寫得十分好了,所以直接貼了幾個鏈接和代碼。 //Achen #include<algorithm> #include<i

[BZOJ4868][2017]期末考試(三分)

min -s www. def 聽說 const 調整 n) res 4868: [Shoi2017]期末考試 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 964 Solved: 439[Submit][Statu

[BZOJ4873][2017]壽司餐廳(最大權閉合子圖)

矩陣 size problem fin rep min 現在 相互 情況 4873: [Shoi2017]壽司餐廳 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 490 Solved: 350[Submit][Sta

P3750 [2017]分手是祝願(期望+DP)

nbsp name space 現在 處理 math ans tor getc 題解 很容易想出來最優策略是什麽。 就是從n到1看到開著的燈就把它關了 我們預處理出當前狀態把燈全部關閉後的最少步數cnt 然後我們的主人公就要瞎按。。。 設dp[i]代表當前狀態最優解為

BZOJ4869 2017相逢是問候(線段樹+尤拉函式)

  由擴充套件尤拉定理,a^(a^(a^(……^x)))%p中x作為指數的模數應該是φ(φ(φ(φ(……p)))),而p取log次φ就會變為1,也即每個位置一旦被修改一定次數後就會變為定值。線段樹維護區間剩餘修改次數的最大值,暴力修改即可。   可以預處理出每個位置進行k次操作後的值。直接計算是log^3的

P3749 [2017]壽司餐廳 最小割

\(\color{#0066ff}{ 題目描述 }\) Kiana 最近喜歡到一家非常美味的壽司餐廳用餐。 每天晚上,這家餐廳都會按順序提供 \(n\) 種壽司,第 \(i\) 種壽司有一個代號 \(a_i\) 和美味度 \(d_{i, i}\) ,不同種類的壽司有可能使用相同的代號。每種壽司的份數都是無