POJ:1083 Moving Tables
阿新 • • 發佈:2019-02-08
題意:
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; }