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

猜你喜欢

转载自blog.csdn.net/wuzhenzi5193/article/details/81587683
今日推荐