拼多多2020/08/02服务端笔试凉经

1、多多飞行棋
AC95,是没有认真审题。如果最后一步才到终点是输出“0”,不是“paradox”

2、多多给相同的筛子分组
package PDD;

import java.util.*;

public class Rubiks {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int M = in.nextInt();
            String[] strArray = new String[M];

            for (int i = 0; i < M; i++) {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < 6; j++) {
                    sb.append(in.nextInt());
                }
                strArray[i] = sb.toString();
            }

            //Solution
            solution(strArray);
        }
    }

    private static void solution(String[] strArray) {
        Map<String, Integer> map = new HashMap<>();
        boolean[] visited = new boolean[strArray.length];

        for (int i = 0; i < strArray.length; i++) {
            if (visited[i]) {!!
                continue;
            }
            String curStr = strArray[i];
            visited[i] = true;
            map.put(curStr, map.getOrDefault(curStr, 0) + 1);

            Set<String> set = orientationChange(curStr);
            for (int j = i + 1; j < strArray.length; j++) {
                if (!visited[j] && set.contains(strArray[j])) {
                    map.put(curStr, map.getOrDefault(curStr, 0) + 1);
                    visited[j] = true;
                }
            }
        }
        int count = map.size();
        System.out.println(count);
        List<Integer> res = new ArrayList<>();
        for (int num : map.values()) {
            res.add(num);
        }
        res.sort((a, b) -> b - a);
        for (int i = 0; i < res.size(); i++) {
            System.out.print(res.get(i));
            if (i < res.size() - 1) {
                System.out.print(" ");
            }
        }

    }

    private static Set<String> orientationChange(String str) {
        Queue<String> queue = new LinkedList<>();
        queue.add(str);
        Set<String> set = new HashSet<>();
        int count = 81;
        while (count>0) {
            count--;
            String curStr = queue.poll();
            set.add(curStr);
            String childZ = shiftZ(curStr);
            String childY = shiftY(curStr);
            String childX = shiftX(curStr);
            queue.add(childZ);
            queue.add(childY);
            queue.add(childX);
        }
        return set;
    }

    //延着z轴顺时针
    private static String shiftZ(String str) {
        StringBuilder sb = new StringBuilder();
        sb.append(str.charAt(0));
        sb.append(str.charAt(1));
        sb.append(str.charAt(5));
        sb.append(str.charAt(4));
        sb.append(str.charAt(2));
        sb.append(str.charAt(3));
        return sb.toString();
    }

    //延着Y轴顺时针
    private static String shiftY(String str) {
        StringBuilder sb = new StringBuilder();
        sb.append(str.charAt(5));
        sb.append(str.charAt(4));
        sb.append(str.charAt(2));
        sb.append(str.charAt(3));
        sb.append(str.charAt(0));
        sb.append(str.charAt(1));
        return sb.toString();
    }

    //延着X轴顺时针
    private static String shiftX(String str) {
        StringBuilder sb = new StringBuilder();
        sb.append(str.charAt(2));
        sb.append(str.charAt(3));
        sb.append(str.charAt(1));
        sb.append(str.charAt(0));
        sb.append(str.charAt(4));
        sb.append(str.charAt(5));
        return sb.toString();
    }
}


不知道对不对,是我下来自己想的。将题目上的测试用例试了两个是正确的,欢迎指正。

3.多多吃饭。暴力解法,50AC,现在也没有想到更优解。

4.多多种菜,跳过了。
#笔试题目##拼多多#
全部评论

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务