2010-1108

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

用bool数组x和y来记录纸带信息,有问题标为1,否则为0

然后for i:=1->L 判断x[i] xor y[i]==1的最大长度

代码如下:
{{{
#!python
#include<cstdio>
#include<memory.h>
using namespace std;

#define MaxN 11111111

bool f[MaxN];
bool g[MaxN];

int main()
{
    long i;
    long j;
    long k;
    long L;
    long n1;
    long n2;
    long ss;
    long tt;
    long max;
    long curr;

    while (scanf("%ld %ld %ld", &L, &n1, &n2) != EOF)
    {
        memset(f, 0, sizeof(f));
        memset(g, 0, sizeof(f));
        for (k=0; k<n1; ++k)
        {
            scanf("%ld %ld", &ss, &tt);
            for (i=ss; i<=tt; ++i)
            {
                if (f[i] == 0)
                    f[i] = 1;
            }
        }
        for (k=0; k<n2; ++k)
        {
            scanf("%ld %ld", &ss, &tt);
            for (i=ss; i<=tt; ++i)
            {
                if (g[i] == 0)
                    g[i] = 1;
            }
        }

        max = 0;
        curr = 0;
        for (k=0; k<=L; ++k)
        {
            if (f[k]^g[k] == 1)
            {
                ++curr;
            }
            else
            {
                if (curr > max)max = curr;
                curr = 0;
            }
        }

        printf("%ld\n", max);
    }

    return 0;
}
}}}
[by delta_4d]

用bool数组x和y来记录纸带信息,有问题标为1,否则为0

然后for i:=1->L 判断x[i] xor y[i]==1的最大长度

代码如下:

#include<cstdio>
#include<memory.h>
using namespace std;
#define MaxN 11111111
bool f[MaxN];
bool g[MaxN];
int main()
{
    long i;
    long j;
    long k;
    long L;
    long n1;
    long n2;
    long ss;
    long tt;
    long max;
    long curr;
    while (scanf("%ld %ld %ld", &L, &n1, &n2) != EOF)
    {
        memset(f, 0, sizeof(f));
        memset(g, 0, sizeof(f));
        for (k=0; k<n1; ++k)
        {
            scanf("%ld %ld", &ss, &tt);
            for (i=ss; i<=tt; ++i)
            {
                if (f[i] == 0)
                    f[i] = 1;
            }
        }
        for (k=0; k<n2; ++k)
        {
            scanf("%ld %ld", &ss, &tt);
            for (i=ss; i<=tt; ++i)
            {
                if (g[i] == 0)
                    g[i] = 1;
            }
        }
        max = 0;
        curr = 0;
        for (k=0; k<=L; ++k)
        {
            if (f[k]^g[k] == 1)
            {
                ++curr;
            }
            else
            {
                if (curr > max)max = curr;
                curr = 0;
            }
        }
        printf("%ld\n", max);
    }
    return 0;
}

[by delta_4d]