link
【noi 2015】壽司晚宴
description
求滿足以下條件的集合 a,
b a,b
對數:資料範圍 n≤
500 n
≤500
。solution
這題看似很難處理。這時我們就需要觀察題目的特殊性質。考慮對於
≤500‾‾
‾‾√ ≤
500的素因子和
>
500‾‾‾
‾√>
500的素因子分別計算。發現
≤500‾‾
‾‾√ ≤
500的素因子只有
8 8
個,分別是 2,
3,5,
7,11,
13,17,
19' role="presentation" style="position: relative;">2,3
,5,7
,11,13
,17,19
2,3,
5,7,
11,13,
17,19。對於所有 2≤
n≤500 2≤n
≤500
,n n
都可以被分解成 n=
2x1×
3x2×
⋯×19x
8×p' role="presentation" style="position: relative;">n=2
x1×3
x2×⋯
×19x8
×pn=
2x1×
3x2×
⋯×19x
8×p。其中
p p
為 1' role="presentation" style="position: relative;">1
1或素數。注意到不可能出現 p2
p
2的情況。考慮對於每個不同的
p p
計算它會被分到那個集合中。設 f
[mas
ka][
mask
b]' role="presentation" style="position: relative;">f[m
aska
][ma
skb]
f[ma
ska]
[mas
kb]表示
≤500‾‾
‾‾√ ≤
500的素因子在
a a
集合的出現狀態為 ma
ska' role="presentation" style="position: relative;">mas
kama
ska,在
b b
集合中的出現狀態為 ma
skb' role="presentation" style="position: relative;">mas
kbma
skb的方案數。對於每個不同的
p p
分別計算。g[
a or
b][m
aska
][ma
skb]
' role="presentation" style="position: relative;">g[a
orb][
mask
a][m
askb
]g[a
orb][
mask
a][m
askb
]表示
p p
被分給
a' role="presentation" style="position: relative;">a
a集合或
b b
集合,≤500
' role="presentation" style="position: relative;">≤
500‾‾‾
‾√≤500
的素因子在
a a
集合的出現狀態為 ma
ska' role="presentation" style="position: relative;">mas
kama
ska,在
b b
集合中的出現狀態為 ma
skb' role="presentation" style="position: relative;">mas
kbma
skb的方案數。
計算出
g g
後,再用它更新
f' role="presentation" style="position: relative;">ff。
f[ma
ska]
[mas
kb]=
g[a]
[mas
ka][
mask
b]+g
[b][
mask
a][m
askb
]−f[
mask
a][m
askb
] f[m
aska
][ma
skb]
=g[a
][ma
ska]
[mas
kb]+
g[b]
[mas
ka][
mask
b]−f
[mas
ka][
mask
b]
。要減去 f[
mask
a][m
askb
] f[m
aska
][ma
skb]
是因為兩個集合都不選
p p
的情形被計算了兩次。時間複雜度: θ(
n×22
⋅primecount(n
))' role="presentation">θ(n
×22⋅
primecount(n
√))θ
(n×2
2⋅primecount(n
))code
#include
#include
using
namespace
std;
const
int maxn = 505;
const
int maxs = 305;
const
int prime = ;
int n;
long
long m, f[maxs][maxs], g[2][maxs][maxs];
struct number
} a[maxn];
void upd(long
long &a, long
long b)
int main() }}
a[i].left = temp;
}sort(a + 2, a + n + 1);
f[0][0] = 1;
for (int k = 2; k <= n; k++) }}
for (int i = 255; i >= 0; i--)
}if (k == n || a[k].left == 1 || a[k].left != a[k + 1].left) }}
}long
long ans = 0;
for (int i = 0; i < 256; i++) }}
printf("%lld\n", ans % m);
return
0;}
NOI 2015 壽司晚宴
description 為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了 n 1 種不同的壽司,編號 1,2,3,n 1,其中第 i 種壽司的美味度為 i 1 即壽司的美味度為從 2 到 n...
NOI 2015 壽司晚宴
4197 noi2015 壽司晚宴 time limit 10 sec memory limit 512 mb submit 813 solved 508 submit status discuss description 為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 ...
NOI2015 壽司晚宴
題目 這是一篇需要龜速乘的思博題解 我們考慮一下 n leq 30 的睿智暴力,顯然質因數個數少得一批,互質的條件又等價於沒有公共的質因子,所以我們直接狀壓質因子,dp i s 1 s 2 表示前 i 個數考慮完了,第乙個人選擇的質因子狀態為 s 1 第二個人選擇的質因子狀態為 s 2 轉移的話就考...