第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)

serein_2216 2023-03-13 16:47:04

裁纸刀

直接手算

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        System.out.print(19 + 20 * 21 + 4);
    }
}

刷题统计

注意数据类型要用long

先算出总刷题数需要多少个星期,再算需要多少个星期 + 还有多少天

import java.util.*;
import java.io.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
  static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));

  public static void main(String[] args) throws IOException {
    String[] s = br.readLine().split(" ");
    long a = Long.parseLong(s[0]);
    long b = Long.parseLong(s[1]);
    long n = Long.parseLong(s[2]);

    long weekCount = a * 5 + b * 2;
  
    long day = n / weekCount * 7;
    long remain = n % weekCount;
    int needDay = 1;
    while(remain > 0) {
      if(needDay == 6 || needDay == 7) {
        remain -= b;
      } else {
        remain -= a;
      }
      needDay++;
      day++;
    }
    System.out.print(day);
  }
}

修建灌木

每颗灌木的最高长度 = max(左边灌木数, 右边灌木数) * 2

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        for(int i = 1; i <= n; i++) {
          int max = Math.max(n - i, i - 1);
          System.out.println(max * 2);
        }
        scan.close();
    }
}

k倍区间(朴素版)

前置知识同余: 

 

给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系。

解题思路:

 

所有满足 nums[i:j] 中元素之和可以被 K 整除的开始下标 iii,必有 sum[j]%K=sum[i]%K。我们以 sum[i]%K 作为键值统计其出现的频率,从而对于每个下标 j 我们可以立即获得能和它组成满足要求的子数组的开始下标 i 的数量。

用int数组来充当前缀和,不用long型,搞了很多段错误来,麻了

import java.util.*;
import java.io.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
  public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        
        long result = 0;
        int[] arr = new int[n + 1];
        int[] preSum = new int[n + 1];
        int[] map = new int[n + 1];
        for(int i = 1; i <= n; i++) {
          arr[i] = sc.nextInt();
          preSum[i] += (preSum[i - 1] + arr[i]) % k;
          result += map[preSum[i]];
          map[preSum[i]]++;
        }

        System.out.print(result + map[0]);
    }
}

 

...全文
9 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,781

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧