分析:该題可以用贪心来做,类似于节目时间安排的问题,桌子的移动房间看作时间处理。
下面是另一种更简便的做法。把奇数房间号和偶数房间号映射为房间在走廊上的位置,从1到200;开一个数组,每次从s移桌子到t就把中间走廊的每个位置都加1,最后扫描整个数组,找出最大值在乘上移动一张桌子所用的时间就是必须花费的时间。
#include<iostream> using namespace std; int roompos[202]; int GetRoomPos(int n) { if(n&1) return (n+1)/2; else return n/2; } int main() { int T,N,s,t,i,j,max,maxpos,minpos; cin>>T; while(T--) { cin>>N; memset(roompos,0,sizeof(roompos)); maxpos=-1; minpos=10000; for(i=0;i<N;i++) { cin>>s>>t; if(s>t) { int tmp=s; s=t; t=tmp; } maxpos=maxpos>GetRoomPos(t)?maxpos:GetRoomPos(t); minpos=minpos<GetRoomPos(s)?minpos:GetRoomPos(s); for(j=GetRoomPos(s);j<=GetRoomPos(t);j++) roompos[j]+=1; } max=0; for(i=minpos;i<=maxpos;i++) max=max>roompos[i]?max:roompos[i]; cout<<max*10<<endl; } return 0; }
时间: 2024-10-16 14:03:40