杭电 ACM Step(3)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinlingheshang/article/details/79770402

Chapter One

Section 3

  • Moving Tables
    这里写图片描述
    这里写图片描述这里写图片描述
  • 题目求解

    • 区间覆盖求解
    • 题目中的一个容易被忽视的点便在于,所有的奇数房间在一旁,所有偶数房间在另一旁。如果只是简单的判断房间序号大小是否相交,会出现错误情况。
      这里写图片描述
    • 如图所示,在9和10号房间中的区域明显被公用,需要20分钟时间才可以。
    • 从走廊的角度思考,1号和2号房间对应于1号走廊,3号和4号房间对应2号走廊。如此,便是有两百个这样的位置。可以发现,走廊号=(房间号+1)/2
  • 代码如下:

#include <stdio.h>
#include <string.h>
int flag[201];
int main()
{
    int nCases, n, i, cnt;
    int s, t;
    scanf("%d", &nCases);
    int tab;
    while (nCases--)
    {
        cnt = 0;
        memset(flag, 0, sizeof(flag));//将flag[201]中数据清零
        scanf("%d", &n);
        while (n--)
        {
            scanf("%d %d", &s, &t);
            if (s>t)
            {
                tab =t;
                t=s;
                s=tab; //s为输入数据中较小的值,t为较大的值
            }
            for (i=(s+1)/2; i<=(t+1)/2; i++)
                flag[i] += 1;
        }
        cnt = flag[1];
        for (i=2; i<201; i++)
        {
            if (cnt<flag[i])
                cnt = flag[i];//取出最大值
        }
        printf("%d\n", cnt*10);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qinlingheshang/article/details/79770402