蓝桥 密码锁(Java)
AILAB专项训练
问题描述
你获得了一个据说是古代玛雅人制作的箱子。你非常想打开箱子看看里面有什么东西,但是不幸的是,正如所有故事里一样,神秘的箱子出现的时候总是会挂着神秘的锁。
这个锁上面看起来有 N 个数字,它们排成一排,并且每个数字都在 0 到 2 之间。你发现你可以通过锁上的机关来交换相邻两个数字的顺序。比如,如果原来有 5 个数字 02120,在一次交换以后你就可以得到 20120,01220,02210 或者 02102。
根据你所搜集的情报,这个锁在上面存在某连续四个数字是“2012”的时候会自动打开。现在,你需要计算一下,你至少需要进行多少次交换操作才能打开这把锁?
输入格式
输入数据的第一行有一个正整数 N。(4 ≤ N ≤ 13) 输入数据的第二行有 N 个数字 a1,a2, …, aN ,其中 ai 表示这个锁上面第 i 个数字的值,满足 0 ≤ ai ≤ 2。这些数字之间没有空格分隔。
输出格式
你只需要输出一个数字,即你至少需要的交换次数。如果无论如何都没有希望打开这把锁,输出 -1。
样例输入
5
02120
样例输出
1
对样例的解释
把前两个数字交换以后,锁上的数字是 20120,其中存在连续四个数字2, 0, 1, 2,因此锁会打开。
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());String num = sc.nextLine();if (!num.contains("2") || !num.contains("0") || !num.contains("1")|| num.indexOf("2") == num.lastIndexOf("2")) {System.out.println(-1);return;}Queue<String> que = new LinkedList<String>();Set<String> hashSet = new HashSet<String>();que.add(num);int count = 0;while (!que.isEmpty()) {int size = que.size();for (int i = 0; i < size; i++) {String poll = que.poll();if (poll.contains("2012")) {System.out.println(count);return;}char[] arr = poll.toCharArray();for (int j = 0; j < arr.length - 1; j++) {swap(arr, j, j + 1);String valueOf = String.valueOf(arr);if (!hashSet.contains(valueOf)) {que.add(valueOf);hashSet.add(valueOf);}swap(arr, j, j + 1);}}count++;}System.out.println(-1);}private static void swap(char[] arr, int j, int i) {arr[j] = (char) (arr[j] ^ arr[i]);arr[i] = (char) (arr[i] ^ arr[j]);arr[j] = (char) (arr[j] ^ arr[i]);}}
蓝桥 密码锁(Java)相关推荐
- java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)
第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...
- 蓝桥杯Java历年真题与答案_蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的)...
蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的) 1蓝桥杯 java 历年真题及答案整理(闭关一个月,呕心沥血整理出来的)1. 算法是这样的,如果给定 N 个不同字符,将这 N 个 ...
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...
- 2018年 第09届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2019年 第10届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载【2013年(第4届)~2021年(第12届)】
蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载[2013年(第4届)~2021年(第12届)] 百度网盘-CSDN蓝桥杯资料(真题PDF+其它资料) 提取码:6666 2013年 ...
最新文章
- 劳动节特别活动,钉钉、支付宝合种,2-4天领证,限量9个名额
- mysql排序空放后面_python对mysql数据库的增删改查
- SAP Spartacus里的routerLink测试
- html使用element ui_Kendo UI for jQuery使用教程:自定义小部件(二)
- 如何在Appscale下发布自己的应用(一)
- 嗨淘V12刷任务点赞系统源码手动派单版本
- python2 python3共存导致conda报错_Windows运维之Windows10下配置Python2和Python3共存 并用anaconda实现方便的包管理...
- 全球每天产生100篇机器学习新论文!谷歌大脑负责人Jeff Dean发推引热议,网友:太浪费时间...
- BZOJ 1878: [SDOI2009]HH的项链【莫队】
- jsmind 线条_jsmind/2.options.md at master · hizzgdev/jsmind · GitHub
- 一文说清长安链ChainMaker同步模块
- 在B站看猫片被老板发现?不如按下F12学学HTTP
- “海纳百川”下载器的使用方法
- java字符串 与 ASCII码相互转换
- AD18系统设置界面各层详解
- 从用户个体的角度,谈微信群吱口令红包
- 电影“防火墙” 引发的黑客攻击迅雷(转)
- GC Garbage Collectors
- spring源码分析系列(二)AOP应用
- 【vcruntime140.dll文件下载】vcruntime140.dll丢失的解决方法