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∑
kdp
[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 個藍色方塊。所有的紅色方塊必須組成乙個長方體。所有的藍色方塊必須組成乙個長方體。求所有滿足要求的染色方案...