问题描述

有n辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有3辆自行车,从左到右编号为:3,5,1。现在编号为2的第4辆自行车要停在5号自行车的左边,所以现在停车棚里的自行车编号是:3,2,5,1)。给定n辆自行车的停放情况,按顺序输出最后停车棚里的自行车编号。 输入格式   第一行一个整数n。   第二行一个整数x。表示第一辆自行车的编号。   以下n-1行,每行3个整数x,y,z。   z=0时,表示编号为x的自行车恰停放在编号为y的自行车的左边   z=1时,表示编号为x的自行车恰停放在编号为y的自行车的右边

输出格式   从左到右输出停车棚里的自行车编号

样例输入 4 3 1 3 1 2 1 0 5 2 1

样例输出 3 2 5 1

数据规模和约定   n<=100000   自行车编号为不超过100000的正整数。

算法思路

由题意可知该算法要根据给定的自行车停放顺序来得出最后的自行车排列顺序。由于给定了首位自行车的编号,所以我们可以设定一个字符串,字符串最初值为“a首位自行车的编号b”(这里在编号的两边加上“a”和“b”是作为每个编号的边界,这样可防止一些不可预测的巧合而导致的错误)然后遍历取出每组新加进来的自行车位置信息,通过字符串的indexof来返回要找的自行车的位置,接着将新的自行车编号在指定位置insert即可。

算法实现

我的未完全正确的算法(正确率80%)

import java.util.Scanner;

public class Main{

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

int n = input.nextInt();//自行车的数量

String index = input.next();//第一辆自行车的编号

String[][] arr = new String[n-1][3];

for (int i = 0; i < n-1; i++) {

for (int j = 0; j < 3; j++) {

arr[i][j] = input.next();

}

}

StringBuffer s = new StringBuffer("a" + index + "b");//用于保存最终自行车停放位置序列,两边加“a”“b”的目的是为编号的两边加上一个界符,防止因为字符串粘结时出现相同的编号

for (int i = 0; i < n-1; i++) {

int flag = Integer.parseInt(arr[i][2]);//左右标记位

String oldcar = "a" + arr[i][1] + "b";//原来的车

String newcar = "a" + arr[i][0] + "b";//新加入的车

if(flag == 0){//从左边插入

s.insert(s.indexOf(oldcar),newcar);

}

if(flag == 1){//从右边插入

s.insert(s.indexOf(oldcar)+oldcar.length(),newcar);

}

}

String temp = s.toString().replace("b"," ");//将每个编号的右边界“b”替换为空格

System.out.println(temp.replace("a",""));//将编号的左边界“a”消去

}

}

注意:这个程序提交测试时正确率只有80%,当测试数据为100000个时会出现越界的错误,这个错误我百度了好多还是没有解决,希望有大佬在下方评论指正。

完全正确的算法如下

import java.util.ArrayList;

import java.util.Scanner;

public class Main{

public static class TreeNode{

int left;

int right;

}

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

TreeNode [] node = new TreeNode[100000+2];

int k = sc.nextInt();

for (int i = 0; i <= 100001; i++) {

node[i]=new TreeNode();

node[i].left = -1;

node[i].right = -1;

}

node[k].left = 0;

node[k].right = 100001;

node[0].right = k;

node[n + 1].left = k;

for (int i = 0; i

int x=sc.nextInt();

int y = sc.nextInt();

int z = sc.nextInt();

if (z == 0) {

node[x].left = node[y].left;

node[x].right = y;

node[node[y].left].right = x;

node[y].left = x;

} else {

node[x].right = node[y].right;

node[x].left = y;

node[node[y].right].left = x;

node[y].right = x;

}

}

int index=0;

for (;;) {

if(node[index].right==100001) break;

System.out.print (node[index].right+" ");

index=node[index].right;

}

}

}

自行车停放c语言,蓝桥杯算法训练 自行车停放(JAVA)相关推荐

  1. 蓝桥杯算法训练(java)--网络流裸题

    题目:一个有向图,求1到N的最大流 输入格式 第一行N M,表示点数与边数 接下来M行每行s t c表示一条从s到t的容量为c的边 先备知识与注意事项 考虑如下情境: 在某个污水处理厂的某一道程序里, ...

  2. 蓝桥杯 算法训练 自行车停放(Java)

    问题描述: 有n辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边.(e.g.停车棚里已经有3辆自行车,从左到右编号为:3,5,1.现在编号为2 ...

  3. C语言 蓝桥杯 算法训练 ALGO-1003 礼物

    资源限制 内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s 问题描述 JiaoShou在爱琳大陆的旅行完毕,即将回家,为了 ...

  4. C语言-蓝桥杯-算法训练 印章

    问题描述 共有 n 种图案的印章,每种图案的出现概率相同.小A买了 m 张印章,求小A集齐 n 种印章的概率. 输入格式 一行两个正整数n和m. 输出格式 一个实数P表示答案,保留4位小数. 样例输入 ...

  5. C语言-蓝桥杯-算法训练 完全背包问题

    问题描述 有一个背包,容量为M.有N种物品,每种物品有其重量Wi与价值Vi.将这些物品的一部分放入背包,每种物品可以放任意多个,要求总重量不超过容量,且总价值最大. 输入格式 第一行为N, M. 之后 ...

  6. 传球游戏c语言,[蓝桥杯][算法训练VIP]传球游戏-题解(Java代码)

    解题思路: 注意事项: 参考代码: import java.util.Scanner; public class Main { static int n; public static void mai ...

  7. 蓝桥杯算法训练(java)--Anagrams问题前缀表达式大小写转换

    Anagrams问题 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"N ...

  8. 蓝桥杯 算法训练 提货单 Java

    一.题目 提货单 时间限制: 1Sec 内存限制: 128MB 题目描述 有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函 ...

  9. 蓝桥杯——算法训练——进击的青蛙

    问题描述 青蛙X正准备跳过一座桥,这座桥被划分为N段,记青蛙所在的起始点为0,桥的末端为N.桥上的一些点有一些石子,这些点是无法跳上去的.青蛙每次跳跃能向前跳跃+1,+2,+3段,现在请你算出跳到末端 ...

  10. 蓝桥杯 算法训练 幸运的店家

    蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...

最新文章

  1. SAP Cloud for Customer Price-计价简介
  2. make: Nothing to be done for `everything'.的原因
  3. android 内嵌地图,Android Fragment里嵌入高德地图【原创】
  4. c语言静态图片做成动态效果,如何使静态图片做成动态效果?怎么让静态图片动起来...
  5. JZOJ 3870. 【NOIP2014八校联考第4场第1试10.19】单词检索(search)
  6. ubuntu18.04安装mysql8.0.16
  7. SAP ABAP OData gateway缓存表的存储逻辑 - cache table logic
  8. php xml视频教程,传智播客PHP2015-XML视频教程
  9. 详解+G - 数据结构实验之栈与队列七:出栈序列判定
  10. JS 相等判断 / 类型判断
  11. SPSS中的数据分析—信度效度检验【1】
  12. php主机卫士,Bypass 360主机卫士SQL注入防御(多姿势)
  13. latex 标题chapter section里的英文和数字不加粗
  14. 游戏核心玩法中,设计个体模块差异与平衡的思路
  15. 【Transformer架构】Transformers are RNNs (linear transformer)
  16. 转载:做人开心最重要
  17. 【读书笔记】概率图模型——基于R语言(一)
  18. Anaconda安装指南
  19. 怎么做餐饮行业的引流?
  20. E0864vector不是模板

热门文章

  1. 饭前跑步还是饭后跑步 - 饭后多久跑步
  2. wsl2设置静态IP
  3. matlab预测股价,股价模拟、以雅虎新浪网易数据挖掘、股价预测工具箱(fantuanxiaot的Alpha版本)...
  4. 高盛发布区块链报告:从理论到实践(中文版)五
  5. 【XSY2501】Mountainous landscape(线段树二分,凸包)
  6. CF1296E1——String Coloring (easy version)
  7. CentOS Linux自动备份文件按日期备份
  8. mysql中dml全称是什么_dml是什么?
  9. 【linux内核分析与应用-陈莉君】设备驱动模型
  10. vue之menu弹出菜单效果