#P1002. Lonely Photo

Lonely Photo

美国计算机奥林匹克竞赛(USACO)2021年12月竞赛,青铜组

问题1. 孤独的照片

农夫约翰最近新购入了NN头奶牛(3N5×1033\leq N\leq 5\times10^{3}),每头奶牛的品种要么是更赛牛(Guernsey),要么是荷斯坦牛(Holstein)。

奶牛们现在排成一排,农夫约翰想要给每一个三头或三头以上连续奶牛的序列拍照。然而,他不想拍那种只有一头更赛牛或者只有一头荷斯坦牛的照片——他认为这种单独的奶牛会感到孤立和不自在。在给所有三头或更多头奶牛的序列拍完照后,他会扔掉所有这种所谓的“孤独”照片,也就是那些只有一头更赛牛或者只有一头荷斯坦牛的照片。

根据奶牛的排列顺序,帮助农夫约翰确定他要扔掉多少张孤独的照片。如果两张照片在排列中的起始奶牛或结束奶牛不同,那么这两张照片就是不同的。

输入格式(输入来自终端/标准输入)

输入的第一行包含NN

第二行包含一个由NN个字符组成的字符串。如果队伍中第ii头奶牛是更赛牛,那么第ii个字符是“G”;否则,该字符将是“H”,表示第ii头奶牛是荷斯坦牛。

输出格式(将输出打印到终端/标准输出)

请输出农夫约翰因为照片是孤独的而要扔掉的照片数量。

样例输入:

5
GHGHG

样例输出:

3

在这个例子中,每个长度为3的子串都恰好包含一头更赛牛或者一头荷斯坦牛——所以这些子串代表孤独的照片,会被农夫约翰扔掉。所有更长的子串(如GHGH、HG HG和GHGHG)对他来说是可以接受的。

评分标准:

  • 测试用例2到4满足N50N\leq50
  • 测试用例5到10满足N5000N\leq5000
  • 更具挑战性的是,测试用例11没有其他限制条件。请注意,这种情况下的答案可能太大,无法用标准的32位整数表示,可能需要使用更大的整数类型(例如,C++中的64位“long long”整型)。