POJ 1083 Moving Tables(模拟)

题目陷阱:

一、输入的两个房间号不一定是从小到大,因此若第一个大于第二个需要SWAP

二、2和3,4和5不能同时过,因为占用了3这个过道,而1和2,3和4就能同时通过

 

解法:

将房间号进行转化,转化成可以用200个位置来代表过道。

开个数组代表房间,对过道重复的进行标记,数组中最大数则为所求。

 

#include<iostream> using namespace std; int main() { int room[201],n,max,r1,r2,test; const int time = 10; cin >> test; while(--test+1) { cin >> n; memset(room,0,sizeof(room)); max = -1; while(--n+1) { cin >> r1 >> r2; if(r1 > r2) swap(r1,r2); r1 = (r1 - 1)/2;//将房号转化为一列 r2 = (r2 - 1)/2; for(int i = r1; i <= r2;++i) { ++room[i]; } } for(int i = 1;i <= 200;++i) { if(room[i] > max) max = room[i]; } cout << time * max << endl; } return 0; }

你可能感兴趣的:(POJ 1083 Moving Tables(模拟))