0319 米哈游笔试AC代码
Q1-100%
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[][] dirs = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt(), m = scan.nextInt();
char[][] grid = new char[n][m];
for (int i = 0; i < n; i++) grid[i] = scan.next().toCharArray();
int[][] hashs1 = new int[n][m], hashs2 = new int[n][m];
for (int[] hash : hashs1) Arrays.fill(hash, -1);
for (int[] hash : hashs2) Arrays.fill(hash, -1);
int ans1 = 0, ans2 = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (hashs1[i][j] == -1) {
int idx = i * n + j;
dfs(grid, hashs1, i, j, idx, false);
ans1++;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (hashs2[i][j] == -1) {
int idx = i * n + j;
dfs(grid, hashs2, i, j, idx, true);
ans2++;
}
}
}
System.out.println(ans1 - ans2);
}
public static void dfs(char[][] grid, int[][] hashs, int i, int j, int idx, boolean flag) {
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || hashs[i][j] != -1) return;
hashs[i][j] = idx;
for (int[] dir : dirs) {
int x = i + dir[0], y = j + dir[1];
if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || hashs[x][y] != -1) continue;
if (!flag) {
if (grid[i][j] != grid[x][y]) continue;
} else {
if (grid[i][j] != grid[x][y] && !((grid[i][j] == 'B' && grid[x][y] == 'G') || (grid[i][j] == 'G' && grid[x][y] == 'B'))) continue;
}
dfs(grid, hashs, i + dir[0], j + dir[1], idx, flag);
}
}
}
Q2-100%(测试用例不行,没考虑字符顺序也A了)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int q = scan.nextInt();
String[][] queries = new String[q][2];
for (int i = 0; i < q; i++) {
queries[i] = new String[]{scan.next(), scan.next()};
}
for (String[] query : queries) {
String s = query[0], t = query[1];
System.out.println(solve(s, t) ? "Yes" : "No");
}
}
public static boolean solve(String s, String t) {
if (s.length() < t.length()) return solve(t, s);
char[] cs1 = s.toCharArray(), cs2 = t.toCharArray();
int[] cnts = new int[26];
for (char c : cs1) cnts[c - 'a']++;
for (char c : cs2) if (--cnts[c - 'a'] < 0 && "mhy".indexOf(c) == -1) return false;
for (int i = 0; i < 26; i++) {
if (i != ('m' - 'a') && i != ('h' - 'a') && i != ('y' - 'a') && cnts[i] != 0) return false;
}
int m1 = cnts['m' - 'a'], h1 = cnts['h' - 'a'], y1 = cnts['y' - 'a'];
return m1 == h1 && m1 == y1;
}
}
Q3-100%
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
public static void main(String[] args) {
int n = nextInt(), mod = (int) 1e9 + 7;
int[] nums = new int[n];
for (int i = 0; i < n; i++) nums[i] = nextInt();
Arrays.sort(nums);
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) map.put(nums[i], i);
long[] dp = new long[n];
long ans = 0;
Arrays.fill(dp, 1);
for (int i = 1; i < n; i++) {
// 暴力法 - 20%
// for (int j = i - 1; j >= 0; j--) {
// if (nums[i] % nums[j] == 0) {
// dp[i] = (dp[i] + dp[j]) % mod;
// }
// }
// 求数nums[i]的因数
for (int j : factorization(nums[i])) {
if (map.containsKey(j)) {
dp[i] = (dp[i] + dp[map.get(j)]) % mod;
}
}
}
for (int i = 0; i < n; i++) ans = (ans + dp[i]) % mod;
ans = (ans - n + mod) % mod;
System.out.println(ans);
}
public static String next() {
while (!tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(br.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
public static int nextInt() {
return Integer.parseInt(next());
}
public static long nextLong() {
return Long.parseLong(next());
}
private static Set<Integer> factorization(int a) {
Set<Integer> ans = new HashSet<>();
for (int i = 1; i * i <= a; i++) {
if (a % i == 0) {
ans.add(i);
ans.add(a / i);
}
}
ans.remove(a);
return ans;
}
}
#米哈游##米哈游笔试#

腾讯云智研发成长空间 255人发布