POJ:1083 Moving Tables
程序员文章站
2022-06-04 08:11:00
...
题意:
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;
}
下一篇: Docker基础教程