1. 程式人生 > >杭電 ACM Step(3)

杭電 ACM Step(3)

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; }