标签:tween rem ems sid ane des algo return 重叠


3 4 10 20 30 40 50 60 70 80 2 1 3 2 200 3 10 100 20 80 30 50
10 20 30
#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
    int T,N;
    int c[401];
    while (scanf("%d", &T)!=EOF)
    {
        while (T--)
        {
            scanf("%d", &N);        
            int a,b;
            int max = -1;
            memset(c, 0, sizeof(c));
            for(int i=0; i<N; i++)
            {
                scanf("%d %d", &a, &b);
                //将区间限制为从小到大地移动桌子 
                if (a > b)
                {
                    swap(a, b);
                }
                //因为走廊两边的排列都是奇数与偶数相对,而不论什么一个要移动,
                //都会影响对面的不能被使用。也就是shared
                //所以。假设是偶数開始,那么会影响到对面的,也就是a-1
                //同理,假设是奇数结束,也会影响到对面的,也就是b+1
                //那么在这个区间都是被shared的 
                if (a%2 == 0)
                    a--;
                if (b%2 == 1)
                    b++;
                for (int i=a; i<=b; i++)
                {
                    //标记被shared的区间[a, b],被使用一次加一次,所以是c[i]++ 
                    c[i]++;
                    //找重叠数最大之中的一个,即必须经过的次数 
                    if (c[i]>max)
                        max = c[i];
                }
            }               
            printf("%d\n", max*10);
        }                
    }    
    return 0;
}
标签:tween rem ems sid ane des algo return 重叠
原文地址:http://www.cnblogs.com/gccbuaa/p/6772479.html