P5691 NOI2001 折半列舉

2021-10-20 22:43:25 字數 1165 閱讀 3148

題意

傳送門 p5691 [noi2001] 方程的解數

題解樸素列舉方程的解進行判斷,時間複雜度 o(m

n)

o(m^n)

o(mn

)。考慮折半列舉,將方程移項

∑ i=

1⌊n/

2⌋ki

xipi

=−∑i

=⌊n/

2⌋+1

nkix

ip

i\sum\limits_^k_ix_i^=-\sum\limits_^k_ix_i^

i=1∑⌊n

/2⌋​

ki​x

ipi​

​=−i

=⌊n/

2⌋+1

∑n​k

i​xi

pi​​

預處理左項的可能解並使之有序,列舉右項的可能解,同時二分求解滿足方程的左項數量。總時間複雜度 o(m

n/

2log⁡(

mn/2

))

o(m^\log (m^))

o(mn/2

log(mn

/2))

#include

using

namespace std;

const

int maxn =

8, maxm =

155, maxt = maxm * maxm * maxm;

int n, m, na, nb, k[maxn]

, p[maxn]

, a[maxt]

, b[maxt]

;int

qpow

(int x,

int n)

return res;

}void

dfs(

int s,

int t,

int x,

int&n,

int*a)

for(

int i =

1; i <= m;

++i)

dfs(s +

1, t, x + k[s]

*qpow

(i, p[s]

), n, a);}

intmain()

P2024 NOI2001 食物鏈 題解

動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示...

洛谷P2024 NOI2001 食物鏈

題目描述 動物王國中有三類動物 a,b,c,這三類動物的食物鏈構成了有趣的環形。a 吃 b,b 吃 c,c 吃 a。現有 n 個動物,以 1 n 編號。每個動物都是 a,b,c 中的一種,但是我們並不知道 它到底是哪一種。有人用兩種說法對這 n 個動物所構成的食物鏈關係進行描述 第一種說法是 1 x...

洛谷 P2024 NOI2001 食物鏈

這是一道並查集的題目。我們先來分析一下題目。有三種動物,a 吃 b,b吃 c,c 吃 a。那麼對於乙個動物來說,另乙個動物就有了三種情況 同類,天敵以及獵物。很容易可以想到,僅僅是利用普通的並查集已經無法滿足需要了,因為我們有三種情況需要表示。僅僅表示同類可以只用一倍長度的陣列,那麼如果是用三種關係...