采用队列思想

蒜头君在玩一种接龙的游戏,蒜头君有 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行,每行有一条指令。指令有两种格式:

  1. M i j: i和j是两个整数(1≤i,j≤30000),表示指令涉及的卡片编号。你需要让第i张卡片所在的队列的所有卡片,作为一个整体(头在前尾在后)接至第j 张卡片所在的队列的尾部,输入保证第i号卡片与第 j 号卡片不在同一列。
  2. 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)相关推荐

  1. 计蒜客——成绩排序 Java求解

    小蒜给出了班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前. 输入格式 第一行为 n(0<n<20),表示班里的学生数目: 接下来的 n 行,每 ...

  2. 计蒜客 T1954 圆锥体的表面积 JAVA

    计蒜客 T1954 圆锥体的表面积 蒜头君刚学习了 圆锥体 相关的立体几何知识,为了检测他的学习效果,花椰妹给他出了一个题目,给出一个圆锥体的底面圆的半径 r 和高度 h,计算这个圆锥体的表面积. 花 ...

  3. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  4. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...

  5. 计蒜客 - 新年礼物

    计蒜客 新年礼物 新年了,蒜厂 BOSS 要给小蒜头们发新年礼物,新年礼物有很多份,怎么分配这些礼物呢?蒜厂 BOSS 打算让大家玩一个游戏. 蒜头们可以从抽奖箱里抽出 NNN 个字符串,第 iii ...

  6. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,更新完毕. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:有趣的数字 B. 结果填空:爬楼梯 C. 结果填空:七巧板 D. 结果填空:苹果 ...

  7. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  8. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  9. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

  10. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

最新文章

  1. EventBus的简单使用
  2. iOS开发触摸事件的传递
  3. “熊猫血”产妇诞双胞胎困难 丈夫全城寻找血源
  4. leetcode力扣64. 最小路径和
  5. SQL Server 2012入门T-SQL基础篇:(7)Where子句与Having子句的区别
  6. springboot做梦网云科技短信业务
  7. Python-GUI界面设计(tkinter)
  8. 非对称加密算法RSA加密解密流程
  9. 浙江大学计算机考研2020,浙江大学计算机考研经验分享
  10. iis的Excel的0x80070005解决方案
  11. photoshop另存为dds文件时的错误
  12. linux权限750什么意思,chmod 777是什么意思?为您解释chmod 777及切勿使用chmod 777的原因...
  13. 一文学会CentOS 文件常用命令
  14. Jetson Xavier NX
  15. 关于.NET报表中图表控件线条颜色和粗细设置
  16. CorelDRAW x8警告您所用的软件疑似非法盗版软件,软件功能3天内将被永久停用,解决方法教程
  17. html网页组织结构,使用HTML和CSS编码创建组织结构图
  18. 正睿19暑期B班DAY1-1 概率与期望
  19. MATLAB图形图像处理——图像灰度变换
  20. ha-sync-mode_如何启用,优化和调整NVIDIA G-Sync

热门文章

  1. 渤海银行即将在港交所上市,消费贷款余额两年增长近10倍
  2. background-image 背景图片的设置
  3. MC9S12XEP100 ADC模块使用总结
  4. 网络安全领域目前面临着哪些问题?
  5. 前端开发值得推荐的各种资源
  6. 快手答题恢复账号20道题
  7. Download模块 (十二)
  8. 计算机专业导论的作用,计算机专业导论第00讲-计算机绪论.pdf
  9. 大家学习雷锋好榜样啊~~ 帮个忙啊
  10. [附源码]java毕业设计旅游景点管理系统