试题 算法训练 Airport Configuration

问题描述

  ACM机场是一个本地机场,对于大多数人来说,机场不是他们的终点或起点,而是中转站。机场有一个规划图。到达的大门在机场的北边(相当于空格)。出发的大门在机场的南边(也相当于空格)。两个正对着的大门距离相当于大门间的距离。每一个到达的大门只对应一个城市。每一个出发的大门也是这样。乘客到达的大门对应他们的起始城市,而出发大门对应他们的目标城市。因为这个问题,我们只需考虑转机的乘客。

  转机的乘客会产生机场的交通堵塞。我们已经知道某两个城市之间的平均客流量。用这些信息,有可能能降低交通堵塞。例如,Cx城到Cy城的客流量大,就可以将他们安排得很近,甚至是对位。

  因为花园和商店无法穿越,所以到达门G1和出发们G3(见图)的距离为1+2=3。

  你需要计算几个方案的客流指数。两个大门间的客流指数等于人数乘以距离。而总的客流指数就是所有门之间的客流指数之和。

输入格式

  输入文件有多组测试数据。

  最后一组只有一个0。

  每组测试数据的输入有两部分。先是客流数据,之后是机场布局。

  数据开始时一个n(1<n<25),表示城市数。接下来n行,每行表示一个城市的数据,第i行先是一个整数,表示起始城市,再一个1到n的整数k,表示目标城市数,k对整数,每对描述一个目标城市,第一个数是城市编号j,然后是乘客数目(最多500)从i到j的人数。

  机场布局部分包括1到20个方案。用一个0结束。

  一个方案包括3行。第一行一个数表示编号,第二行是1-n的一个排列,描述到达门对应的城市的排列,第三行用同样的方式描述出发大门。

输出格式

  对于每个测试数据,输出包括一个表格,表示方案编号和客流指数,按照客流指数升序输出。若客流指数相同,则编号小的排在前面。见样例。注意方案编号右对齐,而客流指数左对齐。(样例输出前面4个空格,后面9个空格,然后没有空格,详见未格式化的试题。

样例输入
3
1 2 2 10 3 15
2 1 3 10
3 2 1 12 2 20
1
1 2 3
2 3 1
2
2 3 1
3 2 1
0
2
1 1 2 100
2 1 1 200
1
1 2
1 2
2
1 2
2 1
0
0
样例输出
Configuration Load
2 119
1 122
Configuration Load
2 300
1 600
 

import java.util.Arrays;
import java.util.Scanner; public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in); Node [][]airpot;
PlanResult []plans;
int [][]layout;
//是否连续出现了两个0
boolean repeat=false;
int k; int n = s.nextInt();
while (!repeat) {
airpot =new Node[n+1][n+1];
layout=new int[2][n];
plans=new PlanResult[21];
k=0; for (int i = 0; i <n ; i++) {
//起始城市
int startCity=s.nextInt();
int m = s.nextInt();
for (int j = 0; j < m; j++) {
int arriveCity=s.nextInt();
Node node = new Node();
node.number=s.nextInt();
airpot[startCity][arriveCity]=node;
}
} //计划编号
int planNumber=s.nextInt();
while (planNumber != 0) {
PlanResult result=new PlanResult();
result.planNumber=planNumber; //输入机场布局
for (int i = 0; i < 2; i++) {
for (int j = 0; j <n ; j++) {
layout[i][j]=s.nextInt();
}
} //计算节点距离
for (int i = 0; i <n ; i++) {
int startCity=layout[0][i];
for (int j = 0; j <n ; j++) {
int endCity=layout[1][j];
Node node = airpot[startCity][endCity];
if (node != null) {
node.distance=Math.abs(i-j)+1;
}
}
} //计算机场总流量
int flow=0;
for (int i = 1; i <=n; i++) {
for (int j = 1; j <=n ; j++) {
Node node = airpot[i][j];
if (node != null) {
flow+=node.distance*node.number;
}
}
}
result.flow=flow;
plans[k++]=result;
planNumber=s.nextInt();
} Arrays.sort(plans,0,k); System.out.println("Configuration Load");
for (int i = 0; i < k; i++) {
PlanResult plan = plans[i];
System.out.printf("%4d%9d\n",plan.planNumber,plan.flow);
} n=s.nextInt();
if (n == 0) { repeat=true; }
} }
} class Node {
//距离
int distance;
//数量
int number;
} class PlanResult implements Comparable<PlanResult> {
//计划编号
int planNumber;
//流量
int flow; @Override
public int compareTo(PlanResult planResult) {
if (Integer.compare(flow, planResult.flow)==0) {
return Integer.compare(planNumber, planResult.planNumber);
}
return Integer.compare(flow, planResult.flow);
}
}

Java实现 蓝桥杯 算法训练 Airport Configuration的更多相关文章

  1. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

  2. Java实现蓝桥杯 算法训练 大等于n的最小完全平方数

    试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...

  3. java实现 蓝桥杯 算法训练 Password Suspects

    问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...

  4. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  5. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  6. Java实现 蓝桥杯 算法训练 审美课

    算法训练 审美课 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师 ...

  7. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  8. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

  9. Java实现 蓝桥杯 算法训练 第五次作业:字符串排序

    试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...

随机推荐

  1. Mysql常用sql语句(八)- where 条件查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  2. Spark离线日志分析,连接Spark出现报错

    首先,我的代码是这样的 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object ...

  3. 永磁同步电机 spmsm 和 ipmsm 的区别总结

    layout: post tags: [motor control] comments: true 永磁同步电机的分类 永磁同步电机根据转子上永磁体的位置不同,可以分为: 表贴式永磁同步电机--S-P ...

  4. transition完成事件

    当transition事件完成时调用函数(移动端导航的动画消失效果). <!doctype html> <html> <head> <meta charset ...

  5. Dozer-对象属性映射工具类

    Dozer-对象属性映射工具类 工具类代码: import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; impo ...

  6. docker 垃圾回收机制

    docker垃圾回收机制 作者: 张首富 时间: 2019-04-10 个人博客: www.zhangshoufu.com QQ群: 895291458 说明 对于Docker来说,存在镜像/容器/存 ...

  7. PAT 1006 Sign In and Sign Out (25分) 字符串比较

    题目 At the beginning of every day, the first person who signs in the computer room will unlock the do ...

  8. 开始写博客的第一天,如何用c实现“hello wolrd”

    “hello world” 应该是大多数人学习的第一个代码 那也就作为我第一篇博客的开端吧 实现的代码如下 #include <stdio.h> int main() { printf(& ...

  9. Sentinel源码解析三(滑动窗口流量统计)

    前言 Sentinel的核心功能之一是流量统计,例如我们常用的指标QPS,当前线程数等.上一篇文章中我们已经大致提到了提供数据统计功能的Slot(StatisticSlot),StatisticSlo ...

  10. Spring BeanFactory 容器

    Spring 的 BeanFactory 容器 这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory. ...