题目编号 :1000
简单题意:公司共有400个房间,奇数在走廊一侧,偶数在走廊另一侧,搬动桌子的要求是走廊不可被同时占用,每次搬动需要10分钟,求搬动的最大时长。
思路形成:需要注意搬桌子时走廊问题,1到3和4到6房间移动时,并不是需要10分钟,因为3号房间前的走廊被共用,所以此时需20分钟,
因此再输入所有数据后,将输入的一组数按小号在前,将房间号前移或后移一位数,然后排序,找最大时间
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define size 205
struct Move{
int start,end;
bool flag;
}a[size];
bool cmp(const Move a,Move b)
{
return a.start<b.start ;
}
int main()
{
int num,n;
cin>>num;//输入测试次数
while(num--!=0)
{
cin>>n;//输入移动数目
for(int i=0;i<n;i++)
{
cin>>a[i].start>>a[i].end;
if(a[i].start>a[i].end) //保证房间数小的为start
{
int t=a[i].start;
a[i].start =a[i].end ;
a[i].end =t;
}
if(a[i].start%2==0)
{a[i].start--;}
if(a[i].end%2==1)
{a[i].end++;}
a[i].flag=false;
}
sort(a,a+n,cmp);
int c=0;
int count=0;
int p;
while(!c)
{
c=1;
count++;
p=0;
for(int i=0;i<n;i++)
{
if(!a[i].flag&&a[i].start>p)
{
a[i].flag=true;
p=a[i].end;
c=0;
}
}
}
count--;
count=count*10;
cout<<count<<endl;
}
return 0;
}