A Three Threes (打表
import java.util.*
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
int n = sc.nextInt()
if (n == 1) System.out.println(1)
if (n == 2) System.out.println(22)
if (n == 3) System.out.println(333)
if (n == 4) System.out.println(4444)
if (n == 5) System.out.println(55555)
if (n == 6) System.out.println(666666)
if (n == 7) System.out.println(7777777)
if (n == 8) System.out.println(88888888)
if (n == 9) System.out.println(999999999)
}
}
B Pentagon (判断是否是同类型的边
import java.util.*
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
String s12 = sc.next()
String t12 = sc.next()
boolean fs12 = false
boolean ft12 = false
if (s12.charAt(1) == s12.charAt(0) + 1 || s12.charAt(1) == 'E' && s12.charAt(0) == 'A' || s12.charAt(1) == 'A' && s12.charAt(0) == 'E' || s12.charAt(0) == s12.charAt(1) + 1) fs12 = true
if (t12.charAt(1) == t12.charAt(0) + 1 || t12.charAt(1) == 'E' && t12.charAt(0) == 'A' || t12.charAt(1) == 'A' && t12.charAt(0) == 'E' || t12.charAt(0) == t12.charAt(1) + 1) ft12 = true
if (fs12 == ft12) System.out.println("Yes")
else System.out.println("No")
}
}
C Repunit Trio (三重循环暴力枚举
import java.util.*
class Main {
static long[] arr = new long[1000010]
static long[] base = {1, 11, 111, 1111, 11111, 111111, 1111111, 11111111, 111111111, 1111111111, 11111111111L, 111111111111L}
static long[] ans = new long[1000010]
static int idx = 0
static int idxa = 0
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
int n = sc.nextInt()
for (int i = 0
for (int j = 0
for (int k = 0
arr[idx++] = base[i] + base[j] + base[k]
Arrays.sort(arr, 0, idx)
// for (int i = 0
for (int i = 0
if (i == 0) ans[idxa ++ ] = arr[i]
else if (arr[i] != arr[i - 1]) ans[idxa ++ ] = arr[i]
}
// System.out.println(idxa)
// for (int i = 0
System.out.println(ans[n - 1])
}
}
D Erase Leaves (找出节点1的n - 1个子树的最小节点和
import java.util.*
class Main {
static int[] h, e, ne, arr
static int idx, idxarr
static int n
static int ans = 0
private static void init() {
h = new int[2 * n + 100]
arr = new int[2 * n + 100]
Arrays.fill(h, -1)
}
private static void add(int a, int b) {
e[idx] = b
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
// 找ver1的其中n - 1棵树的最小总和
n = sc.nextInt()
init()
for (int i = 1
int u = sc.nextInt(), v = sc.nextInt()
add(u, v)
add(v, u)
}
int d1 = 0
for (int i = h[1]
int j = e[i]
arr[idxarr ++ ] = dfs(j, 1)
d1 ++
}
Arrays.sort(arr, 0, idxarr)
// System.out.println("debug -> d1 : " + d1)
for (int i = 0
System.out.println(ans + 1)
}
public static int dfs(int u, int fa) {
int ret = 1
for (int i = h[u]
int j = e[i]
if (j == fa) continue
ret += dfs(j, u)
}
return ret
}
}
AtCoder 333. E Takahashi Quest (贪心 + 栈维护
import java.util.*
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
int n = sc.nextInt()
/**
* 思路 : 贪心
* 策略 : 当我需要用伤害为x[i]的药水的时候优先使用理我最近的一天的那瓶伤害为x[i]的药水
* 实现 : 利用栈维护
* */
int[] t = new int[n + 10], x = new int[n + 10]
boolean[] f = new boolean[n + 10]
boolean[] at = new boolean[n + 10]
for (int i = 1
t[i] = sc.nextInt()
x[i] = sc.nextInt()
}
ArrayList<Stack<Integer>> ast = new ArrayList<>()
for (int i = 0
for (int i = 1
if (t[i] == 1) ast.get(x[i]).push(i)
else {
if (ast.get(x[i]).isEmpty()) { // 如果需要用到伤害为x[i]的药水但是栈是空的, 说明打败不了该天的怪物, 输出-1后结束程序
System.out.println(-1)
return
}
ast.get(x[i]).pop()
at[i] = true
}
}
for (int i = 0
Stack<Integer> st = ast.get(i)
while (!st.isEmpty()) {
int ti = st.pop()
f[ti] = true
}
}
int ans = 0
int now = 0
for (int i = 1
if (!f[i] && !at[i]) now ++
if (at[i]) now --
ans = Math.max(ans, now)
// System.out.println("debug -> now : " + now + " ans : " + ans)
}
System.out.println(ans)
for (int i = 1
if (at[i]) continue
if (!f[i]) System.out.print(1 + " ")
else System.out.print(0 + " ")
}
}
}
// 写了SpecialJudge
// 1 1 1 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0
// 1 1 1 1 1 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0
// 1 1 1 0 0 1 0 1
// 0 0 1 1 1 0 1 1