日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结

發布時間:2024/9/30 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 藍橋杯 Java B組 省賽真題詳解及小結匯總【2013年(第4屆)~2020年(第11屆)】

  • 注意:部分代碼及程序 源自 藍橋杯 官網視頻(歷年真題解析)?鄭未老師。
  • 2013年 第04屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2014年 第05屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2015年 第06屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2016年 第07屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2017年 第08屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2018年 第09屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2019年?第10屆 藍橋杯 Java B組 省賽真題詳解及小結
  • 2020年?第11屆 藍橋杯 第1次模擬賽真題詳解及小結(校內模擬)
  • 2020年?第11屆 藍橋杯 第2次模擬賽真題詳解及小結
  • 2020年?第11屆 藍橋杯 C/C++ B組 省賽真題詳解及小結【第1場省賽 2020.7.5】【Java版】
  • 2020年?第11屆 藍橋杯 Java B組 省賽真題詳解及小結【第1場省賽 2020.7.5】
  • 2020年?第11屆 藍橋杯 Java C組 省賽真題詳解及小結【第1場省賽 2020.7.5】

    • 第11屆 藍橋杯-第1、2次模擬(軟件類)真題-(2020年3月、4月)-官方講解視頻

    目? ?錄

    01-試題 A: 組隊

    解法一:Excel求解

    解法二:代碼求解

    02-試題 B: 不同子串

    解法一

    解法二

    03-試題 C: 數列求值

    04-試題 D: 數的分解

    解法一

    解法二

    解法三

    05-試題 E: 迷宮

    06-試題 F: 特別數的和

    解法一

    解法二

    解法三

    07-試題 G: 外賣店優先級

    08-試題 H: 人物相關性分析

    H人物相關性分析_split分析

    H人物相關性分析1

    H人物相關性分析2

    H人物相關性分析3

    09-試題 I: 后綴表達式

    10-試題 J: 靈能傳輸


    本文代碼及解題思路來源于:嗶哩嗶哩網站——第十屆藍橋題目講解 Java B組 A-J題

    ? ??

    01-試題 A: 組隊

    本題總分:5 分

    【問題描述】

    作為籃球隊教練,你需要從以下名單中選出 1 號位至 5 號位各一名球員,組成球隊的首發陣容。

    每位球員擔任 1 號位至 5 號位時的評分如下表所示。請你計算首發陣容 1 號位至 5 號位的評分之和最大可能是多少?

    (如果你把以上文字復制到文本文件中,請務必檢查復制的內容是否與文檔中的一致。在試題目錄下有一個文件 team.txt,內容與上面表格中的相同,請注意第一列是編號)

    【答案提交】

    這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

    【答案】:490

    解法一:Excel求解

    Excel -> 數據 -> 分列
    MAX() -> SUM()

    每一列的最大值 相加 -> 計算器

    492錯誤

    不能是同一個人!!!

    490?

    解法二:代碼求解

    package provincialGames_10_2019_JavaB;import java.util.Scanner;public class A組隊 { // 490public static void main(String[] args) {Scanner input = new Scanner(System.in);try {int[][] team = new int[20][5];for (int i = 0; i < 20; i++) {for (int j = 0; j < 5; j++) {team[i][j] = input.nextInt();}}int maxSum = 0;for (int i = 0; i < 20; i++)for (int j = 0; j < 20; j++)for (int k = 0; k < 20; k++)for (int h = 0; h < 20; h++)for (int g = 0; g < 20; g++)if ((i != j && i != k && i != h && i != g) && (j != k && j != h && j != g)&& (k != h && k != g) && h != g) {int max = team[i][0] + team[j][1] + team[k][2] + team[h][3] + team[g][4];if (max > maxSum)maxSum = max;}System.out.println(maxSum);} catch (Exception e) {input.close();}} }

    02-試題 B: 不同子串

    本題總分:5 分

    【問題描述】

    一個字符串的非空子串是指字符串中長度至少為 1 的連續的一段字符組成的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 個。注意在計算時,只算本質不同的串的個數。

    請問,字符串0100110001010001 有多少個不同的非空子串?

    【答案提交】

    這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

    【答案】:100

    解法一

    package provincialGames_10_2019_JavaB;import java.util.HashSet;public class B不同字串 { // 100public static void main(String[] args) {HashSet set = new HashSet();String str = "0100110001010001";int N = str.length(); // 16while (N > 0) { // 循環16次 N: 16 -> 1int dis = str.length() - N + 1; // dis: 1 -> 16for (int i = 0; i < N; i++) {String ss = str.substring(i, i + dis); // 字串長度: 1 -> 16set.add(ss);}N--;}System.out.println(set.size());} } /** C++方法: for(int i = 0; i < str.length(); i++) {for(int j = i; j <= str.length(); j++) {set.add( str.substr(i, j - i + 1) );} }substring(int beginIndex):返回一個新字符串,它是此字符串的一個子字符串。 該子字符串始于指定索引處的字符,一直到此字符串末尾。 "unhappy".substring(2) -> "happy"substring(int beginIndex, int endIndex):返回一個新字符串, 它是此字符串的一個子字符串。 該子字符串從指定的 beginIndex 處開始, endIndex:到指定的 endIndex-1處結束。 [beginIndex, endIndex - 1] */

    解法二

    package provincialGames_10_2019_JavaB;import java.util.HashSet; import java.util.Set;public class B不同字串2 {public static void main(String[] args) {String target = "0100110001010001";Set<String> sub = new HashSet<String>();for (int step = 0; step < target.length(); step++) {for (int beginIndex = 0, endIndex = 1 + step; endIndex <= target.length(); beginIndex++, endIndex++) {sub.add(target.substring(beginIndex, endIndex));}}System.out.println(sub.size());} } /*審題發現要求是不同的非空子串,則想到Set集合去重,String.substring()方法求子串(一切 為快速解題為前提),* 然后我們發現它的子串規律為一開始子串長度為1,然后在為2,……,最后為原字符串,* 這就好 比切豆腐,一開始要求切成每刀間隔為1豆腐塊,每次移動距離為1,后來要求切成每刀間隔為2豆腐塊,* 每次移動距離 為1,……,直至為整個大豆腐的大小。 */

    03-試題 C: 數列求值

    本題總分:10 分

    【問題描述】

    給定數列 1, 1, 1, 3, 5, 9, 17, …,從第 4 項開始,每項都是前 3 項的和。求第 20190324 項的最后 4 位數字。

    【答案提交】

    這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個 4 位整數(提示:答案的千位不為 0),在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

    【答案】:4659

    package provincialGames_10_2019;public class C數列求值 { //4659public static void main(String[] args) { // int a[] = new int[20190324]; // a[0] = a[1] = a[2] = 1; // for(int i = 3; i < 20190324; i++) { // a[i] = (a[i-1] + a[i-2] + a[i-3]) % 10000; // } // System.out.println(a[20190323]);int arr[] = new int[20190325];arr[1] = arr[2] = arr[3] = 1;for(int i = 4; i <= 20190324; i++){arr[i] = (arr[i-1] + arr[i-2] + arr[i-3]); // % 10000arr[i] %= 10000;}System.out.println(arr[20190324]);// int a = 1, b = 1, c = 1; // int n = 20190324; // while(--n > 0) { // int d = (a + b + c) % 10000; // a = b; // b = c; // c = d; // } // System.out.println(a);// int a = 1, b = 1, c = 1; // for (int i = 4; i <= 20190324; i++) { // int d = (a + b + c) % 10000; //巧用模運算 // a = b; // b = c; // c = d; // } // 20190324%3 == 0 , 6730108*3 == 20190324 // System.out.println(c);}} /* 此題類似于斐波那契數列,但是所求20190324項的最后四位數字,要是單純按照斐波那契數列的思想求下去, 別說long類型,BigInteger類型都存不了這么大的數,然后我們發現,所求20190324項的最后四位數字 (也就是變相的告訴我們運算過程只和每個數的后四位有關系),那么我們只需要保留每次運算結果的后四位就OK了,這樣絕對不會溢出。 */

    04-試題 D: 數的分解

    本題總分:10 分

    【問題描述】

    把 2019 分解成 3 個各不相同的正整數之和,并且要求每個正整數都不包含數字 2 和 4,一共有多少種不同的分解方法?

    注意交換 3 個整數的順序被視為同一種方法,例如 1000+1001+18 和 1001+1000+18 被視為同一種。

    【答案提交】

    這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

    【答案】:40785

    • p(1):不定順序:要除以6.
    • p(2):人為規定:a <= b <= c

    解法一

    package provincialGames_10_2019_JavaB;public class D數的分解1 { // 40785public static void main(String[] args) {int n = 2019;int result = 0;for (int i = 1; i <= 2019; i++) {for (int j = i + 1; j <= n && n - i - j > j; j++) {int k = n - i - j;if (!check(i) && !check(j) && !check(k)) {result++;}}}System.out.println(result);}public static boolean check(int number) {while (number > 0) {int t = number % 10;if (t == 2 || t == 4) {return true;}number /= 10;}return false;}} /***p(1):不定順序:要除以6.p(2):人為規定:a <= b <= c*/

    解法二

    package provincialGames_10_2019_JavaB;public class D數的分解2 {public static void main(String[] args) {int n = 2019;int num = 0;for (int i = 1; i < n; i++) {if (String.valueOf(i).indexOf("2") != -1 || String.valueOf(i).indexOf("4") != -1)continue;for (int j = i + 1; j < n; j++) {if (String.valueOf(j).indexOf("2") != -1 || String.valueOf(j).indexOf("4") != -1)continue;int k = n - i - j;if (i == k || j == k || i == j)continue;if (k > 0 && String.valueOf(k).indexOf("2") == -1 && String.valueOf(k).indexOf("4") == -1) {num++;}}}System.out.println(num / 3);}}

    解法三

    package provincialGames_10_2019_JavaB;public class D數的分解3 {public static void main(String[] args) {int x = 2019; // 2019/3 == 673int sum = 0;String aa;for (int i1 = 1; i1 <= 673; i1++) {aa = String.valueOf(i1);if (aa.contains("2") || aa.contains("4"))continue;for (int i2 = i1 + 1; i2 < (2019 - i1 + 1) / 2; i2++) {aa = String.valueOf(i2);if (aa.contains("2") || aa.contains("4"))continue;aa = String.valueOf(2019 - i1 - i2);if (aa.contains("2") || aa.contains("4"))continue;sum++;}}System.out.println(sum);}}

    05-試題 E: 迷宮

    本題總分:15 分

    【問題描述】

    下圖給出了一個迷宮的平面圖,其中標記為 1 的為障礙,標記為 0 的為可以通行的地方。

    010000

    000100

    001001

    110000

    迷宮的入口為左上角,出口為右下角,在迷宮中,只能從一個位置走到這個它的上、下、左、右四個方向之一。

    對于上面的迷宮,從入口開始,可以按DRRURRDDDR 的順序通過迷宮,一共 10 步。其中 D、U、L、R 分別表示向下、向上、向左、向右走。

    對于下面這個更復雜的迷宮(30 行 50 列),請找出一種通過迷宮的方式,其使用的步數最少,在步數最少的前提下,請找出字典序最小的一個作為答案。請注意在字典序中D<L<R<U。(如果你把以下文字復制到文本文件中,請務必檢查復制的內容是否與文檔中的一致。再試題目錄下有一個 maze.txt,內容與下面的文本相同)

    01010101001011001001010110010110100100001000101010
    00001000100000101010010000100000001001100110100101
    01111011010010001000001101001011100011000000010000
    01000000001010100011010000101000001010101011001011
    00011111000000101000010010100010100000101100000000
    11001000110101000010101100011010011010101011110111
    00011011010101001001001010000001000101001110000000
    10100000101000100110101010111110011000010000111010
    00111000001010100001100010000001000101001100001001
    11000110100001110010001001010101010101010001101000
    00010000100100000101001010101110100010101010000101
    11100100101001001000010000010101010100100100010100
    00000010000000101011001111010001100000101010100011
    10101010011100001000011000010110011110110100001000
    10101010100001101010100101000010100000111011101001
    10000000101100010000101100101101001011100000000100
    10101001000000010100100001000100000100011110101001
    00101001010101101001010100011010101101110000110101
    11001010000100001100000010100101000001000111000010
    00001000110000110101101000000100101001001000011101
    10100101000101000000001110110010110101101010100001
    00101000010000110101010000100010001001000100010101
    10100001000110010001000010101001010101011111010010
    00000100101000000110010100101001000001000000000010
    11010000001001110111001001000011101001011011101000
    00000110100010001000100000001000011101000000110011
    10101000101000100010001111100010101001010000001000
    10000010100101001010110000000100101010001011101000
    00111100001000010000000110111000000001000000001011
    10000001100111010111010001000110111010101101111000

    【答案提交】

    這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個字符串,包含四種字母 D、U、L、R,在提交答案時只填寫這個字符串,填寫多余的內容將無法得分。

    package provincialGames_10_2019_JavaB;import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack;public class E迷宮 {public static void main(String[] args) {Scanner input = new Scanner(System.in);try {String s = "01010101001011001001010110010110100100001000101010"+ "00001000100000101010010000100000001001100110100101"+ "01111011010010001000001101001011100011000000010000"+ "01000000001010100011010000101000001010101011001011"+ "00011111000000101000010010100010100000101100000000"+ "11001000110101000010101100011010011010101011110111"+ "00011011010101001001001010000001000101001110000000"+ "10100000101000100110101010111110011000010000111010"+ "00111000001010100001100010000001000101001100001001"+ "11000110100001110010001001010101010101010001101000"+ "00010000100100000101001010101110100010101010000101"+ "11100100101001001000010000010101010100100100010100"+ "00000010000000101011001111010001100000101010100011"+ "10101010011100001000011000010110011110110100001000"+ "10101010100001101010100101000010100000111011101001"+ "10000000101100010000101100101101001011100000000100"+ "10101001000000010100100001000100000100011110101001"+ "00101001010101101001010100011010101101110000110101"+ "11001010000100001100000010100101000001000111000010"+ "00001000110000110101101000000100101001001000011101"+ "10100101000101000000001110110010110101101010100001"+ "00101000010000110101010000100010001001000100010101"+ "10100001000110010001000010101001010101011111010010"+ "00000100101000000110010100101001000001000000000010"+ "11010000001001110111001001000011101001011011101000"+ "00000110100010001000100000001000011101000000110011"+ "10101000101000100010001111100010101001010000001000"+ "10000010100101001010110000000100101010001011101000"+ "00111100001000010000000110111000000001000000001011"+ "10000001100111010111010001000110111010101101111000";int[][] labyrinth = new int[30][50];for (int i = 0; i < 30; i++) {for (int j = 0; j < 50; j++) {labyrinth[i][j] = s.charAt(50 * i + j) - '0';}}System.out.println(BFS(labyrinth, 30, 50));} catch (Exception e) {input.close();}}public static String BFS(int[][] labyrinth, int row, int column) {int[][] stepArr = { { -1, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 } };String[] direction = { "U", "R", "L", "D" };int[][] visit = new int[row][column]; // 標記是否已經訪問過StringBuilder sb = new StringBuilder();Node node = new Node(0, 0, -1, -1, 0, null);Queue<Node> queue = new LinkedList<Node>();Stack<Node> stack = new Stack<Node>();queue.offer(node);while (!queue.isEmpty()) {Node head = queue.poll();stack.push(head); // 用于回溯路徑visit[head.x][head.y] = 1;for (int i = 0; i < 4; i++) {int x = head.x + stepArr[i][0];int y = head.y + stepArr[i][1];String d = direction[i];// exitif (x == row - 1 && y == column - 1 && labyrinth[x][y] == 0 && visit[x][y] == 0) {// 打印路徑Node top = stack.pop();sb.append(d);sb.append(top.direction);int preX = top.preX;int preY = top.preY;while (!stack.isEmpty()) {top = stack.pop();if (preX == top.x && preY == top.y) {if (top.direction != null)sb.append(top.direction);preX = top.preX;preY = top.preY;}}return sb.reverse().toString();}// bfsif (x >= 0 && x < row && y >= 0 && y < column && labyrinth[x][y] == 0 && visit[x][y] == 0) {Node newNode = new Node(x, y, head.x, head.y, head.step + 1, d);queue.offer(newNode);}}}return null;}}class Node {int x, y;int step;int preX, preY;String direction;Node(int x, int y, int preX, int preY, int step, String direction) {this.x = x;this.y = y;this.preX = preX;this.preY = preY;this.step = step;this.direction = direction;} }

    06-試題 F: 特別數的和

    時間限制: 1.0s 內存限制: 512.0MB 本題總分:15 分

    【問題描述】

    小明對數位中含有 2、0、1、9 的數字很感興趣(不包括前導 0),在 1 到 40 中這樣的數包括 1、2、9、10 至 32、39 和 40,共 28 個,他們的和是 574。

    請問,在 1 到 n 中,所有這樣的數的和是多少?

    【輸入格式】

    輸入一行包含兩個整數 n。

    【輸出格式】

    輸出一行,包含一個整數,表示滿足條件的數的和。

    【樣例輸入】

    40

    【樣例輸出】

    574

    【評測用例規模與約定】

    對于 20% 的評測用例,1 ≤ n ≤ 10。

    對于 50% 的評測用例,1 ≤ n ≤ 100。

    對于 80% 的評測用例,1 ≤ n ≤ 1000。

    對于所有評測用例,1 ≤ n ≤ 10000。

    解法一

    package provincialGames_10_2019_JavaB;import java.util.Scanner;public class F特別數的和 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int sum = 0;for (int i = 1; i <= n; i++) {if (1 <= i && i <= 9) {if (f(i) == true) {sum += i;}} else if (10 <= i && i <= 99) { // 12int a = i / 10;int b = i % 10;if (f(a) == true || f(b) == true) {sum += i;}} else if (100 <= i && i <= 999) { // 123int a = i / 100;int b = i / 10 % 10;int c = i % 10;if (f(a) == true || f(b) == true || f(c) == true) {sum += i;}} else if (1000 <= i && i <= 10000) { // 1234 10000int a = i / 1000;int b = i / 100 % 10;int c = i / 10 % 10;int d = i % 10;if (f(a) == true || f(b) == true || f(c) == true || f(d) == true) {sum += i;}}}System.out.println(sum);}public static boolean f(int x) {if (x == 0 || x == 1 || x == 2 || x == 9) {return true;}return false;} }

    解法二

    package provincialGames_10_2019_JavaB;import java.util.Scanner;public class F特別數的和2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int sum = 0;for (int i = 1; i <= n; i++) {if (check(i)) {sum += i;}}System.out.println(sum);sc.close();}public static boolean check(int number) {while (number > 0) {int t = number % 10;if (t == 2 || t == 0 || t == 1 || t == 9) {return true;}number /= 10;}return false;}}

    解法三

    package provincialGames_10_2019_JavaB;import java.util.Scanner;public class F特別數的和3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int sum = 0;for (int i = 1; i <= n; i++) {String s = String.valueOf(i);if (s.contains("2") || s.contains("0") || s.contains("1") || s.contains("9"))sum += i;}System.out.println(sum);sc.close();}} /* public static void main(String[] args) {int n = 2019;int num = 0;for (int i = 1; i < n; i++) {if ((i + "").indexOf("2") != -1 || (i + "").indexOf("4") != -1)continue;for (int j = i + 1; j < n; j++) {if ((j + "").indexOf("2") != -1 || (j + "").indexOf("4") != -1)continue;int k = n - i - j;if (i == k || j == k || i == j)continue;if (k > 0 && (k + "").indexOf("2") == -1 && (k + "").indexOf("4") == -1)num++;}}System.out.println(num / 3); }public static void main(String[] args) {Scanner input = new Scanner(System.in);try {int n = input.nextInt();int sum = 0;for (int i = 1; i <= n; i++) {String target = Integer.toString(i);if (target.indexOf("2") != -1 || target.indexOf("0") != -1 || target.indexOf("1") != -1|| target.indexOf("9") != -1) {sum += i;}}System.out.println(sum);} catch (Exception e) {input.close();} } */

    07-試題 G: 外賣店優先級

    時間限制: 1.0s 內存限制: 512.0MB 本題總分:20 分

    【問題描述】

    “飽了么”外賣系統中維護著 N 家外賣店,編號 1 ~ N。每家外賣店都有 一個優先級,初始時 (0 時刻) 優先級都為 0。

    每經過 1 個時間單位,如果外賣店沒有訂單,則優先級會減少 1,最低減 到 0;而如果外賣店有訂單,則優先級不減反加,每有一單優先級加 2。

    如果某家外賣店某時刻優先級大于 5,則會被系統加入優先緩存中;如果 優先級小于等于 3,則會被清除出優先緩存。

    給定 T 時刻以內的 M 條訂單信息,請你計算 T 時刻時有多少外賣店在優先緩存中。

    【輸入格式】

    第一行包含 3 個整數 N、M 和 T。

    以下 M 行每行包含兩個整數 ts 和 id,表示 ts 時刻編號 id 的外賣店收到 一個訂單。

    【輸出格式】

    輸出一個整數代表答案。

    【樣例輸入】

    2 6 6

    1 1

    5 2

    3 1

    6 2

    2 1

    6 2

    【樣例輸出】

    1

    【樣例解釋】

    6 時刻時,1 號店優先級降到 3,被移除出優先緩存;2 號店優先級升到 6,加入優先緩存。所以是有 1 家店 (2 號) 在優先緩存中。

    【評測用例規模與約定】

    對于 80% 的評測用例,1 ≤ N, M, T ≤ 10000。

    對于所有評測用例,1 ≤ N, M, T ≤ 100000,1 ≤ ts ≤ T,1 ≤ id ≤ N。

    package provincialGames_10_2019_JavaB;import java.util.HashSet; import java.util.Scanner; import java.util.Set;public class G外賣店優先級 {public static void main(String[] args) {Scanner input = new Scanner(System.in);try {Set<Integer> set = new HashSet<Integer>();int N = input.nextInt(); // N 家外賣店,編�?? 1 �?? Nint M = input.nextInt(); // 給定 T 時刻以內�?? M 條訂單信�??int T = input.nextInt();int[][] orders = new int[M][2]; // 給定 T 時刻以內�?? M 條訂單信�??for (int i = 0; i < M; i++) {for (int j = 0; j < 2; j++) {orders[i][j] = input.nextInt();}}int[] priority = new int[N];int[] sign = new int[N];for (int i = 1; i <= T; i++) {for (int j = 0; j < M; j++) {if (orders[j][0] == i) {priority[orders[j][1] - 1] += 2;if (priority[orders[j][1] - 1] > 5 && !set.contains(orders[j][1] - 1)) {set.add(orders[j][1] - 1);}sign[orders[j][1] - 1] = 1;}}for (int j = 0; j < N; j++) {if (sign[j] == 0 && priority[j] > 0)priority[j]--;if (priority[j] <= 3) {set.remove(j);}}sign = new int[N];}System.out.println(set.size());} catch (Exception e) {input.close();}} }

    08-試題 H: 人物相關性分析

    時間限制: 1.0s 內存限制: 512.0MB 本題總分:20 分

    【問題描述】

    小明正在分析一本小說中的人物相關性。他想知道在小說中 Alice 和 Bob 有多少次同時出現。

    更準確的說,小明定義 Alice 和 Bob“同時出現”的意思是:在小說文本 中 Alice 和 Bob 之間不超過 K 個字符。

    例如以下文本:

    This is a story about Alice and Bob. Alice wants to send a private message to Bob.

    假設 K = 20,則 Alice 和 Bob 同時出現了 2 次,分別是”Alice and Bob” 和”Bob. Alice”。前者 Alice 和 Bob 之間有 5 個字符,后者有 2 個字符。

    注意:

    1. Alice 和 Bob 是大小寫敏感的,alice 或 bob 等并不計算在內。

    2. Alice 和 Bob 應為單獨的單詞,前后可以有標點符號和空格,但是不能有字母。例如 Bobbi 并不算出現了 Bob。

    【輸入格式】

    第一行包含一個整數 K。

    第二行包含一行字符串,只包含大小寫字母、標點符號和空格。長度不超過 1000000。

    【輸出格式】

    輸出一個整數,表示 Alice 和 Bob 同時出現的次數。

    【樣例輸入】

    20

    This is a story about Alice and Bob. Alice wants to send a private message to Bob.

    【樣例輸出】

    2

    【評測用例規模與約定】

    對于所有評測用例,1 ≤ K ≤ 1000000。

    H人物相關性分析_split分析

    Java split()用法

    int indexOf(String str):返回指定字符串的索引位置

    特殊情況有 * ^ : | . \
    (1):split表達式,其實就是一個正則表達式。
    ?* ?^ | 等符號在正則表達式中屬于一種有特殊含義的字符,如果使用此種字符作為分隔符,必須使用轉義符即\\加以轉義。
    (2):如果使用多個分隔符則需要借助 | 符號,如二所示,但需要轉義符的仍然要加上分隔符進行處理

    對某些特殊字符,如果字符(串)正好是正則的一部分,則需要轉義才能使用,

    這些字符有 | , + , * , ^ , $ , / , | , [ , ] , ( , ) , - , . , \等,?
    因它們是正則表達式中的一部分, 所以如果想用該字符本身, 這些字符需要進行轉義才能表示它本身;

    \\s表示 空格,回車,換行等空白符,
    split("\\s+") 能實現 多個空格切割的效果
    +號表示一個或多個的意思

    package provincialGames_10_2019_JavaB;public class H人物相關性分析_split分析 {public static void main(String[] args) { // Scanner sc = new Scanner(System.in); // String str = sc.nextLine(); // // String[] words = str.split("\\s+|\\."); //字符串分割, 按照空格和.分割字符, 若是(.空格)分割后為空字符串。 // for(int i = 0; i < words.length; i++) { // System.out.println(words[i]); // } // System.out.println("words:" + words.length); // // // String[] words2 = str.split("\\s"); // for(int i = 0; i < words2.length; i++) { // System.out.println(words2[i]); // } // System.out.println("words2:" + words2.length); // // // String[] words3 = str.split("\\s+"); // for(int i = 0; i < words3.length; i++) { // System.out.println(words3[i]); // } // System.out.println("words3:" + words3.length); // // // //String[] words2 = str.split("."); //無效!!! // String[] words4 = str.split("\\."); // for(int i = 0; i < words4.length; i++) { // System.out.println(words4[i]); // } // System.out.println("words4:" + words4.length);String stra = "a--bb--ccc--dddd--eeeee";for(String x: stra.split("--", -1)) {System.out.println("-1:" + x);}for(String x: stra.split("--", 0)) {System.out.println("0:" + x);}for(String x: stra.split("--", 1)) {System.out.println("1:" + x);}for(String x: stra.split("--", 2)) {System.out.println("2:" + x);}for(String x: stra.split("--", 3)) {System.out.println("3:" + x);}// String address = "上海^上海市@閔行區#吳中路"; // String[] splitAddress = address.split("\\^|@|#"); // for(String x: splitAddress) { // System.out.println(x); // }}}

    H人物相關性分析1

    i記錄Alice的位置

    從Alice(i)的位置 開始往后找, 尋找Bob的位置

    j記錄Bob的位置

    This is a story about Alice and Bob. Alice wants to send a private message to Bob.
    i == 5, j == 7

    用k記錄i(Alice)與j(Bob)之間的單詞個數

    int sum = 1;
    記錄首個空格

    sum += wordsLength[k] + 1;
    每個單詞與其后的一個空格, 組為一對。

    累加求解。

    int indexOf(String str):返回指定字符串的索引位置

    \\s表示 空格、回車、換行等空白符。
    split("\\s+"):能實現多個空格切割的效果,+號表示一個或多個的意思。

    String str = "ww-ll-ee-aa-bbbb-ccc";
    String a = "-";
    int b = 2;
    for (String retval:
    str.split(a, b)){
    ?? ?System.out.println(retval);
    }
    第二個參數就是,需要切割的份數。
    例:
    b <= 0(默認等于0) 切分后: String[] split =["ww", "ll", "ee", "aa", "bbbb", "ccc"]
    b=1 --> 切分后: String[] split =["ww-ll-ee-aa-bbbb-ccc"]
    b=2 --> 切分后: String[] split =["ww","ll-ee-aa-bbbb-ccc"]
    b=3 --> 切分后: String[] split =["ww", "ll", "ee-aa-bbbb-ccc"]

    package provincialGames_10_2019_JavaB;import java.util.Scanner;public class H人物相關性分析 {public static void main(String[] args) {Scanner input = new Scanner(System.in);try {int K = input.nextInt();input.nextLine();String text = input.nextLine();// 字符串分割,按照空格和.分割字符,若是(.空格)分割后為空字符串。\\s \\s+ \\.String[] words = text.split("\\s+|\\.");// String[] words = text.split("\\s|\\."); 加不加“+” , 效果相同int[] wordsLength = new int[words.length]; // 將分割的字符串的長度值存儲,避免三重循環中調用String.length();for (int i = 0; i < words.length; i++) {wordsLength[i] = words[i].length();}int num = 0;// Alice ——> Bob的距離for (int i = 0; i < words.length; i++) {if (words[i].equals("Alice")) {for (int j = i + 1; j < words.length; j++) {int sum = 1;if (words[j].equals("Bob")) {for (int k = i + 1; k < j; k++) {// 每個單詞的長度加空格占據的長度sum += wordsLength[k] + 1;}if (sum <= K) {num++;}}}}}// Bob ——> Alice的距離for (int i = 0; i < words.length; i++) {if (words[i].equals("Bob")) {for (int j = i + 1; j < words.length; j++) {int sum = 1;if (words[j].equals("Alice")) {for (int k = i + 1; k < j; k++) {// 每個單詞的長度加空格占據的長度sum += wordsLength[k] + 1;}if (sum <= K) {num++;}}}}}System.out.println(num);} catch (Exception e) {input.close();}}}

    H人物相關性分析2

    package provincialGames_10_2019_JavaB;import java.util.Scanner; import java.util.Vector;public class H人物相關性分析2 {static boolean jiancha(char C) {if ((C >= 'a' && C <= 'z') || (C >= 'A' && C <= 'Z')) {return false;}return true;}public static void main(String[] args) {Vector<Integer> vectora = new Vector<Integer>();Vector<Integer> vectorb = new Vector<Integer>();int n;String string;Scanner scanner = new Scanner(System.in);n = scanner.nextInt();string = scanner.nextLine();string = scanner.nextLine();for (int i = 0; i + 5 <= string.length(); i++) {if ((i == 0 || jiancha(string.charAt(i - 1)) == true)&& (i + 5 == string.length() || jiancha(string.charAt(i + 5)) == true)) {if (string.substring(i, i + 5).equals("Alice")) {vectora.add(i);}}}for (int i = 0; i + 3 <= string.length(); i++) {if ((i == 0 || jiancha(string.charAt(i - 1)) == true)&& (i + 3 == string.length() || jiancha(string.charAt(i + 3)) == true)) {if (string.substring(i, i + 3).equals("Bob")) {vectorb.add(i);}}}int ans = 0;for (int i = 0; i < vectora.size(); i++) {int l = 0, r = -1;while (r + 1 < vectorb.size() && vectora.get(i) > vectorb.get(r + 1)) {r++;}while (l <= r && vectora.get(i) > vectorb.get(l) + n + 3) {l++;}ans += r - l + 1;}for (int i = 0; i < vectorb.size(); i++) {int l = 0, r = -1;while (r + 1 < vectora.size() && vectorb.get(i) > vectora.get(r + 1)) {r++;}while (l <= r && vectorb.get(i) > vectora.get(l) + n + 5) {l++;}ans += r - l + 1;}System.out.println(ans);}}

    H人物相關性分析3

    package provincialGames_10_2019_JavaB;import java.util.List; import java.util.ArrayList; import java.util.Scanner; import javax.swing.text.DefaultEditorKit.InsertBreakAction;//This is a story about Alice and Bob. Alice wants to send a private message to Bob.public class H人物相關性分析3 {static List<String> list = new ArrayList(); // 用來保存分割后的字符串static List<Integer> art = new ArrayList<>(); // 記錄.出現的位置static int number = 0;public static void print() {for (String b : list) {System.out.println(b);}}public static void fun(String string) {int count = 0;char crt[] = string.toCharArray(); // 將字符串轉為字符數組for (char b : crt) {if (b == ' ')count++;else if (b == '.') {art.add(count);count++;}}}public static void insert() { // 將'.'插入到list中。int sum = 0;for (int i : art) {sum++;list.add(i + sum, "."); // 將指定的元素添加到指定的位置}}public static void lon(List<String> list2, int k) { // 判斷兩個之間長度是否小于kint lonK = 0;for (String str1 : list2) {lonK += str1.length();}if (lonK <= k) {number++;}}public static void ifmanzu(int k) { // 判斷是否滿組條件的個數// list.sublList(0,3) //將字符串的0到3,取出來int begin = 0;List<String> list1 = list.subList(begin, list.size());while (true) {// System.out.println(list1);int a1 = list1.indexOf("Alice"); // 找出列表中Allice 第一次出現的位置int b1 = list1.indexOf("Bob"); // 找到列表中Bob第一次出現的位置if (a1 == -1 || b1 == -1) { // 沒有同時出現的了break;}if (a1 < b1) { // 表示a1在前面lon(list1.subList(a1 + 1, b1), k);list1.remove(a1); // 移除} else {lon(list1.subList(b1 + 1, a1), k);list1.remove(b1);}}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int k = scanner.nextInt();Scanner scanner1 = new Scanner(System.in);String string = scanner1.nextLine();fun(string);// String [] a = string.split("\\s+"); // 按空格截取String[] a = string.split("[ \\.]");for (String b : a) {list.add(b);}insert(); // 將'.'插入到list中ifmanzu(k);System.out.println(number);// System.out.println(art);}}

    09-試題 I: 后綴表達式

    時間限制: 1.0s 內存限制: 512.0MB 本題總分:25 分

    【問題描述】

    給定 N 個加號、M 個減號以及 N + M + 1 個整數 A1, A2, · · · , AN+M+1,小明想知道在所有由這 N 個加號、M 個減號以及 N + M + 1 個整數湊出的合法的后綴表達式中,結果最大的是哪一個?

    請你輸出這個最大的結果。

    例如使用1 2 3 + -,則 “2 3 + 1 -” 這個后綴表達式結果是 4,是最大的。

    【輸入格式】

    第一行包含兩個整數 N 和 M。

    第二行包含 N + M + 1 個整數 A1, A2, · · · , AN+M+1。

    【輸出格式】

    輸出一個整數,代表答案。

    【樣例輸入】

    1 1

    1 2 3

    【樣例輸出】

    4

    【評測用例規模與約定】

    對于所有評測用例,0 ≤ N, M ≤ 100000,?109 ≤ Ai ≤ 109。

    原文鏈接

    ?* 1.如果只有+號,沒有-號,則遍歷數組累加即可;
    ?* 2.如果只有-號,沒有+號,首先從小到大排序,然后分兩種情況考慮:
    ?* (1).最小值是負數(也就是含有負數),例如[-2, -1, 3, 4, 5],四個減號,運算過程為5 - (-1) - (-2 - 3 - 4) = 5 + 1 - (-9)
    ?* ?= 5 + 1 + 9 = 15,也就是說只要含有負數,負數轉正數,全部相加即可
    ?* (2).最小值是正數(全部是正數),例如[1, 2, 3],兩個減號,運算過程為3 - (1 - 2) = 3 + 2 - 1,也就是說運算規則為除了
    ?* ? ? ? ? 最小值以外的正數相加減去最小值?
    ?* 3.如果有+號,有-號,則討論減號的個數與負數的個數,分兩種情況討論(實際分為三種):
    ?*( 1).減號個數大于等于負數個數(則將負數變正數,每一個負數變正數的過程中, 減號的數量需要減一,然后排序,遍歷數組從大到小累加,
    ?* 直至剩下的數字個數和減號數量相同,然后再減去這些剩下的數字);
    ?* (2).減號個數小于負數個數,這個時候我們就應該使用+號,消除負數(比如[2, -5 , -6, + , -],運算過程為2 - ((-5) + (-6)) =?
    ?* 2 + 11 = 13),我們可以再分情況討論:
    ?* (2.1).全是負數,如[-1, -2, -3, -4, -5],其中一個加號三個減號,運算過程為(-1 - ((-4) + (-5)) - (-3) - (-2) = -1 + 9?
    ?* + 3 + 2),則運算規律為首先排序選擇其中的最大值,加上其他數字的絕對值就行(可以自行繼續證明)。(2.2).有正數,有負數,
    ?* [-1, 19, 17, -4, -5],其中兩個加號兩個減號,則運算過程為(19 + 17 - ((-4) + (-5)) - (-1) = 19 + 17 + 9 + 1),則運算
    ?* 規律為首先排序選擇其中的最大值,加上其他數字的絕對值就行(可以自行繼續證明)。所有情況討論完畢。

    package provincialGames_10_2019_JavaB;import java.util.Arrays; import java.util.Scanner;public class I后綴表達式 {public static void main(String[] args) {Scanner input = new Scanner(System.in);try {int add = input.nextInt();int reduce = input.nextInt();int totalLength = add + reduce + 1;int[] number = new int[totalLength];for (int i = 0; i < totalLength; i++) {number[i] = input.nextInt();}int sum = 0;if (reduce == 0) {for (int i = 0; i < totalLength; i++) {sum += number[i];}}if (add == 0) {Arrays.sort(number);if (number[0] < 0) {for (int i = 0; i <= reduce; i++) {if (number[i] > 0)sum += number[i];elsesum -= number[i];}} else {for (int i = 1; i <= reduce; i++) {sum += number[i];}sum -= number[0];}}if (add != 0 && reduce != 0) {int reduceNum = 0;for (int i = 0; i < totalLength; i++) {if (number[i] < 0) {reduceNum++;}}if (reduce >= reduceNum) {Arrays.sort(number);int temp = reduce;for (int i = 0; i < reduceNum; i++) {number[i] = -number[i];temp--;}Arrays.sort(number);for (int i = totalLength - 1; i >= temp; i--) {sum += number[i];}for (int i = temp - 1; i >= 0; i--) {sum -= number[i];}} else {Arrays.sort(number);sum += number[totalLength - 1];for (int i = 0; i < totalLength - 1; i++) {if (number[i] > 0)sum += number[i];elsesum -= number[i];}}}System.out.println(sum);} catch (Exception e) {input.close();}}}

    10-試題 J: 靈能傳輸

    時間限制: 5.0s 內存限制: 512.0MB 本題總分:25 分

    【題目背景】

    在游戲《星際爭霸 II》中,高階圣堂武士作為星靈的重要 AOE 單位,在游戲的中后期發揮著重要的作用,其技能”靈能風暴“可以消耗大量的靈能對一片區域內的敵軍造成毀滅性的傷害。經常用于對抗人類的生化部隊和蟲族的刺蛇飛龍等低血量單位。

    【問題描述】

    你控制著 n 名高階圣堂武士,方便起見標為 1, 2, · · · , n。每名高階圣堂武士需要一定的靈能來戰斗,每個人有一個靈能值 ai 表示其擁有的靈能的多少(ai 非負表示這名高階圣堂武士比在最佳狀態下多余了 ai 點靈能,ai 為負則表示這名高階圣堂武士還需要 ?ai 點靈能才能到達最佳戰斗狀態)?,F在系統賦予了你的高階圣堂武士一個能力,傳遞靈能,每次你可以選擇一個 i ∈ [2, n ? 1],若 ai ≥ 0 則其兩旁的高階圣堂武士,也就是 i ? 1、i + 1 這兩名高階圣堂武士會從 i 這名高階圣堂武士這里各抽取 ai 點靈能;若 ai < 0 則其兩旁的高階圣堂武士,也就是 i ? 1, i + 1 這兩名高階圣堂武士會給 i 這名高階圣堂武士 ?ai 點靈能。形式化來講就是 ai?1+ = ai , ai+1+ = ai , ai? = 2ai。

    靈能是非常高效的作戰工具,同時也非常危險且不穩定,一位高階圣堂武士擁有的靈能過多或者過少都不好,定義一組高階圣堂武士的不穩定度為 maxn i=1|ai |,請你通過不限次數的傳遞靈能操作使得你控制的這一組高階圣堂武 士的不穩定度最小。

    【輸入格式】

    本題包含多組詢問。輸入的第一行包含一個正整數 T 表示詢問組數。

    接下來依次輸入每一組詢問。

    每組詢問的第一行包含一個正整數 n,表示高階圣堂武士的數量。

    接下來一行包含 n 個數 a1, a2, · · · , an。

    【輸出格式】

    輸出 T 行。每行一個整數依次表示每組詢問的答案。

    【樣例輸入】

    3

    3

    5 -2 3

    4

    0 0 0 0

    3

    1 2 3

    【樣例輸出】

    3

    0

    3

    【樣例說明】

    對于第一組詢問:

    對 2 號高階圣堂武士進行傳輸操作后 a1 = 3,a2 = 2,a3 = 1。答案為 3。

    對于第二組詢問:

    這一組高階圣堂武士擁有的靈能都正好可以讓他們達到最佳戰斗狀態。

    【樣例輸入】

    3

    4

    -1 -2 -3 7

    4

    2 3 4 -8

    5

    -1 -1 6 -1 -1

    【樣例輸出】

    5

    7

    4

    【樣例輸入】

    見文件trans3.in。

    【樣例輸出】

    見文件trans3.ans。

    【數據規模與約定】

    對于所有評測用例,T ≤ 3,3 ≤ n ≤ 300000,|ai | ≤ 109。

    評測時將使用 25 個評測用例測試你的程序,每個評測用例的限制如下:

    ? ? ? ? ? ? ? ? ? ? ? ?

    注意:本題輸入量較大請使用快速的讀入方式。

    trans3.in:

    3
    5
    6 -4 2 -7 3
    10
    -99 -53 43 80 -83 72 99 78 -63 -9
    100
    373837389 225627048 -847064399 487662607 579717002 903937892 -89313283 134706789 259978604 399131737 298183518 62083619 -444218530 403702220 358088455 -973959249 -637339048 -736509394 -552801709 -98262597 -532577703 -393599463 762744971 -683270041 716127816 -991756495 734780346 27919355 -421469435 258728334 844409214 -270792553 -490888330 133696186 843888283 -35439761 -73481392 -118968548 269164182 978558860 522378250 -979427259 -330256906 235192566 -652699569 -708569352 -778693386 241745676 583226906 121065292 -503683097 599394257 405122877 437067802 238539735 -957745973 -843677563 -690555937 908484805 940157941 524765035 730436972 -17856720 -530595388 -727773574 617781285 491720304 -779040285 -298295760 -699402143 230749576 404009775 126806094 -140842651 198136484 681875881 997449600 898972467 -239590302 -62193410 866009412 -401154712 -276085482 593177187 -236793216 487533624 75511548 -446699920 -869912037 -330666015 268937148 -430325605 -635949275 361887555 -855294881 87004526 782523543 -69083645 -965396597 -880697065?

    trans3.ans:

    5
    88
    381470940

    題解:https://blog.csdn.net/kajweb/article/details/89005516

    總結

    以上是生活随笔為你收集整理的2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。