Poj第1083题--Moving Tables

Poj第1083题–Moving Tables

原题

Moving Tables

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.

解题思路

将一组测试数据存放到一张二维数组m[1...n][2]中,其中m[1...n][0]存放搬桌子的起始点,m[1...n][1]存放搬桌子的终点。
然后将房间号转化为过道号。
最后遍历过道号数组,找到搬桌子经过次数最多的过道号,找到此最大的次数,这就是并行处理需要的最多的单位时间了。

算法实现

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) throws NumberFormatException,
            IOException {
        Scanner read = new Scanner(System.in);
        int t = read.nextInt(); //一共有t组测试数据
        int s;  //s张桌子将搬动
        int[][] m; //存放几组搬桌子起点终点的房间号

        int[] corridors = new int[200]; //过道下标为k(对应的房间号为2k-1和2k+2),其值表示桌子经过过道的次数
        int start; //开始的过道编号
        int len;   //搬桌子的距离
        int max;
        for (int i = 0; i < t; i++) {
            Arrays.fill(corridors, 0);  //对每组数据都重新初始化
            s = read.nextInt();
            m = new int[s][2];
            for (int j = 0; j < s; j++) {
                m[j][0] = read.nextInt();
                m[j][1] = read.nextInt();
            }

            //遍历所有桌子,更新corridors数组中的值
            for (int j = 0; j < s; j++) {
                //将房间号转化为对应的过道号
                if (m[j][0] % 2 == 0) {
                    m[j][0] = m[j][0] / 2 - 1;
                } else {
                    m[j][0] = m[j][0] / 2;
                }
                if (m[j][1] % 2 == 0) {
                    m[j][1] = m[j][1] / 2 - 1;
                } else {
                    m[j][1] = m[j][1] / 2;

                }

                len = Math.abs(m[j][0] - m[j][1]) + 1;
                start = Math.min(m[j][0], m[j][1]);
                for (int k = 0; k < len; k++) {
                    corridors[start + k]++;
                }
            }

            //找到某个搬桌子过程中经过次数最多的过道号,找到此最大的次数
            max = corridors[0];
            for (int j = 1; j < 200; j++) {
                if (corridors[j] > max) {
                    max = corridors[j];
                }
            }
            System.out.println(max * 10);
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏.net core新时代

数据字典生成工具之旅(5):DocX组件读取与写入Word

      由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的...

3848
来自专栏跟着阿笨一起玩NET

从sql server 中读取二进制图片

391
来自专栏菩提树下的杨过

基于sliverlight + wcf的web 文字版IM 示例

演示地址: http://task.24city.com/default.html 预览界面: ? 一、布局 采用Grid布局,5行2列 第一行:为登录/注册信...

3226
来自专栏xingoo, 一个梦想做发明家的程序员

【插件开发】—— 6 SWT 复杂控件使用以及布局

前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭...

2349
来自专栏码匠的流水账

zuul自定义SimpleHostRoutingFilter

zuul的SimpleHostRoutingFilter主要用来转发不走eureka的proxy,里头是使用httpclient来转发请求的,但是有时候我们需要...

1292
来自专栏逍遥剑客的游戏开发

实现一个同步的RenderApplication

1404
来自专栏自由而无用的灵魂的碎碎念

小项目分享---混色器

编写代码的同志们一般懂美术的就少了,偶也是,什么色轮、三维加色等等。虽然看过一些书籍(如内田广由纪的《配色基础原理》),不过还是一知半解的。

973
来自专栏技术之路

sqlserver 的事务和c#的事务

sql的事务 1 sql 2 create database model 3 go 4 use model 5 go 6 create table ...

1919
来自专栏木宛城主

曾今的代码系列——自己的分页控件+存储过程实现分页

项目里面的测试代码,仅供参考 LoginByAjax <title>Ajax登陆</title> <script src="Scripts/c...

1855
来自专栏菩提树下的杨过

Silverlight:利用异步加载Xap实现自定义loading效果

关键点: 1.利用WebClient的DownloadProgressChanged事件更新下载进度 2.下载完成后,分析Xap包的程序集Assembly信息 ...

18610

扫码关注云+社区