From 76c3bfc4953fe6113d1c6d8f22b1dfa5c18eef9d Mon Sep 17 00:00:00 2001 From: Pixxel Date: Sat, 27 Jul 2019 04:12:46 +0800 Subject: [PATCH] add some answers update: some answers written in java --- ...e Fun with Numbers (20 \345\210\206).java" | 34 ++++ ...Palindromic Number (25 \345\210\206).java" | 44 ++++++ ...t Symmetric String (25 \345\210\206).java" | 49 ++++++ .../1041 Be Unique (20 \345\210\206).java" | 69 +++++++++ ...Binary Search Tree (25 \345\210\206).java" | 133 ++++++++++++++++ ...String Subtraction (20 \345\210\206).java" | 40 +++++ ...58 A+B in Hogwarts (20 \345\210\206).java" | 68 ++++++++ ...ck Hole of Numbers (20 \345\210\206).java" | 76 +++++++++ ...cientific Notation (20 \345\210\206).java" | 52 +++++++ ...6 Come on! Let's C (20 \345\210\206).java" | 70 +++++++++ .../1134 Vertex Cover (25 \345\210\206).java" | 90 +++++++++++ ...t A Red-Black Tree (30 \345\210\206).java" | 145 ++++++++++++++++++ ...Google Recruitment (20 \345\210\206).java" | 35 +++++ ...54 Vertex Coloring (25 \345\210\206).java" | 91 +++++++++++ 14 files changed, 996 insertions(+) create mode 100644 "AdvancedLevel_Java/1023 Have Fun with Numbers (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1024 Palindromic Number (25 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1040 Longest Symmetric String (25 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1041 Be Unique (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1043 Is It a Binary Search Tree (25 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1050 String Subtraction (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1058 A+B in Hogwarts (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1069 The Black Hole of Numbers (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1073 Scientific Notation (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1116 Come on! Let's C (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1134 Vertex Cover (25 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1135 Is It A Red-Black Tree (30 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1152 Google Recruitment (20 \345\210\206).java" create mode 100644 "AdvancedLevel_Java/1154 Vertex Coloring (25 \345\210\206).java" diff --git "a/AdvancedLevel_Java/1023 Have Fun with Numbers (20 \345\210\206).java" "b/AdvancedLevel_Java/1023 Have Fun with Numbers (20 \345\210\206).java" new file mode 100644 index 0000000..7722e46 --- /dev/null +++ "b/AdvancedLevel_Java/1023 Have Fun with Numbers (20 \345\210\206).java" @@ -0,0 +1,34 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.Arrays; +import java.util.Map; +import java.util.Scanner; +import java.util.TreeMap; + +public class Main { + private static Scanner scanner = new Scanner(System.in); + private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + BigInteger bigInteger = scanner.nextBigInteger(); + String string = bigInteger.toString(); + + BigInteger bigInteger1 = bigInteger.add(bigInteger); + String string1 = bigInteger1.toString(); + + char[] chars = string.toCharArray(); + Arrays.sort(chars); + String s = String.valueOf(chars); + + char[] chars1 = string1.toCharArray(); + Arrays.sort(chars1); + String s1 = String.valueOf(chars1); + + if (s.equals(s1)) System.out.println("Yes"); + else System.out.println("No"); + System.out.println(string1); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1024 Palindromic Number (25 \345\210\206).java" "b/AdvancedLevel_Java/1024 Palindromic Number (25 \345\210\206).java" new file mode 100644 index 0000000..7d6080a --- /dev/null +++ "b/AdvancedLevel_Java/1024 Palindromic Number (25 \345\210\206).java" @@ -0,0 +1,44 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.Scanner; + +public class Main { + private static Scanner scanner = new Scanner(System.in); + private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + + + BigInteger a = scanner.nextBigInteger(); + int b = scanner.nextInt(); + trans(a,b); + + + } + + private static void trans(BigInteger num,int loop){ + for (int i = 0; i < loop; i++) { + if (isPalindromic(num)){ + System.out.println(num); + System.out.println(i); + System.exit(0); + } + String s = num + ""; + StringBuilder stringBuilder = new StringBuilder(s); + num = num.add(new BigInteger(stringBuilder.reverse().toString())); + } + System.out.println(num); + System.out.println(loop); + } + + private static boolean isPalindromic(BigInteger m){ + String s = m + ""; + StringBuilder stringBuilder = new StringBuilder(s); + stringBuilder = stringBuilder.reverse(); + return s.equals(stringBuilder.toString()); + } + +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1040 Longest Symmetric String (25 \345\210\206).java" "b/AdvancedLevel_Java/1040 Longest Symmetric String (25 \345\210\206).java" new file mode 100644 index 0000000..05fe50f --- /dev/null +++ "b/AdvancedLevel_Java/1040 Longest Symmetric String (25 \345\210\206).java" @@ -0,0 +1,49 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Main { + + private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + + String s = bufferedReader.readLine(); + + int length = 0; + + for (int i = 1; i < s.length() - 1; i++) { + + if (s.charAt(i - 1) == s.charAt(i + 1)){ + + int flag = 1; + while ((i - flag) >= 0 && (i + flag) <= s.length() - 1 && s.charAt(i - flag) == s.charAt(i + flag)){ + flag++; + } + int tem = flag * 2 - 1; + if (length < tem){ + length = tem; + } + } + } + + for (int i = 0; i < s.length() - 1; i++) { + + if (s.charAt(i) == s.charAt(i + 1)){ + int flag = 1; + + while ((i - flag + 1) >= 0 && (i + flag) <= s.length() - 1 && s.charAt(i - flag + 1) == s.charAt(i + flag)){ + flag++; + } + int tem = flag * 2 - 2; + if (length < tem){ + length = tem; + } + } + } + if (length == 0) + System.out.println(1); + else + System.out.println(length); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1041 Be Unique (20 \345\210\206).java" "b/AdvancedLevel_Java/1041 Be Unique (20 \345\210\206).java" new file mode 100644 index 0000000..8150616 --- /dev/null +++ "b/AdvancedLevel_Java/1041 Be Unique (20 \345\210\206).java" @@ -0,0 +1,69 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.util.StringTokenizer; + +public class Main { + + /* + * Case 4: 耗时200ms.内存20242KB;服务器好的时候能过,不好的时候就绿了 + * Case 5: 将下面的两个数组开到100000即可过掉。 + */ + + static int[] ints = new int[100001]; + static int[] ints1 = new int[100001]; + + + public static void main(String[] args) throws IOException { + Reader.init(System.in); + + int nums = Reader.nextInt(); + + for (int i = 0; i < nums; i++) { + int val = Reader.nextInt(); + ints[i] = val; + ints1[val]++; + } + + for (int i = 0; i < nums; i++) { + if(ints1[ints[i]] == 1) { + System.out.println(ints[i]); + return; + } + } + System.out.println("None"); + } +} +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1043 Is It a Binary Search Tree (25 \345\210\206).java" "b/AdvancedLevel_Java/1043 Is It a Binary Search Tree (25 \345\210\206).java" new file mode 100644 index 0000000..2ee9f41 --- /dev/null +++ "b/AdvancedLevel_Java/1043 Is It a Binary Search Tree (25 \345\210\206).java" @@ -0,0 +1,133 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +public class Main { + + private static boolean flag = true; + private static StringBuilder stringBuilder = new StringBuilder(); + + public static void main(String[] args) throws IOException { + Reader.init(System.in); + int nums = Reader.nextInt(); + + List list = new ArrayList<>(); + for (int i = 0; i < nums; i++) { + list.add(Reader.nextInt()); + } + TreeNode treeNode = createTree(list); + if (flag){ + postf(treeNode); + System.out.println("YES"); + System.out.println(stringBuilder.substring(1)); + }else { + flag = true; + TreeNode treeNode1 = createMirrorTree(list); + if (flag){ + postf(treeNode1); + System.out.println("YES"); + System.out.println(stringBuilder.substring(1)); + }else { + System.out.println("NO"); + } + } + } + + private static void postf(TreeNode treeNode){ + if (treeNode == null){ + return; + } + postf(treeNode.left); + postf(treeNode.right); + stringBuilder.append(" ").append(treeNode.val); + } + + private static TreeNode createMirrorTree(List list){ + + if (list.size() == 0){ + return null; + } + + int k = 1; + + while (k < list.size() && list.get(k) >= list.get(0)){ + k++; + } + + List right = list.subList(k,list.size()); + for (int i:right) { + if (i >= list.get(0)){ + flag = false; + return null; + } + } + + TreeNode treeNode = new TreeNode(); + treeNode.val = list.get(0); + + treeNode.left = createMirrorTree(list.subList(1,k)); + treeNode.right = createMirrorTree(list.subList(k,list.size())); + + return treeNode; + } + + private static TreeNode createTree(List list){ + + if (list.size() == 0){ + return null; + } + + int k = 1; + + while (k < list.size() && list.get(k) < list.get(0)){ + k++; + } + + List right = list.subList(k,list.size()); + for (int i:right) { + if (i < list.get(0)){ + flag = false; + return null; + } + } + + TreeNode treeNode = new TreeNode(); + treeNode.val = list.get(0); + + treeNode.left = createTree(list.subList(1,k)); + treeNode.right = createTree(list.subList(k,list.size())); + + return treeNode; + } +} + +class TreeNode{ + int val; + TreeNode left; + TreeNode right; +} + +class Reader{ + + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream inputStream){ + reader = new BufferedReader(new InputStreamReader(inputStream)); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException{ + while (! tokenizer.hasMoreTokens()){ + tokenizer = new StringTokenizer(reader.readLine()); + } + return tokenizer.nextToken(); + } + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1050 String Subtraction (20 \345\210\206).java" "b/AdvancedLevel_Java/1050 String Subtraction (20 \345\210\206).java" new file mode 100644 index 0000000..280a721 --- /dev/null +++ "b/AdvancedLevel_Java/1050 String Subtraction (20 \345\210\206).java" @@ -0,0 +1,40 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.util.StringTokenizer; + +public class Main { + + static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + static boolean[] booleans = new boolean[200]; + public static void main(String[] args) throws IOException { +// Reader.init(System.in); + + String s1 = bufferedReader.readLine(); + String s2 = bufferedReader.readLine(); + + for (int i = 0; i < s1.length(); i++) { + + if (!booleans[s1.charAt(i)]) + + booleans[s1.charAt(i)] = true; + + } + + for (int i = 0; i < s2.length(); i++) { + if (booleans[s2.charAt(i)]){ + booleans[s2.charAt(i)] = false; + } + } + + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < s1.length(); i++) { + char c = s1.charAt(i); + if (booleans[c]) + stringBuilder.append(c); + } + System.out.println(stringBuilder); + } +} diff --git "a/AdvancedLevel_Java/1058 A+B in Hogwarts (20 \345\210\206).java" "b/AdvancedLevel_Java/1058 A+B in Hogwarts (20 \345\210\206).java" new file mode 100644 index 0000000..0e641ad --- /dev/null +++ "b/AdvancedLevel_Java/1058 A+B in Hogwarts (20 \345\210\206).java" @@ -0,0 +1,68 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.util.*; + +public class Main { + public static void main(String[] args) throws IOException { + + Reader.init(System.in); + + String[] s1 = Reader.next().split("\\."); + String[] s2 = Reader.next().split("\\."); + int[] s3 = new int[3]; + + int flag = 0; + + int x1 = Integer.parseInt(s1[2]); + int x2 = Integer.parseInt(s2[2]); + + s3[2] = (x1 + x2) % 29; + flag = (x1 + x2) / 29; + + x1 = Integer.parseInt(s1[1]); + x2 = Integer.parseInt(s2[1]); + s3[1] = ((x1 + x2) % 17 + flag) % 17; + flag = (x1 + x2) / 17 + ((x1 + x2) % 17 + flag) / 17; + + x1 = Integer.parseInt(s1[0]); + x2 = Integer.parseInt(s2[0]); + s3[0] = x1 + x2 + flag; + + System.out.println(s3[0]+ "." + s3[1]+"."+s3[2]); + } +} + +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1069 The Black Hole of Numbers (20 \345\210\206).java" "b/AdvancedLevel_Java/1069 The Black Hole of Numbers (20 \345\210\206).java" new file mode 100644 index 0000000..d324277 --- /dev/null +++ "b/AdvancedLevel_Java/1069 The Black Hole of Numbers (20 \345\210\206).java" @@ -0,0 +1,76 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.text.DecimalFormat; +import java.util.*; + +public class Main { + + static DecimalFormat format = new DecimalFormat("0000"); + + public static void main(String[] args) throws IOException { + + Reader.init(System.in); + int x = Reader.nextInt(); + String s = format.format(x); + char[] chars = s.toCharArray(); + Arrays.sort(chars); + + StringBuilder builder = new StringBuilder(); + builder.append(chars); + + f(builder); + } + + static void f(StringBuilder builder){ + + int x1 = Integer.parseInt(builder.toString()); + int x2 = Integer.parseInt(builder.reverse().toString()); + + int x3 = x2 - x1; + System.out.println(format.format(x2) + " - " + format.format(x1) + " = " + format.format(x3)); + if (x3 == 0 || x3 == 6174) + System.exit(0); + builder = new StringBuilder(); + + char[] chars = format.format(x3).toCharArray(); + Arrays.sort(chars); + + builder.append(chars); + f(builder); + } +} + +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1073 Scientific Notation (20 \345\210\206).java" "b/AdvancedLevel_Java/1073 Scientific Notation (20 \345\210\206).java" new file mode 100644 index 0000000..3607dcd --- /dev/null +++ "b/AdvancedLevel_Java/1073 Scientific Notation (20 \345\210\206).java" @@ -0,0 +1,52 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.StringTokenizer; + +public class Main { + + + public static void main(String[] args) throws IOException { + + Reader.init(System.in); + String s = Reader.next(); + BigDecimal bigDecimal = new BigDecimal(s); + System.out.println(bigDecimal.toPlainString()); + + } +} + +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1116 Come on! Let's C (20 \345\210\206).java" "b/AdvancedLevel_Java/1116 Come on! Let's C (20 \345\210\206).java" new file mode 100644 index 0000000..190f8df --- /dev/null +++ "b/AdvancedLevel_Java/1116 Come on! Let's C (20 \345\210\206).java" @@ -0,0 +1,70 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +public class Main { + + static class Stu{ + String id; + String award = "Chocolate"; + boolean checked = false; + } + + static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + + int nums = Integer.parseInt(bufferedReader.readLine()); + + Map map = new HashMap<>(); + + for (int i = 0; i < nums; i++) { + String id = bufferedReader.readLine(); + Stu stu = new Stu(); + stu.id = id; + + if (i == 0){ + stu.award = "Mystery Award"; + } + if (isPrime(i + 1)){ + stu.award = "Minion"; + } + map.put(id,stu); + } + + int tasks = Integer.parseInt(bufferedReader.readLine()); + StringBuilder stringBuilder = new StringBuilder(); + + for (int i = 0; i < tasks; i++) { + String id = bufferedReader.readLine(); + Stu stu = map.getOrDefault(id,null); + + if (stu == null){ + + stringBuilder.append(id).append(": Are you kidding?\n"); + continue; + } + if (stu.checked){ + stringBuilder.append(id).append(": Checked\n"); + continue; + } + + stu.checked = true; + stringBuilder.append(id).append(": ").append(stu.award).append("\n"); + } + System.out.println(stringBuilder.substring(0,stringBuilder.lastIndexOf("\n"))); + + } + private static boolean isPrime(int val){ + if (val == 1) return false; + if (val == 2) return true; + if (val % 2 == 0) return false; + for (int i = 2; i < Math.sqrt(val) + 1; i++) { + if (val % i == 0) + return false; + } + return true; + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1134 Vertex Cover (25 \345\210\206).java" "b/AdvancedLevel_Java/1134 Vertex Cover (25 \345\210\206).java" new file mode 100644 index 0000000..e9620a2 --- /dev/null +++ "b/AdvancedLevel_Java/1134 Vertex Cover (25 \345\210\206).java" @@ -0,0 +1,90 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws IOException { + + Reader.init(System.in); + + int V = Reader.nextInt(); + int E = Reader.nextInt(); + + Edge[] edge = new Edge[E]; + + for (int i = 0; i < E; i++) { + edge[i] = new Edge(); + edge[i].start = Reader.nextInt(); + edge[i].end = Reader.nextInt(); + } + + int loop = Reader.nextInt(); + + for (int i = 0; i < loop; i++) { + boolean flag = true; + int nums = Reader.nextInt(); + boolean[] vertex = new boolean[V]; + for (int j = 0; j < nums; j++) { + int indice = Reader.nextInt(); + vertex[indice] = true; + } + for (Edge value : edge) { + if (vertex[value.start]) { + continue; + } + if (vertex[value.end]) { + continue; + } + flag = false; + break; + } + + if (flag) + System.out.println("Yes"); + else + System.out.println("No"); + + } + } +} + +class Edge{ + int start; + int end; +} + +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1135 Is It A Red-Black Tree (30 \345\210\206).java" "b/AdvancedLevel_Java/1135 Is It A Red-Black Tree (30 \345\210\206).java" new file mode 100644 index 0000000..3d94dbd --- /dev/null +++ "b/AdvancedLevel_Java/1135 Is It A Red-Black Tree (30 \345\210\206).java" @@ -0,0 +1,145 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.util.*; + +public class Main { + + private static boolean f = false; + + public static void main(String[] args) throws IOException { + + Reader.init(System.in); + int loop = Reader.nextInt(); + for (int i = 0; i < loop; i++) { + int num = Reader.nextInt(); + f = false; + + if (num == 0){ + System.out.println("Yes"); + continue; + } + + TreeNode treeNode = new TreeNode(); + treeNode.val = Reader.nextInt(); + + boolean flag = true; + + TreeNode root = treeNode; + Stack stack = new Stack<>(); + + for (int j = 1; j < num; j++) { + stack.add(treeNode); + TreeNode t = new TreeNode(); + t.val = Reader.nextInt(); + + if (Math.abs(t.val) < Math.abs(stack.peek().val)){ + stack.peek().left = t; + + if (stack.peek().val < 0 && t.val < 0){ + flag = false; + continue; + } + treeNode = t; + continue; + } + while (!stack.isEmpty() && Math.abs(stack.peek().val) < Math.abs(t.val)){ + treeNode = stack.pop(); + } + treeNode.right = t; + + if (treeNode.val < 0 && t.val < 0){ + flag = false; + continue; + } + treeNode = t; + } + + if (!flag){ + System.out.println("No"); + continue; + } + if (root.val < 0) { + System.out.println("No"); + continue; + } + + RBT(root); + + if (!f) + System.out.println("Yes"); + else + System.out.println("No"); + } + } + + private static int RBT(TreeNode treeNode) { + + if (f) return -1; + + if (treeNode == null) + return 0; + + if (treeNode.val < 0){ + if (treeNode.left != null && treeNode.left.val < 0) + f = true; + + if (treeNode.right != null && treeNode.right.val < 0) + f = true; + } + + if (treeNode.val < 0) + treeNode.val = 0; + else + treeNode.val = 1; + + int left = RBT(treeNode.left); + int right = RBT(treeNode.right); + + if (left != right) + f = true; + + treeNode.val = treeNode.val + left; + return treeNode.val; + } +} + +class TreeNode{ + int val; + TreeNode left; + TreeNode right; +} + +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file diff --git "a/AdvancedLevel_Java/1152 Google Recruitment (20 \345\210\206).java" "b/AdvancedLevel_Java/1152 Google Recruitment (20 \345\210\206).java" new file mode 100644 index 0000000..1bd9473 --- /dev/null +++ "b/AdvancedLevel_Java/1152 Google Recruitment (20 \345\210\206).java" @@ -0,0 +1,35 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.math.BigDecimal; + +public class Main { + + private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public static void main(String[] args) throws IOException { + String s = bufferedReader.readLine(); + String[] ss = s.split(" "); + int num = Integer.parseInt(ss[1]); + s = bufferedReader.readLine(); + + for (int i = 0; i < s.length() - num + 1; i++) { + String x = s.substring(i,i + num); + int m = Integer.parseInt(x); + + if (isPrime(m)){ + System.out.println(x); + System.exit(0); + } + } + System.out.println(404); + } + private static boolean isPrime(int x){ + int xx = (int) Math.sqrt(x) + 1; + for (int i = 2; i < xx; i++) { + if (x % i == 0) + return false; + } + return true; + } +} diff --git "a/AdvancedLevel_Java/1154 Vertex Coloring (25 \345\210\206).java" "b/AdvancedLevel_Java/1154 Vertex Coloring (25 \345\210\206).java" new file mode 100644 index 0000000..ee74ae4 --- /dev/null +++ "b/AdvancedLevel_Java/1154 Vertex Coloring (25 \345\210\206).java" @@ -0,0 +1,91 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +public class Main { + + public static void main(String[] args) throws IOException { + + Reader.init(System.in); + + int vertices = Reader.nextInt(); + int edges = Reader.nextInt(); + + int[] Vertices = new int[vertices]; + Edge[] edge = new Edge[edges]; + + for (int i = 0; i < edges; i++) { + edge[i] = new Edge(); + edge[i].start = Reader.nextInt(); + edge[i].end = Reader.nextInt(); + } + + int loop = Reader.nextInt(); + + for (int i = 0; i < loop; i++) { + for (int j = 0; j < vertices; j++) { + Vertices[j] = Reader.nextInt(); + } + + boolean flag = true; + for (int j = 0; j < edges; j++) { + if (Vertices[edge[j].start] == Vertices[edge[j].end]){ + System.out.println("No"); + flag = false; + break; + } + } + + if (flag){ + //目测Case 2 存在孤立顶点。所以Set的使用要在着色的时候而非遍历边的时候。 + Set set = new HashSet<>(); + for (int j = 0; j < vertices; j++) + set.add(Vertices[j]); + + System.out.println(set.size() + "-coloring"); + } + } + } +} + +class Edge{ + int start; + int end; +} + +class Reader { + static BufferedReader reader; + static StringTokenizer tokenizer; + + static void init(InputStream input) { + reader = new BufferedReader( + new InputStreamReader(input) ); + tokenizer = new StringTokenizer(""); + } + + static String next() throws IOException { + while ( ! tokenizer.hasMoreTokens() ) { + //TODO add check for eof if necessary + tokenizer = new StringTokenizer( + reader.readLine() ); + } + return tokenizer.nextToken(); + } + + static int nextInt() throws IOException { + return Integer.parseInt( next() ); + } + + static double nextDouble() throws IOException { + return Double.parseDouble( next() ); + } + + static BigInteger nextBigInteger() throws IOException { + return new BigInteger( next() ); + } +} \ No newline at end of file