1. 程式人生 > 其它 >2022 Google Kick Start Round A

2022 Google Kick Start Round A

AC程式碼

Speed Typing

當且僅當\(P\)\(I\)的子序列時,可行,然後答案是\(|I| - |P|\)

Challenge Nine

有一個經典的結論:x是9的倍數 等價於 x的各數位之和為9的倍數。然後有隻能插入1到9,所以插入的數字只有一種可能,記其為\(I\)

然後就是找個最優的位置插入就可以了,即找到第一個大於\(I\)的數\(J\),然後將\(I\)插在\(J\)前面,沒有符合條件的\(J\)就插到末尾。

Palindrome Free Strings

Test Set 1直接暴力列舉都可以。

Test Set 2可以dp做,假設\(dp_{i, j}\)表示:對於長度為\(i\)

的字首,且字首長度為5的字尾轉成10進位制數後為\(j\)的狀態,這一狀態是否可達。

為什麼考慮的字尾長度是5呢,因為長度大於7的迴文串必定包含長度為5或者長度為6的迴文子串,維護長度為5的字尾就足以維護再加一位,是否會形成長度為5或者6的迴文串。這樣轉移方程就有了。

特判一下長度小於5的情況;

其餘情況就是初始化一下\(dp_4\),然後DP跑出可達性,看是否可以到達\(dp_{n - 1}\)即可。

Interesting Integers

Test Set 1直接暴力列舉,然後可以藉助預處理字首和優化。

Test Set 2可以數位DP做,但是太久沒寫了一直沒調出來,賽後才調出來。

首先,經典字首和,假設\(f(x)\)

表示\(0\)\(x\)之間的答案,那麼\(A\)\(B\)的答案就是\(f(B) - f(A - 1)\)。然後就只需要算\(f(x)\)了。

然後,數位和的可能性其實只有108種,可以列舉數位和分別算,然後累加起來就可以了。記\(f(x, S)\)\(0\)\(x\)之間,數位和為S的答案。

然後就是數位DP板子題了,多考慮一下前導0而已。