POJ 1083 Moving Tables

来源:互联网 发布:java多线程网络编程 编辑:程序博客网 时间:2024/06/10 23:25

题目

一层里面有400个房间,北边和南边各有200个房间,要从一个房间里面把一张桌子移动到另一个房间,需要占用这两个房间之间的所有走廊(包括这两个房间前面的),每移动一个桌子需要10分钟,给出需要移动的桌子的数据(从哪移动到哪),要求计算出最少需要多少分钟才能把所有桌子移动完。

分析

题很简单,但是一定要看题目里面的那个图。要注意的只有一点,房间1和2前面是同一个走廊,所以从1移动到2只需要占用一个走廊,房间2和3前面不是同一个走廊,因此从2移动到3需要占用2个走廊。基本思路是开辟一个200的数组,表示所有房间前面的走廊,每个元素初始化为0,如果从m移动到n(假设m<n,但是在程序中处理输入时需要判断两个数大小),则把序号为(m-1)/2到(n-1)/2的所有数组元素都+10,这样处理完每个桌子后,遍历整个数组寻找最大的一个元素,即为实际的需要时间。

AC代码

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int f[205];int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int a,b;int ans=0;memset(f,0,sizeof(f));for(int i=0;i<n;i++){scanf("%d%d",&a,&b);a=(a-1)/2;b=(b-1)/2;int s=a<b?a:b;int e=a>b?a:b;for(int j=s;j<=e;j++){f[j]+=10;}} for(int i=0;i<200;i++){ans=max(ans,f[i]);}printf("%d\n",ans); }return 0;} 


原创粉丝点击