0812美团笔试AK代码
Q1
import java.util.Scanner;
public class P1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) nums[i] = scan.nextInt();
int x = scan.nextInt(), y = scan.nextInt();
boolean flag = false;
for (int i = 0; i < n; i++) {
if (i > 0) {
if ((nums[i] == x && nums[i - 1] == y) || (nums[i] == y && nums[i - 1] == x)) {
flag = true;
break;
}
}
if (i < n - 1) {
if ((nums[i] == x && nums[i + 1] == y) || (nums[i] == y && nums[i + 1] == x)) {
flag = true;
break;
}
}
}
System.out.println(flag ? "Yes" : "No");
}
}
Q2
import java.util.Scanner;
public class P2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) nums[i] = scan.nextInt();
int x = scan.nextInt(), y = scan.nextInt();
if (x > y) {
int temp = x;
x = y;
y = temp;
}
long ans1 = 0, ans2 = 0;
for (int i = x; i < y; i++) {
ans1 += nums[i - 1];
}
for (int i = 0; i < x - 1; i++) {
ans2 += nums[i];
}
for (int i = y - 1; i < n; i++) {
ans2 += nums[i];
}
System.out.println(Math.min(ans1, ans2));
}
}
Q3
import java.util.Scanner;
public class P3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt(), m = scan.nextInt();
long sum = 0, ans = Long.MAX_VALUE;
long[] col = new long[m], row = new long[n];
for (int i = 0; i < n; i++) {
long s = 0;
for (int j = 0; j < m; j++) {
long t = scan.nextInt();
sum += t;
s += t;
col[j] += t;
}
row[i] = s;
}
long t = 0;
for (int i = 0; i < n; i++) {
t += row[i];
ans = Math.min(Math.abs(sum - t - t), ans);
}
t = 0;
for (int i = 0; i < m; i++) {
t += col[i];
ans = Math.min(Math.abs(sum - t - t), ans);
}
System.out.println(ans);
}
}
Q4
import java.util.Scanner;
public class P4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
char[] cs = scan.next().toCharArray();
long ans = n;
for (int i = 1; i <= n / 2; i++) {
if (n % i == 0) {
char[][] g = new char[i][n / i];
boolean[][] vis = new boolean[i][n / i];
int a = 0, b = 0, t = 0;
for (int j = 0; j < n; j++) {
g[b][a] = cs[j];
a++;
if (a == n / i) {
a = 0;
b++;
}
}
for (int x = 0; x < i; x++) {
for (int y = 0; y < n / i; ++y) {
if (!vis[x][y]) {
dfs(g, x, y, i, n / i, g[x][y], vis);
t++;
}
}
}
ans = Math.min(ans, t);
}
}
System.out.println(ans);
}
public static void dfs(char[][] g, int i, int j, int x, int y, char c, boolean[][] vis) {
if (i < 0 || j < 0 || i >= x || j >= y || vis[i][j] || g[i][j] != c) return;
vis[i][j] = true;
dfs(g, i + 1, j, x, y, c, vis);
dfs(g, i - 1, j, x, y, c, vis);
dfs(g, i, j + 1, x, y, c, vis);
dfs(g, i, j - 1, x, y, c, vis);
}
}
Q5
import java.util.*;
public class P5 {
static int n;
static int[] ws;
static List<Integer>[] adjs;
static int[][] dp; // dp[i][j] - 表示第i个节点为第j种颜色时的答案数
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
ws = new int[n];
for (int i = 0; i < n; i++) ws[i] = scan.nextInt();
adjs = new ArrayList[n];
dp = new int[n][2];
for (int i = 0; i < n; i++) adjs[i] = new ArrayList<>();
for (int i = 0; i < n - 1; i++) {
int u = scan.nextInt() - 1, v = scan.nextInt() - 1;
adjs[u].add(v);
adjs[v].add(u);
}
int ans = 0;
dfs(0, -1);
System.out.println(Math.max(dp[0][0], dp[0][1]));
}
public static void dfs(int u, int fa) {
Set<Integer> vs = new HashSet<>();
for (int v : adjs[u]) {
if (v == fa) continue;
dfs(v, u);
dp[u][0] += Math.max(dp[v][1], dp[v][0]);
if (check((long) ws[u] * ws[v])) vs.add(v);
}
for (int v : vs) {
dp[u][1] = Math.max(dp[u][1], dp[u][0] - Math.max(dp[v][1], dp[v][0]) + dp[v][0] + 2); // 树的子节点互不影响
}
}
public static boolean check(long x) {
long t = (long) Math.sqrt(x);
return t * t == x;
}
}
#美团##美团笔试#
