這題就是找規律。小數據仍是挺容易想的。大數據得再深刻分析一下。大數據
題意挺繞的。字符串
其實就是字符串轉換。字符串只能有兩種字母,L或G。給定K和C,就能經過規則生成目標字符串。方法
那麼,若是知道了K和C,以及目標字符串,那麼是可以倒推出原字符串的。數據
如今問題是,目標字符串也不全給你看,限定你最多看s個。可是呢,也不要求你徹底倒推出原字符串,而是隻須要知道原字符串裏是否是至少有一個G字符便可。字符
小數據極其簡單,爲何呢,由於S=K,而看S個目標串字符徹底能夠倒推出原字符串啊。生成
由於原串的第1個字符,會在目標串的第1個字符;原串的第2個字符,會在目標串的第K+2個字符;原串的第3個字符,會在目標串的第2*K+3個字符……
然而,僅僅爲了知道原串中是否是至少有一個G字符,必然不須要看這麼多。因而繼續分析。
例如,當K=5, C=2時,原串共有2^5=32種可能,相應的目標串(長度爲25)也有32種,因此,咱們最原始的方法,就是在這32種目標串裏,每次選一個字符,以篩掉一半,最後去找那個所有爲L的目標串(只有這一種纔不含G字符,別的狀況都含有G字符)。
然而經過將這32個目標串列出來發現,其實能夠經過選擇特定字符,一會兒篩掉超過一半。
好比,第一次不是選1號字符,而是選擇2號字符。若是2號字符爲L,那麼不只說明原串的1號字符是L,並且2號字符也是L,這樣一會兒就能篩掉3/4的目標串。
同理,第二次選2*K+4號字符……,這樣又能篩掉3/4的目標串。這樣總的查看字符數量就幾乎減小了一半。無論是否是最優解,可是比以前的笨方法確定是高效了。