计蒜客:接龙(java)
采用队列思想
蒜头君在玩一种接龙的游戏,蒜头君有 30000张卡片分别放在 30000列,每列依次编号为 1,2,...,30000。同时,蒜头君也把每张卡片依次编号1,2,...,30000。
游戏开始,蒜头君让让第i张卡片处于第i(i=1,2,...,30000)列。然后蒜头君会发出多次指令,每次调动指令M i j会将第i张卡片所在的队列的所有卡片,作为一个整体(头在前尾在后)接至第j张卡片所在的队列的尾部。
蒜头君还会查看当前的情况,发出C i j的指令,即询问电脑,第i张卡片与第 j张卡片当前是否在同一个队列中,如果在同一列中,那么它们之间一共有多少张卡片。
聪明的你能不能编写程序处理蒜头君的指令,以及回答蒜头君的询问呢?
输入格式
第一行有一个整数T(1≤T≤500000),表示总共有T条指令。
以下有T行,每行有一条指令。指令有两种格式:
- M i j: i和j是两个整数(1≤i,j≤30000),表示指令涉及的卡片编号。你需要让第i张卡片所在的队列的所有卡片,作为一个整体(头在前尾在后)接至第j 张卡片所在的队列的尾部,输入保证第i号卡片与第 j 号卡片不在同一列。
- C i j:i和j是两个整数(1≤i,j≤30000),表示指令涉及的卡片编号。该指令是蒜头君的询问指令。
输出格式
如果是蒜头君调动指令,则表示卡片排列发生了变化,你的程序要注意到这一点,但是不要输出任何信息;
如果是蒜头君的询问指令,你的程序要输出一行,仅包含一个整数,表示在同一列上,第i号卡片与第j号卡片之间的卡片数目(不包括第i张卡片和第j 张卡片)。如果第i号卡片与第j号卡片当前不在同一个队列种中,则输出−1。
样例输入
4
M 2 3
C 1 2
M 2 4
C 4 2
样例输出
-1
1
import java.util.Scanner;
public class Main {static int[] father=new int[5010];static int[] dist=new int[5010];static int[] size=new int[5010];static void init(int n){for (int i = 1; i <=n ; i++) {father[i]=i;dist[i]=0;size[i]=1;}}static int get(int x){if (x==father[x])return x;int y=father[x];father[x]=get(y);dist[x]+=dist[y];return father[x];}static void merge(int a,int b){a=get(a);b=get(b);if (a!=b){father[a]=b;dist[a]=size[b];size[b]+=size[a];}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int T=scanner.nextInt();init(T);while (T-->0){String c =scanner.next();int m=scanner.nextInt();int n=scanner.nextInt();if (c.equals("M")){merge(m,n);}else {if (get(m) != get(n))System.out.println("-1");else {System.out.println(Math.abs(dist[m]-dist[n])-1);}}}}
}
计蒜客:接龙(java)相关推荐
- 计蒜客——成绩排序 Java求解
小蒜给出了班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前. 输入格式 第一行为 n(0<n<20),表示班里的学生数目: 接下来的 n 行,每 ...
- 计蒜客 T1954 圆锥体的表面积 JAVA
计蒜客 T1954 圆锥体的表面积 蒜头君刚学习了 圆锥体 相关的立体几何知识,为了检测他的学习效果,花椰妹给他出了一个题目,给出一个圆锥体的底面圆的半径 r 和高度 h,计算这个圆锥体的表面积. 花 ...
- 计蒜客 挑战难题 爬楼梯
计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...
- 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析
新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...
- 计蒜客 - 新年礼物
计蒜客 新年礼物 新年了,蒜厂 BOSS 要给小蒜头们发新年礼物,新年礼物有很多份,怎么分配这些礼物呢?蒜厂 BOSS 打算让大家玩一个游戏. 蒜头们可以从抽奖箱里抽出 NNN 个字符串,第 iii ...
- 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析
新手,欢迎交流,更新完毕. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:有趣的数字 B. 结果填空:爬楼梯 C. 结果填空:七巧板 D. 结果填空:苹果 ...
- 无脑博士的试管们java_计蒜客 无脑博士和他的试管们
标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...
- 最短路(遍历边)计蒜客—DD坐地铁
题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...
- K - Triangle 计蒜客 - 42405
K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...
- H - Prince and Princess 计蒜客 - 42402
H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...
最新文章
- EventBus的简单使用
- iOS开发触摸事件的传递
- “熊猫血”产妇诞双胞胎困难 丈夫全城寻找血源
- leetcode力扣64. 最小路径和
- SQL Server 2012入门T-SQL基础篇:(7)Where子句与Having子句的区别
- springboot做梦网云科技短信业务
- Python-GUI界面设计(tkinter)
- 非对称加密算法RSA加密解密流程
- 浙江大学计算机考研2020,浙江大学计算机考研经验分享
- iis的Excel的0x80070005解决方案
- photoshop另存为dds文件时的错误
- linux权限750什么意思,chmod 777是什么意思?为您解释chmod 777及切勿使用chmod 777的原因...
- 一文学会CentOS 文件常用命令
- Jetson Xavier NX
- 关于.NET报表中图表控件线条颜色和粗细设置
- CorelDRAW x8警告您所用的软件疑似非法盗版软件,软件功能3天内将被永久停用,解决方法教程
- html网页组织结构,使用HTML和CSS编码创建组织结构图
- 正睿19暑期B班DAY1-1 概率与期望
- MATLAB图形图像处理——图像灰度变换
- ha-sync-mode_如何启用,优化和调整NVIDIA G-Sync