GCJ Qualification Round 2016 D题

这题就是找规律。小数据仍是挺容易想的。大数据得再深刻分析一下。大数据

题意挺绕的。字符串

其实就是字符串转换。字符串只能有两种字母,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的目标串。这样总的查看字符数量就几乎减小了一半。无论是否是最优解,可是比以前的笨方法确定是高效了。

相关文章
相关标签/搜索