Untitled
raw download clone
C
views 20
,
size 1761 b
#include<stdio.h>
#include<string.h>

int pos[5001]={0},L[5001],R[5001];
//算全部扣掉2個守衛使總數最大
int Max(int x,int y);
void sub2(int n,int m);
void rev(int n,int m);

int main(void)
{
    int t;
    int n,q,max=0,cond_q=0;

    scanf("%d",&t);
    while(t--)
    {

        scanf("%d%d\n",&n,&q);
        for(int i=1; i<=q; i++)
        {
            scanf("%d%d",&L[i],&R[i]);
            for(int j=L[i]; j<=R[i]; j++)
            {
                pos[j]++;
            }

        }
        for(int i=1; i<=q; i++)
        {
            for(int j=1; j<=q-i; j++)
            {
                //printf("C1=%d C2=%d\n",i,i+j);
                sub2(i,i+j);
                for(int k=1; k<=n; k++)
                {
                    if(pos[k]>0)
                        cond_q++;//q-2守衛上
                    //printf("pos[%d]=%d\n",k,pos[k]);
                }
                rev(i,i+j);
                max=Max(max,cond_q);
                //printf("max_now=%d\n",max);
                //printf("cond_q=%d\n",cond_q);
                cond_q=0;
                if(max==n)break;
            }
            if(max==n)break;
        }
        printf("%d\n",max);
        for(int i=1;i<=n;i++)
        {
             pos[i]=0;
        }
        max=0;
    }

    return 0;
}
int Max(x,y)
{
    if(x>y)
        return x;
    else
        return y;
}
void sub2(n,m)
{
    int i;
    for(i=L[n]; i<=R[n]; i++)
    {
        pos[i]--;
    }
    for(i=L[m]; i<=R[m]; i++)
    {
        pos[i]--;
    }
}
void rev(n,m)
{
    int i;
    for(i=L[n]; i<=R[n]; i++)
    {
        pos[i]++;
    }
    for(i=L[m]; i<=R[m]; i++)
    {
        pos[i]++;
    }
}
close fullscreen
Login or Register to edit or fork this paste. It's free.