POJ1083题解
解题重点在如下几个地方
题很简单,一定要看题目里面的那个图。要注意的只有一点,房间1和2前面是同一个走廊,所以从1移动到2只需要占用一个走廊,房间2和3前面不是同一个走廊,因此从2移动到3需要占用2个走廊。基本思路是开辟一个200的数组,表示所有房间前面的走廊,每个元素初始化为0,如果从m移动到n(假设m小于n,但是在程序中处理输入时需要判断两个数大小),则把m对应走廊位置的编号到n对应走廊位置的编号所对应的所有数组元素都+10,这样处理完每个桌子后,遍历整个数组寻找最大的一个元素,即为实际的需要时间
【注】一开始想错了,还以为是操作系统中作业调度问题,给我整懵了都
SOURCE
质量
Problem: 1083 User: 20132430222
Memory: 220K Time: 16MS
Language: C++ Result: Accepted
源码
// 1083.cpp : 定义控制台应用程序的入口点。
//
//#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
typedef struct mypair
{
int s;
int t;
}mypair;
int main(){
vector<int> result;
int corridor[200]={0};
int max;
mypair tmp;
int NumOfCases;
int NumOfLines;
cin>>NumOfCases;
while(NumOfCases>0){
int s,b;
cin>>NumOfLines;
while(NumOfLines>0){
cin>>tmp.s>>tmp.t;
if((tmp.s%2)!=0)
tmp.s = (tmp.s/2) + 1;
else
tmp.s = tmp.s/2;
if((tmp.t%2)!=0)
tmp.t = (tmp.t/2) + 1;
else
tmp.t = tmp.t/2;
if(tmp.s>tmp.t){
b = tmp.s;
s = tmp.t;
}else{
b = tmp.t;
s = tmp.s;
}
for(int i = s;i<=b;i++){
corridor[i-1] = corridor[i-1] + 10;
}
NumOfLines--;
}
max = corridor[0];
corridor[0] = 0;
for(int i = 1;i<200;i++){
if(max < corridor[i])
max = corridor[i];
corridor[i] = 0;
}
result.push_back(max);
NumOfCases--;
}
for(vector<int>::iterator it = result.begin();it != result.end();it++){
cout<<(*it)<<endl;
}
return 0;
}