【1050】Moving Tables

【1050】Moving Tables

搬桌子
贪心

该层楼的南北两边沿走廊各有200个房间。最近,该公司制定了改革制度的计划。改革的内容包括在房间之间移动大量的桌子。因为走廊很窄,而所有的桌子都很大,所以只有一张桌子可以通过走廊。需要制定一些计划,使移动的效率提高。经理想出了以下计划。把一张桌子从一个房间搬到另一个房间可以在10分钟内完成。从i号房间搬到j号房间的时候,i号房间前面和j号房间前面之间的走廊部分被利用。因此,在每10分钟内,在两个不在同一走廊的房间之间会同时进行几次移动。为了让大家明白,经理说明了同时移动的可能情况和不可能情况。

每个房间,最多只能搬进或搬出一张桌子。现在,经理寻求一种方法,以尽量缩短移动所有桌子的时间。你的工作是编写一个程序来解决经理的问题。

输入内容
输入由T个测试用例组成。测试用例的数量)(T在输入的第一行给出。每一个测试用例的开头都有一行包含一个整数N ,1<=N<=200
,代表要移动的表的数量。下面的N行中,每一行都包含两个正整数s和t,代表一个表要从房间号s移动到房间号t(每个房间号在N行中最多出现一次)。从第N+3行开始,其余的测试用例与上述方式相同。

輸出
输出的内容应包含完成搬家的最短时间,以分钟为单位,每行一个。
通过www.DeepL.com/Translator(免费版)翻译

Sample Input
3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50

Sample Output
10
20
30

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t,s,n,T; 
	int mo[210]; 
    scanf("%d",&T);
    while(T--)
    {
        memset(mo,0,sizeof(mo));//初始化 
        scanf("%d",&n);//要移动的桌子 
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&s,&t);//从s到t 
            s=(s-1)/2;
            t=(t-1)/2;
            if(s>t)
            {
                swap(s,t);//交换st数值 
            }
            for(int i=s;i<=t;i++)
            {
                mo[i]++;//经过次数
            }
        }
        int maxn=0;
        for(int i=0;i<200;i++)
        {
            if(mo[i]>maxn)//最大的数组值即为移动完桌子所需的最短时间
            {
                maxn=mo[i];
            }
        }
       printf("%d\n",maxn*10);//十分钟一次
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值