Atcoder AGC024 C F簡要題解

2021-09-13 19:45:12 字數 3174 閱讀 2737

ans

=∑i=

2,ai

>0n

([ai

=ai−

1+1]

+[ai

≠ai−

1+1]

ai

)ans =\sum\limits_^n([a_i=a_+1]+[a_i\neq a_+1]a_i)

ans=i=

2,ai

​>0∑

n​([

ai​=

ai−1

​+1]

+[ai

​̸​=

ai−1

​+1]

ai​)(u

,v

)(u,v)

(u,v

)同色的條件:找到(u,

v)

(u,v)

(u,v

)路徑上的中點(一條邊/乙個點),中點的所有子樹同構的,且染色種類數為max

de

pmaxdep

maxdep

,所以找到樹的直徑d

dd,第一問答案即⌊d2

⌋\lfloor\frac\rfloor

⌊2d​⌋。

如果新增的位置值與原來這個位置的值相等,那麼可以認為填的是後面乙個位置而不是這個位置。

所以假設填的數是x

xx,要麼填在末位,要麼它後乙個位置的數嚴格<

x在序列末端添乙個0

00,每次在乙個位置填數並向它後乙個位置連邊,那麼這就是乙個樹,滿足以下條件: 設dp[

i][j

]dp[i][j]

dp[i][

j]表示i

ii個點,wro

ot=j

w_=j

wroot​

=j的方案數,列舉t

tt最小的兒子轉移:

d p[

i][j

]=∑k

=1i−

1(i−

2k−1

)dp[

i−k]

[j]∑

d=j+

1kdp

[k][

d]

dp[i][j]=\sum\limits_^\binomdp[i-k][j]\sum\limits_^kdp[k][d]

dp[i][

j]=k

=1∑i

−1​(

k−1i

−2​)

dp[i

−k][

j]d=

j+1∑

k​dp

[k][

d]字首和優化後複雜度o(n

2k

)o(n^2 k)

o(n2k)

構造序列自動機,如:

110[00011001]可以轉移到1100[0011001],1101[1001]

其中s [t

]s[t]

s[t]

表示已經選了s

ss,要在t

tt中選乙個子串行拼上。

構圖得到dag

dagda

g,直接dp(逐次求出長度為0−n

0-n0−

n的子串行的方案數,每次只向後轉移一步0/1),複雜度o(2

nn

)o(2^nn)

o(2nn)

。code from wxh010910

#include

using

namespace std;

#define x first

#define y second

#define mp make_pair

#define pb push_back

#define debug(...) fprintf(stderr, __va_args__)

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

int uint;

typedef pair <

int,

int> pii;

typedef

unsigned

long

long ull;

template

<

typename t>

inline

void

read

(t &x)

}for(;

isdigit

(c); c =

getchar()

)if(f)}

template

<

typename t>

inline

bool

checkmax

(t &a,

const t &b)

template

<

typename t>

inline

bool

checkmin

(t &a,

const t &b)

const

int n =

1048580

;const

int m =25;

int n, m, len, ans, f[m]

[n], g[m]

[n];

char s[n]

;int

main()

}}for(

int i =

1; i <= n;

++i)

}for

(int i =

0; i <= n;

++i)}}

for(

int j =(1

<< i)-1

;~j;

--j)}}

for(

int i = len -1;

~i;--i)

putchar(10

);#ifdef wxh010910

debug

("my time: %.3lfms\n",(

double

)clock()

/ clocks_per_sec)

;#endif

return0;

}

Atcoder AGC006 解題報告

給出長度為 n 的字串 s 和 t 求乙個字串滿足 長度至少為 n 字首為 s 字尾為 t 請找出長度最短的這樣的字串並輸出他的長度 資料範圍很小,直接列舉判斷就好了。給出乙個 n 層的方格金字塔,自頂向下依次標號為第 1 到第 n 層。其中第 i 1 le i le n 層有 2i 1 個方格。第...

Atcoder AGC005 解題報告

有乙個字串 x 對它進行操作。該串只含 s 和 t 凡是 s 與 t 連在一起都要將它們一起去掉。現在進行若干次操作直到該串中沒有連在一起的 st 問剩下的長度。考慮用對頂棧模擬。先將所有的字串加入右棧中。依次將乙個字元從右棧中彈出,加入左棧。如果在任意時刻,出現了左棧頂是 s 而右棧頂是 t 那麼...

Atcoder AGC004 解題報告

用若干個 1 times 1 times 的小方塊 立方體 組成乙個 a times b times c 的大長方體,每個小方塊可以塗成紅色或藍色,但要滿足以下要求 至少有 1 個紅色方塊與 2 個藍色方塊。所有的紅色方塊必須組成乙個長方體。所有的藍色方塊必須組成乙個長方體。求所有滿足要求的染色方案...