您的位置:首页 > 其它

杭电 ACM Step(3)

2018-03-31 16:13 393 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: