好久没写题解了,今天正好有空(主要是在家里待的都要发霉了 ),就写篇水题题解
(第一版)题解部分
言归正传。这道题其实可以看做是一道最大子段和的模板题,对于这道题,我的思路是:先定义一个数组a,用来标记小白是否获胜,,并全部初始化为 − 100 -100 −100(为什么?先设个悬念),然后读入时查找每一个字符串里是否有 0 0 0,如果有,就在a数组中相应位置标上 1 1 1,其余保持原状。接着暴力求最小子段和,因为要求连胜场数,所以前面的初始化就派上用场了:
因为如果进行一般的求最大子段和, 0 0 0会被纳入其子段中,而如果把 − 100 -100 −100纳入进去,肯定不是最优解,在比较求 m a x max max时会被舍弃,所以不会对结果造成影响。
至于为什么要定义 − 100 -100 −100,是因为 d < 100 d < 100 d<100,考虑最坏情况,若 1 1 1个数组里有 99 99 99个 1 1 1,剩下的 − 100 -100 −100也能起到很好的作用来使其被舍弃。
求完之后,直接输出结果就是了。
Code:
#include <bits/stdc++