您的位置:首页 > 其它

ACM第一次练习—1000A

2016-03-17 08:25 204 查看
题目编号:A。

题意:在400个两两相对房间之间搬桌子,走廊一次只能通过一张桌子,把桌子从一个房间移到另一个房间需要10分钟。输入T表示搬桌子的组数,输入N表示每一组要搬的桌子数,接下来的N行输入桌子搬出的房间和搬入的房间。输出每一组搬桌子的最短时间。

思路形成过程:因为走廊不可以同时搬运两张桌子,可以将每两个相对的门之间的走廊设为一个参数,统计每组桌子搬完后走廊的占用次数,最大占用次数乘10即为所求时间。

感想:这里需要巧妙地将问题转化为统计走廊占用次数的的问题,而我一开始的想法是:将输入的各组数据按要到达的房间号排序(sort函数),在对排序好的数据进行遍历;每一遍找出一组可以同时搬用的桌子,直到所有的桌子被搬完,用组数乘以10即为所求时间,但最终没有实现,停在了怎么实现进行多次遍历。

代码:

#include<iostream>

#include<stdio.h>

using namespace std;

int main()

{
int i, j,T,S,B=0;
int move[200],max[200];
int N;
int form, to;
cin >> T;
S = T;
while (2)
{
for (i = 0; i < 200; i++)
{
move[i] = 0;
}
scanf("%d", &N);
for (i = 0; i < N; i++)
{
scanf("%d%d", &form, &to);
form = (form - 1) / 2;
to = (to - 1) / 2;
if (form > to)
{
int temp = form;
form = to;
to = temp;
}
for (j = (form - 1); j < to; j++)
{
move[j]++;
}

}
max[B] = 0;
for (i = 0; i < 200; i++)
{
if (max[B] < move[i])
max[B] = move[i];

}
B++;
if (T == 1)
break;
T--;
}
for (i = 0; i < S; i++)
cout << (max[i]*10 )<< endl;
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: