均分01

January 22, 2014

真是无语,刚才写了一遍,添加博客标签的时候,浏览器自动刷新了一下,

然后tm写的东西就没有了!!还得重写。。

开始没懂,学弟给讲的==

感觉很厉害的样子。

可以切分一次。
不管什么串,一定可以切分两次完成。

证明:

  把这个串的首尾相连,设连接点是A,串的中点是B,设直线AB是L,L的左右的0的个数不相等,不妨设左边大于右边。顺时针旋转直线L,每旋转一次左右两边0的个数只可能发生两种变化:不变,+1,-1 。

  等旋转一周的时候,直线回到原来的位置,此时左边小于右边。由于0的个数的变化是连续的,所以一定有一个时刻,左边等于右边。

  证毕。感觉很厉害的样子。

#include <stdio.h>
#include <string.h>

int howmany(char *s)
{
    int i, len = strlen(s) / 2;
    int t = 0;
    for (i = 0; i < len; ++i)
    {
        if (s[i] == '0')
        {
            t++;
        }
        if (s[i+len] == '0')
        {
            t--;
        }
    }
    if (!t)
        return 1;
    else
        return 2;
}

int main(void)
{
    printf("%d\n", howmany("00001111"));

    return 0;
}

comments powered by Disqus