1. 程式人生 > >POJ:1083 Moving Tables

POJ:1083 Moving Tables

題目連結

題意:

400個房間分佈在一條走廊的兩邊,現要從房間A將桌子挪到房間B,一次挪動10分鐘,多次挪動不可以重疊走廊區域,求最短挪動時間

題解:

簡單模擬即可,模擬每次挪動桌子,將該區域的時間加10,則重複區域的時間會加倍,最後求出最長的時間,即可

注意:

單數和雙數的分佈問題,即1和2是佔用了一塊走廊,而1和3佔用了兩塊走廊

房間A並不一定小於房間B,即需要判斷從小房間挪到大房間,交換

#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
    int room[205];
    int t;
    cin>>t;
    while(t--){
        for(int i=1;i<=200;i++){
            room[i]=0;
        }
        int n;
        cin>>n;
        while(n--){
            int a,b;
            cin>>a>>b;
            if(a%2!=0){//處理奇數偶數
                a=a+1;
            }
            a=a/2;
            if(b%2!=0){//處理奇偶數
                b=b+1;
            }
            b=b/2;
            if(a>=b){//交換,小房間挪到大房間
                int tmp=b;
                b=a;
                a=tmp;
            }
            for(int i=a;i<=b;i++)
            {
                room[i]+=10;
            }
        }
        int result=0;
        for(int i=1;i<=200;i++){
            result=max(result,room[i]);
        }
        cout<<result<<endl;
    }
    return 0;
}