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