牛的洗牌


题目

链接:1762. 牛的洗牌 - AcWing题库

农夫约翰坚信快乐的奶牛会产出更多的牛奶,因此他在谷仓中安装了一个巨大的迪斯科球,并计划教他的奶牛跳舞!

在查阅了一些牛的流行舞蹈后,约翰决定教他的奶牛“洗牌舞”。

洗牌舞是由他的 N 只奶牛按一定顺序排成一行,然后连续执行三次“洗牌”,每次“洗牌”都可能会使奶牛重新排序。

为了让奶牛们更容易找到自己所处的位置,约翰用数字 1∼N 对一行中奶牛所在的位置进行了标记,一行中第一头奶牛处于位置 1,第二头奶牛处于位置 2,以此类推,直到位置 N。

每次“洗牌”用 N 个数字 $a_1,a_2,…,a_N$ 来描述,处于位置 i 的奶牛在一次“洗牌”过后,需要移动至位置 $a_i$(因此,每个 $a_i$ 在 1…N 范围内)。

幸运的是,所有 $a_i$ 都是互不相同的,因此,不会存在多头奶牛在洗牌结束后移动到同一个位置的情况。

约翰的每头奶牛都有一个属于自己的唯一 7 位整数 ID (不含前导 0)。

给定你三轮“洗牌”过后的奶牛排列顺序,请你求出奶牛们的初始排列顺序。

代码

import java.util.*;


public class Main {
    static int N = 100010;
    static int n;
    static TreeMap<Integer, Integer> m = new TreeMap<Integer, Integer>();
    static int[] b = new int[1000];
    public static void main(String[] args) {
        Scanner inScanner = new Scanner(System.in);
        n = inScanner.nextInt();
        for(int i = 1; i <= n; i ++)
            m.put(inScanner.nextInt(), i);
        for(int i = 1; i <= n; i ++)
        {
            int k = i;
            int j = 3;
            while(j --> 0)
                k = m.get(k);
            b[k] = inScanner.nextInt();
        }

        for(int i = 1; i <= n; i ++)
            System.out.println(b[i]);
        inScanner.close();
    }
}

文章作者: 姜小白
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜小白 !
评论
  目录