杭電 ACM Step(3)
阿新 • • 發佈:2018-11-22
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;
}