当前位置:   article > 正文

79-89_arrays.stream(in.nextline().split(",")).maptoint(i

arrays.stream(in.nextline().split(",")).maptoint(integer::parseint).toarray(

【不爱施肥的小布】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static void main(String[] args) {
  8. // 处理输入
  9. Scanner in = new Scanner(System.in);
  10. int m = in.nextInt();
  11. int n = in.nextInt();
  12. in.nextLine();
  13. Integer[] fields = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
  14. // 最少天数小于果林大小可直接返回-1
  15. if (n<m) {
  16. System.out.println(-1);
  17. return;
  18. }
  19. // 最少天数等于果林大小可直接返回max(fields)
  20. if (n==m) {
  21. System.out.println((int) Collections.max(Arrays.asList(fields)));
  22. return;
  23. }
  24. //排序找到最大最小值
  25. Arrays.sort(fields);
  26. int left = 0;
  27. int right = fields[fields.length - 1];
  28. int result = -1;
  29. while (left +1 < right) {
  30. //取中间位置的值作为效能k,这里的k取得是其在数组中的index
  31. int k = (int) Math.ceil((double)(left + right) / 2);
  32. int res = cal(k, fields);
  33. if (res - n > 0) {
  34. left = k;
  35. } else {
  36. result = k;
  37. right = k;
  38. }
  39. }
  40. System.out.println(result);
  41. }
  42. //判断效能为k时,所需总天数
  43. public static int cal(int k, Integer[] fields) {
  44. int days = 0;
  45. for (int i=0;i<fields.length;i++) {
  46. days += Math.ceil(fields[i] / (double)k);
  47. }
  48. return days;
  49. }
  50. }

【组装新的数组】-200

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static int m;
  8. public static int min_num;
  9. public static void main(String[] args) {
  10. // 处理输入
  11. Scanner in = new Scanner(System.in);
  12. Integer[] nums = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
  13. m = in.nextInt();
  14. //排序找到最小值
  15. Arrays.sort(nums);
  16. min_num = nums[0];
  17. System.out.println(dfs(nums, 0, 0, 0));
  18. }
  19. public static int dfs(Integer[] nums, int index, int sum, int count) {
  20. if (sum > m) {
  21. return count;
  22. }
  23. //满足边界条件+1
  24. if (sum <= m && m - min_num < sum) {
  25. return count + 1;
  26. }
  27. for (int i = index; i < nums.length; i++) {
  28. count = dfs(nums, i, sum + nums[i], count);
  29. }
  30. return count;
  31. }
  32. }

【快速开租建站】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static void main(String[] args) {
  8. // 处理输入
  9. Scanner in = new Scanner(System.in);
  10. int taskNum = in.nextInt();
  11. int relationsNum = in.nextInt();
  12. int[][] relation_ids = new int[relationsNum][2];
  13. for (int i = 0; i < relationsNum; i++) {
  14. relation_ids[i][0] = in.nextInt();
  15. relation_ids[i][1] = in.nextInt();
  16. }
  17. // 每个任务的前置依赖任务个数,也就是拓扑排序中的入度
  18. int[] upstream = new int[taskNum];
  19. // 每个任务的下游任务, 也就是拓扑排序中的出度
  20. List<List<Integer>> downstream =new ArrayList<List<Integer>>(taskNum);
  21. for (int i=0;i<taskNum;i++) {
  22. downstream.add(new ArrayList<>());
  23. }
  24. //初始化入度、出度
  25. for (int[] relation_id : relation_ids) {
  26. downstream.get(relation_id[0]).add(relation_id[1]);
  27. upstream[relation_id[1]]+=1;
  28. }
  29. //队列中保存当前入度为0 的任务id
  30. LinkedList<Integer[]> queue = new LinkedList<>();
  31. int result = 1;
  32. for (int i = 0; i < taskNum; i++) {
  33. //将所有入度为零的任务入队, 默认耗时为1
  34. if (upstream[i] == 0) {
  35. queue.add(new Integer[] {i, result});
  36. }
  37. }
  38. while (queue.size() > 0) {
  39. Integer[] current_task = queue.removeFirst();
  40. int task = current_task[0];
  41. int time = current_task[1];
  42. for (Integer downstream_task : downstream.get(task)) {
  43. // 当前任务的入度减小到0时,放入queue中
  44. if (--upstream[downstream_task] == 0) {
  45. result = time + 1;
  46. queue.add(new Integer[] {downstream_task, result});
  47. }
  48. }
  49. }
  50. System.out.println(result);
  51. }
  52. }

【统计友好度最大值】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static void main(String[] args) {
  8. // 处理输入
  9. Scanner in = new Scanner(System.in);
  10. Integer[] seats = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
  11. ArrayList<Integer> left_result_arr = new ArrayList<Integer>();
  12. Integer left_result = 0;
  13. for (int i = 0; i < seats.length; i++) {
  14. if (seats[i] == 0) {
  15. left_result_arr.add(left_result);
  16. left_result = 0;
  17. } else if (seats[i] == 1) {
  18. left_result +=1;
  19. } else {
  20. left_result =0;
  21. }
  22. }
  23. ArrayList<Integer> right_result_arr = new ArrayList<Integer>();
  24. Integer right_result = 0;
  25. for (int i = seats.length - 1; i >= 0; i--) {
  26. if (seats[i] == 0) {
  27. right_result_arr.add(right_result);
  28. right_result = 0;
  29. } else if (seats[i] == 1) {
  30. right_result +=1;
  31. } else {
  32. right_result =0;
  33. }
  34. }
  35. int result = 0;
  36. for (int i = 0; i < left_result_arr.size(); i++) {
  37. result = Math.max(result, left_result_arr.get(i) + right_result_arr.get(left_result_arr.size()-i-1));
  38. }
  39. System.out.println(result);
  40. }
  41. }

【荒地建设电站 / 区域发电量统计】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. public class Main {
  5. public static void main(String[] args) {
  6. //处理输入
  7. Scanner in=new Scanner(System.in);
  8. List<Integer> params =Arrays.stream(in.nextLine().split(" "))
  9. .map(Integer::parseInt)
  10. .collect(Collectors.toList());
  11. int n = params.get(0);
  12. int m = params.get(1);
  13. int c = params.get(2);
  14. int k = params.get(3);
  15. int[][] matrix = new int [n][m];
  16. for (int i=0;i<n;i++) {
  17. String[] num_strs =in.nextLine().split(" ");
  18. for (int j=0;j<m;j++) {
  19. matrix[i][j] = Integer.parseInt(num_strs[j]);
  20. }
  21. }
  22. System.out.println(get_area_count(matrix, k, c));
  23. }
  24. public static int get_area_count(int[][] mat, int threshold, int c) {
  25. int n = mat.length;
  26. int m = mat[0].length;
  27. int[][] s = new int [n+1][m+1];
  28. //1、生成前缀和子矩阵
  29. for (int i = 1; i <= n; ++i){
  30. for (int j = 1; j <= m; ++j) {
  31. //s[i][j]表示以[i,j]作为矩阵最右下角的最大矩阵的前缀和
  32. //解释:以点[i,j]作为作为最右下角的最大矩阵的前缀和需要加上点[i-1,j]和点[i,j-1]的前缀和,然而会重复多加一个点[i-1][j-1]的前缀和,所以要减一个
  33. s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + mat[i - 1][j - 1];
  34. }
  35. }
  36. int ans = 0;
  37. //2、遍历前缀和矩阵,获得边长等于c的矩阵
  38. for (int i = c; i <= n; ++i) {
  39. for (int j = c; j <= m; ++j) {
  40. //重点理解:减去点[i-c][j]和点[i][j-c]的矩阵前缀和,剩下来的为一个边长为c正方形,注意点[i-c][j-c]减了两次,需要加一个回来
  41. if (s[i][j] - s[i - c][j] - s[i][j - c] + s[i - c][j - c] >= threshold)
  42. ans += 1;
  43. }
  44. }
  45. return ans;
  46. }
  47. }

【最大连续文件之和 / 区块链文件转储系统 】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static void main(String[] args) {
  8. // 处理输入
  9. Scanner in = new Scanner(System.in);
  10. int M =in.nextInt();
  11. in.nextLine();
  12. Integer[] F = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
  13. // 窗口左右边界
  14. int left = 0, right = 0;
  15. //窗口和
  16. int window_sum = 0;
  17. //最大窗口和
  18. int window_max = 0;
  19. while (right < F.length) {
  20. int temp = window_sum + F[right];
  21. // 窗口内总和大了,sum减去左边界,左端边界+1
  22. if (temp > M) {
  23. window_sum -= F[left];
  24. left += 1;
  25. }
  26. // 窗口内总和小了,右边界+1,sum加上右边界
  27. else if (temp < M) {
  28. window_sum += F[right];
  29. window_max = Math.max(window_sum, window_max);
  30. right += 1;
  31. }
  32. // 窗口内总和==M,直接return
  33. else {
  34. System.out.println(M);
  35. return;
  36. }
  37. }
  38. System.out.println(window_max);
  39. }
  40. }

【发现新词的数量 /新词挖掘】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static void main(String[] args) {
  8. // 处理输入
  9. Scanner in = new Scanner(System.in);
  10. String content = in.nextLine();
  11. String word = in.nextLine();
  12. System.out.println(contin(content, word));
  13. }
  14. public static int contin(String content, String word){
  15. if(content.length() < word.length())
  16. return 0;
  17. if(word.length() == 0)
  18. return 0;
  19. HashMap<Character, Integer> content_map = new HashMap<Character, Integer>();
  20. HashMap<Character, Integer> word_map = new HashMap<Character, Integer>();
  21. //先统计出word中的字符组成
  22. for (int i=0;i<word.length();i++)
  23. word_map.put(word.toCharArray()[i], word_map.getOrDefault(word.toCharArray()[i], 0) + 1);
  24. char[] content_arr = content.toCharArray();
  25. int word_char_kind = word_map.size();
  26. int right = 0;
  27. int content_child_char_kind = 0;
  28. int result = 0;
  29. while(right < content.length()){
  30. if(right >= word.length()){
  31. int left = right - word.length();
  32. if (word_map.containsKey(content_arr[left]) && word_map.get(content_arr[left]) == content_map.get(content_arr[left]))
  33. content_child_char_kind -=1 ;
  34. content_map.put(content_arr[left], content_map.getOrDefault(content_arr[left], 0) - 1);
  35. }
  36. content_map.put(content_arr[right], content_map.getOrDefault(content_arr[right], 0) + 1);
  37. if (word_map.containsKey(content_arr[right]) && word_map.get(content_arr[right]) == content_map.get(content_arr[right]))
  38. content_child_char_kind+=1;
  39. right+=1;
  40. if (content_child_char_kind == word_char_kind) {
  41. result += 1;
  42. }
  43. }
  44. return result;
  45. }
  46. }

【最接最大输出功率的设备 /查找充电设备组合】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.math.BigInteger;
  5. import java.util.stream.Stream;
  6. class Main {
  7. public static void main(String[] args) {
  8. // 处理输入
  9. Scanner in = new Scanner(System.in);
  10. int n = in.nextInt();
  11. in.nextLine();
  12. Integer[] p = Arrays.stream(in.nextLine().split(" ")).map(Integer::parseInt).toArray(Integer[]::new);
  13. int p_max = in.nextInt();
  14. //dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。
  15. int[][] dp = new int[n + 1][p_max + 1];
  16. // 初始化, i为0,存放编号0的物品的时候,各个容量的背包所能存放的最大价值。
  17. for (int j = p_max; j >= p[0]; j--) {
  18. dp[0][j] = dp[0][j - p[0]] + p[0];
  19. }
  20. for (int i = 1; i < n; i++) { // 遍历物品
  21. for (int j = 0; j <= p_max; j++) { // 遍历背包容量
  22. // 背包容量为j,如果物品i的体积,此时dp[i][j]就是dp[i - 1][j]
  23. if (j < p[i]) {
  24. dp[i][j] = dp[i - 1][j];
  25. } else {
  26. dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - p[i]] + p[i]);
  27. }
  28. }
  29. }
  30. System.out.println(dp[n-1][p_max]);
  31. }
  32. }

【计算是否能达到公司 /上班之路】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. class Main {
  5. private static final int[][] directions = {{0, 1, 1}, {0, -1, 2}, {1, 0, 3}, {-1, 0, 4}};
  6. private static int t, c, n, m;
  7. private static String[][] matrix;
  8. public static void main(String[] args) {
  9. // 处理输入
  10. Scanner in = new Scanner(System.in);
  11. t = in.nextInt();
  12. c = in.nextInt();
  13. n = in.nextInt();
  14. m = in.nextInt();
  15. matrix = new String[n][m];
  16. for (int i = 0; i < n; i++) {
  17. matrix[i] = in.next().split("");
  18. }
  19. //遍历矩阵,找到起点
  20. for (int i = 0; i < n; i++) {
  21. for (int j = 0; j < m; j++) {
  22. boolean[][] visited = new boolean[m][n];
  23. if ("S".equals(matrix[i][j])) {
  24. if (dfs(visited, i, j, 0, 0, 0)) {
  25. System.out.println("YES");
  26. return;
  27. } else {
  28. System.out.println("NO");
  29. return;
  30. }
  31. }
  32. }
  33. }
  34. System.out.println("NO");
  35. return;
  36. }
  37. public static boolean dfs(boolean[][] visited, int x, int y, int ut, int uc, int last_direct) {
  38. // 找到目的地
  39. if ("T".equals(matrix[x][y])) {
  40. return true;
  41. }
  42. //表示当前点已走过
  43. visited[x][y] = true;
  44. // 有四个方向选择走下一步
  45. for (int[] direction : directions) {
  46. int direct = direction[2];
  47. int new_x = x + direction[0];
  48. int new_y = y + direction[1];
  49. // 转向+破壁标记
  50. boolean turn_flag = false;
  51. boolean break_flag = false;
  52. // 越界 + 是否当前点已访问判断
  53. if (new_x >= 0 && new_x < n && new_y >= 0 && new_y < m && !visited[new_x][new_y]) {
  54. //转向+破壁判断
  55. if (last_direct != 0 && last_direct != direct) {
  56. // 转向次数已用尽
  57. if (ut + 1 > t) {
  58. continue;
  59. }
  60. turn_flag = true;
  61. }
  62. if ("*".equals(matrix[new_x][new_y])) {
  63. // 破壁次数已用尽
  64. if (uc + 1 > c) {
  65. continue;
  66. }
  67. break_flag = true;
  68. }
  69. // 可到达目的地T, 返回true
  70. if (dfs(visited, new_x, new_y, ut + (turn_flag ? 1 : 0), uc + (break_flag ? 1 : 0), direct)) {
  71. return true;
  72. }
  73. }
  74. }
  75. return false;
  76. }
  77. }

【简单的解压缩算法】【2023 Q1 | 200分】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. class Main {
  5. public static void main(String[] args) {
  6. // 处理输入
  7. Scanner in = new Scanner(System.in);
  8. //防止最后一个字符是数字
  9. String input_str = in.nextLine() + " ";
  10. LinkedList<String> stack = new LinkedList<>();
  11. // bracket_pos 保存的是所有花括号出现的位置
  12. LinkedList<Integer> bracket_pos = new LinkedList<>();
  13. // 保存数字的字符串
  14. String number_str = "";
  15. for (int i = 0; i < input_str.length(); i++) {
  16. char c = input_str.charAt(i);
  17. //数字
  18. if (c >= '0' && c <= '9') {
  19. number_str += c;
  20. continue;
  21. }
  22. if (number_str.length() > 0) {
  23. int repeat_count = Integer.parseInt(number_str);
  24. number_str = "";
  25. // 若此时栈顶是 } 字符, 将对应的字母重复repeat_count次
  26. if ("}".equals(stack.getLast())) {
  27. //获取上一个 { 的位置
  28. int pos = bracket_pos.removeLast();
  29. //删除左右{}
  30. stack.remove(pos);
  31. stack.removeLast();
  32. // 重复{}之间的字母
  33. repeat_operation(stack, pos, repeat_count);
  34. } else {
  35. //不是 } 字符, 简单重复栈顶字符对应次即可
  36. repeat_operation(stack, stack.size() - 1, repeat_count);
  37. }
  38. }
  39. // { 字符
  40. if (c == '{') {
  41. bracket_pos.add(stack.size());
  42. }
  43. // 其他字符 (字母 + })
  44. stack.add(c + "");
  45. }
  46. // 输出
  47. System.out.println(stack.stream().collect(Collectors.joining()));
  48. }
  49. // 重复{}内的字母, 并重新入栈
  50. public static void repeat_operation(LinkedList<String> stack, int pos, int repeat_count) {
  51. int count = stack.size() - pos;
  52. // temp_stack用于存储弹栈数据
  53. String[] temp_stack = new String[count];
  54. while (count >= 1) {
  55. count -= 1;
  56. temp_stack[count] = stack.removeLast();
  57. }
  58. String temp_str = String.join("", temp_stack);
  59. StringBuilder result = new StringBuilder();
  60. //重复repeat_count次
  61. for (int i = 0; i < repeat_count; i++) {
  62. result.append(temp_str);
  63. }
  64. stack.add(result.toString());
  65. }
  66. }

【修建高铁最优成本 /最优高铁城市修建方案】

  1. import java.util.Scanner;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. class Main {
  5. public static void main(String[] args) {
  6. // 处理输入
  7. Scanner in = new Scanner(System.in);
  8. int n = in.nextInt();
  9. int pair_count_1 = in.nextInt();
  10. int pair_count_2 = in.nextInt();
  11. // 可建设高铁的两城市
  12. int[][] city_pair_1 = new int[pair_count_1][3];
  13. for (int i = 0; i < pair_count_1; i++) {
  14. city_pair_1[i][0] = in.nextInt();
  15. city_pair_1[i][1] = in.nextInt();
  16. city_pair_1[i][2] = in.nextInt();
  17. }
  18. // 必建高铁的两城市
  19. int[][] city_pair_2 = new int[pair_count_2][2];
  20. for (int i = 0; i < pair_count_2; i++) {
  21. city_pair_2[i][0] = in.nextInt();
  22. city_pair_2[i][1] = in.nextInt();
  23. }
  24. UF uf = new UF(n);
  25. // key为修建高铁的两个城市,value为费用
  26. HashMap<String, Integer> city_map = new HashMap<>();
  27. for (int[] city_pair : city_pair_1) {
  28. int city1 = city_pair[0], city2 = city_pair[1];
  29. city_map.put(city1 < city2 ? city1 + "-" + city2 : city2 + "-" + city1, city_pair[2]);
  30. }
  31. int result = 0;
  32. // 先计算必建高铁情况下的费用
  33. for (int[] city_pair : city_pair_2) {
  34. int city1 = city_pair[0], city2 = city_pair[1];
  35. result += city_map.get(city1 < city2 ? city1 + "-" + city2 : city2 + "-" + city1);
  36. // 纳入并查集
  37. uf.union(city1, city2);
  38. }
  39. System.out.println(result);
  40. // 已经满足所有城市通车,直接返回
  41. if (uf.count == 1) {
  42. System.out.println(result);
  43. return;
  44. }
  45. // 按修建费用排序
  46. Arrays.sort(city_pair_1, (a, b) -> a[2] - b[2]);
  47. for (int[] city_pair : city_pair_1) {
  48. int city1 = city_pair[0], city2 = city_pair[1];
  49. // 判断两城市是否相连
  50. if (uf.item[city1] != uf.item[city2]) {
  51. uf.union(city1, city2);
  52. // 若可以合入,则将对应的建造成本计入result
  53. result += city_pair[2];
  54. }
  55. if (uf.count == 1) {
  56. break;
  57. }
  58. }
  59. // count>1代表有的城市无法通车
  60. if (uf.count > 1) {
  61. System.out.println(-1);
  62. return;
  63. }
  64. System.out.println(result);
  65. }
  66. }
  67. // 并查集
  68. class UF {
  69. int[] item;
  70. int count;
  71. public UF(int n) {
  72. item = new int[n + 1];
  73. count = n;
  74. for (int i = 0; i < n; i++) item[i] = i;
  75. }
  76. public int find(int x) {
  77. if (x != item[x]) {
  78. return (item[x] = find(item[x]));
  79. }
  80. return x;
  81. }
  82. public void union(int x, int y) {
  83. int x_item = find(x);
  84. int y_item = find(y);
  85. if (x_item != y_item) {
  86. item[y_item] = x_item;
  87. count--;
  88. }
  89. }
  90. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/121274
推荐阅读
  

闽ICP备14008679号