拼多多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.多多种菜,跳过了。
#笔试题目##拼多多#