【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】

第一题:裁纸刀

【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第1张图片
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第2张图片

解题:通过观察发现,外围四边都需要剪一次,而中间每行需要总行号(n)-1。

其余的一行的列需要剪 总列(m)-1, 总共n行,所以 得出公式(4 + (n-1) + (m-1)*n) 。

public class Main {
    public static void main(String[] args) {
        int n = 20;
        int m = 22;
        int res = (4 + (n-1) + (m-1)*n);
        System.out.println(res);
    }
}
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第3张图片

第二题:刷题统计

【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第4张图片

解法:先把n分解出有多少个周,一周又能做多少题。 n分出来后还剩下多少天数,减去对应天数做的题, 把所有周 和 能减去的天数 求和 。

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        long a = s.nextLong();
        long b = s.nextLong();
        long n = s.nextLong();
        
        long week = a*5 + b*2;
        long weekCnt = n / week;
        long res = weekCnt * 7;
        n %= week;
        
        for(int i = 1; i <= 7; i++) {
            if(i <= 5 && n > 0) {
                n -= a;
                res++;
            }else if(i > 5 && n > 0) {
                n -= b;
                res++;
            }
        }
        System.out.println(res);
    }
}
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第5张图片

第三题:修剪灌木

【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第6张图片
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第7张图片

解法:主要观察来回生长的特点,就会发现。只有当回到自己的时候高度才会变0,其他时间都是在生长,那么这个其他时间就是往返的时间。

【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第8张图片
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        
        for(int i = 1; i <= n; i++) {
            System.out.println(Math.max((i-1)*2, (n-i)*2));
        }
        
    }

}
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第9张图片

第四题:k倍区间

【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第10张图片
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第11张图片

解法:某一区间是k的倍数,说明该区间的余数为0,那么使用前缀和求[1,n]的和 同时 模 k ,看看哪些余数相同,余数相同表示这两个区间可以相减得去 余数 为0 ,也就是可以被k 整除

【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第12张图片
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    static int N = (int)1e5 + 10;
    static long[] a = new long[N];
    
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int k = s.nextInt();
        for(int i = 1; i <= n; i++) {
            a[i] = s.nextInt();
            a[i] += a[i-1];
        }
        
        long res =  0;
        HashMap mp = new HashMap<>();
        mp.put(0, 1);
        for(int i = 1; i <= n; i++) {
            int x = (int)(a[i] % k);
            res += mp.getOrDefault(x, 0);
            mp.merge(x, 1, Integer::sum);
        }
        
        System.out.println(res);
    }

}
【第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)& 裁纸刀 & 刷题统计 & 修剪灌木 & k倍区间 & k倍区间加强版】_第13张图片

第五题:k倍区间加强版

k倍区间加强版

跑路-----------------------------有缘再见---------------------------------------------------------

总结:

  • 我知道你最近很累,是那种看不见的、身体上和精神上的疲惫感,但是请你一定要坚持下去。就算无人问津也好,技不如人也好,千万别让烦躁和焦虑毁了你的热情和定力。别贪心,我们不可能什么都有,也别灰心,我们不可能什么都没有。

  • 那些低落、疲惫、困惑的时刻,也许是要教会你:不要沮丧,不必惊慌,哪怕一路跌跌撞撞,也偶尔遍体鳞伤,可只要向着心中的方向,总有一天,我会站在最亮的地方,活成自己曾经渴望的模样。

欢迎提出问题~~~~~~~~~~~虽然我不会回答你捏

你可能感兴趣的:(蓝桥杯,算法,开发语言,蓝桥杯,java)