Moving Tables

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 21   Accepted Submission(s) : 11

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure.

The
floor has 200 rooms each on the north side and south side along the
corridor. Recently the Company made a plan to reform its system. The
reform includes moving a lot of tables between rooms. Because the
corridor is narrow and all the tables are big, only one table can pass
through the corridor. Some plan is needed to make the moving efficient.
The manager figured out the following plan: Moving a table from a room
to another room can be done within 10 minutes. When moving a table from
room i to room j, the part of the corridor between the front of room i
and the front of room j is used. So, during each 10 minutes, several
moving between two rooms not sharing the same part of the corridor will
be done simultaneously. To make it clear the manager illustrated the
possible cases and impossible cases of simultaneous moving.

For
each room, at most one table will be either moved in or moved out. Now,
the manager seeks out a method to minimize the time to move all the
tables. Your job is to write a program to solve the manager’s problem.

Input

The input consists of T test cases. The number of test cases ) (T is
given in the first line of the input. Each test case begins with a line
containing an integer N , 1<=N<=200 , that represents the number
of tables to move. Each of the following N lines contains two positive
integers s and t, representing that a table is to move from room number s
to room number t (each room number appears at most once in the N
lines). From the N+3-rd line, the remaining test cases are listed in the
same manner as above.

Output

The output should contain the minimum time in minutes to complete the moving, one per line.

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

题意:
要你搬桌子,有重叠的区域段不能同时搬,不重叠可以同时。每次搬桌子需要10分钟,问你最少用多长时间。
注意:
1.判断首尾,一开始就比较下,小的为start,大的为end。
                if(start>end){/*要判断头尾*/
                    t=end;
                    end=start;
                    start=t;
                }
2.由于(1,2)(3,4)。。。这种属于同一区段,因此简化下,就是( +1)/2,将区域划分,因为偶数加上没影响,所以可以不判断都直接计算。
                start=(start+1)/2;
                end=(end+1)/2;     
3.核心算法:贪心:哪个区域的经过次数最多,该次数就是我们所求取得数值;
         for(j=start;j<=end;j++)
                    a[j]++;
4.排序,排序后得到最大即:最繁忙的区域段 sort(a,a+201,cmp);(由大到小)
5.输出时,不要忘了*10。
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#include<string.h>
bool cmp(int a,int b)
{
    if (a>b) return true;
    return false;
}
int main(){
    int T,a[201],n,t;
    int i,start,end,j;
    while(scanf("%d",&T)!=EOF){
        while(T--){
            memset(a,0,sizeof(a));/*头文件是<string.h>*/
            scanf("%d",&n);
            for(i=0;i<n;i++){
                scanf("%d%d",&start,&end);
                if(start>end){/*要判断头尾*/
                    t=end;
                    end=start;
                    start=t;
                }
                start=(start+1)/2;
                end=(end+1)/2;
                for(j=start;j<=end;j++)
                    a[j]++;
            }
            sort(a,a+201,cmp);
            printf("%d\n",a[0]*10);
        }
    }
    return 0;
}

Moving Tables的更多相关文章

  1. zstu.2512. Moving Tables(贪心)

     Moving Tables Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1182  Solved: 563 Description The famo ...

  2. Moving Tables(贪心或Dp POJ1083)

    Moving Tables Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28304   Accepted: 9446 De ...

  3. HDOJ 1050 Moving Tables

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. 1050 Moving Tables

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. hdoj 1050 Moving Tables【贪心区间覆盖】

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. uvalive 2326 - Moving Tables(区间覆盖问题)

    题目连接:2326 - Moving Tables 题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用 ...

  7. HDU1050(Moving Tables:贪心算法)

    解题思路: 这种做法是基于hdu2037的做法上考虑的,找出所有可以同时搬运的桌子,然后就很方便求出最短总时间. 还有一种更简单的做法是直接遍历一遍找出与别的重复次数最多的那片区域,重复次数*10就可 ...

  8. B - Moving Tables

    B - Moving Tables Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. POJ1083 Moving Tables

    POJ1083 Moving Tables Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 35297   Accepted: ...

随机推荐

  1. 《Introduction to Algorithm》-chaper33-计算几何学

    叉积: 在平面中我们为了度量一条直线的倾斜状态,为引入倾斜角这个概念.而通过在直角坐标系中建立tan α = k,我们实现了将几何关系和代数关系的衔接,这其实也是用计算机解决几何问题的一个核心,计算机 ...

  2. puppet_list

  3. CodeForces 352D. Jeff and Furik

    题意:给n个数,第一个人选取相邻两个递降的数交换顺序,第二个人一半的概率选取相邻两个递降的数交换顺序,一半的概率选取相邻两个递增的数交换顺序.两个人轮流操作,求整个数列变成递增数列所需交换次数的期望. ...

  4. MSSQL数字时间(timestamp)转换为DATETIME

    很简单: , CAST('1970-01-01 00:00:00' AS datetime))

  5. php&mysql

    更新语句 $query='update num set num='.$counter.'where id=1';      ....................这个查询失败 $query='upd ...

  6. poj 1459 Power Network【建立超级源点,超级汇点】

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 25514   Accepted: 13287 D ...

  7. hdoj 4612 Warm up【双连通分量求桥&&缩点建新图求树的直径】

    Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Su ...

  8. java异常处理一

    为什么需要异常处理? 郝斌解释:因为有些异常不能间接的利用if else来处理,比如说输入的时候,将键盘输入的内容转换为数字,此事如果用户输入非数字就会出现异常,而在用户输入之前是无法用程序判断用户所 ...

  9. winform窗体跟随窗体

           Form2 frm2 = new Form2();         private void MoveProc()         {             frm2.StartPos ...

  10. bindiff 4.2使用

    要求IDA 6.8 程序1与程序2混合比较图 2---------------------------------------------------------------------------- ...