sdoi《序列計數》

2022-05-31 07:18:17 字數 826 閱讀 9190

題解:碰到計數題都要想想容斥

就跟碰到最大值最小要想想二分一樣

考慮沒有乙個數是質數

那就確定了每乙個數的取值範圍

那麼dp方程很顯然

然後構造矩陣來優化轉移

可以發現每個決策時一樣的 所以矩陣可以一列一列的複製

#include #pragma comment(linker,"/stack:102400000,102400000")

#pragma g++ optimize (「o2」)

using

namespace

std;

#define ll long long

const ll maxn= 2e7+100

;#define mo 20170408ll k,n,m;

bool f[maxn+10

];struct

rea;

re tmp,c;

re xx(re x,re y)

return

(tmp);

}re fastpow(ll x)

intmain()

}for (ll i=1;i<=m;i++)

if (!f[i])

for (ll i=1;i)

for (ll i=1;i<=m;i++)

a.jz2[((-i%k)+k)%k][0]++;

for (ll i=1;i)

re d=fastpow(n);

cout

<<(d.jz2[0][0]-d.jz1[0][0]+mo)%mo;

return0;

}

Sdoi2017 序列計數

alice想要得到乙個長度為n的序列,序列中的數都是不超過m的正整數,而且這n個數的和是p的倍數。alice還希望 這n個數中,至少有乙個數是質數。alice想知道,有多少個序列滿足她的要求。一行三個數,n,m,p。1 n 10 9,1 m 2 10 7,1 p 100 一行乙個數,滿足alice的...

SDOI2017 序列計數

這道題非常的迷幻 首先我們要容斥 考慮記 dp i j 表示前 i 位 p j 的方案數 g i j 表示前 i 位只用合數 p j 的方案數 於是可以考慮最暴力的 dp 是 o nm p 的 但是並沒必要 我們可以提前處理 1 m 這些數 p 的值,用這些值來轉移就好了 也就是額外記乙個 cnt ...

Sdoi2017 序列計數

time limit 30 sec memory limit 128 mb submit 317 solved 210 alice想要得到乙個長度為n的序列,序列中的數都是不超過m的正整數,而且這n個數的和是p的倍數。alice還希望 這n個數中,至少有乙個數是質數。alice想知道,有多少個序列滿...