蓝桥杯javaB组省赛基础知识冲刺

前言

题主只是个想混省三的小菜鸡,而且时间不足,所以所写内容可能略有不完善之处,待题主后天考完,有时间时,或许再完善

年份日期问题

闰年判定

闰年:年份能够被4整除但不能被100整除或者能被400整除的为闰年

月份天数

口诀:一三五七八十腊,三十一天永不差。闰年2月29天,平年2月28天
用一个月份数组存,数组的第一个数为0

前缀和,差分

一维前缀和

什么时候用?求一维数组的区间和

二维前缀和

什么时候用?求矩阵的子矩阵和

一维差分

什么时候用?给一维数组一段区间同时加上一个数

二维差分

什么时候用?给矩阵的子矩阵同时加上一个数

二分

什么时候用?有顺序的序列,并且可以按照某一个性质分为两段

并查集

什么时候用

  1. 将两个集合合并
  2. 询问两个集合是否在一个元素中

模版

package class_extra;
import java.util.*;
public class 并查集 {
    public static int n,m;
    public static int N = (int)(1e5 + 10);
    public static int p[] = new int[N];//表示父节点
    //返回祖宗节点,树根父节点就是他自己即p[x] == x
    public static int find(int x){
        if(p[x] != x) p[x] = find(p[x]);
        return p[x];
    }
	public static void main(String[] args) {
		  Scanner scan = new Scanner(System.in);
	        n = scan.nextInt();
	        m = scan.nextInt();
	        for(int i = 1; i <= n; i ++)
	        p[i] = i;
	        while(m -- > 0){
	            String s = scan.next();
	            int a = scan.nextInt();
	            int b = scan.nextInt();
                //合并两个集合
	            if(s.equals("M")) p[find(a)] = find(b);
	            if(s.equals("Q")) {
	            	if(find(a) == find(b))
	            		System.out.println("Yes");
	            	else 
	            		System.out.println("No");
	            }
	        }

	}

}

质数判定

试除法判断质数

    public static boolean is_prim(int n){
        if(n < 2) return false;
        for(int i = 2; i <= n / i; i ++){
            if(n % i == 0) return false;
        }
        return true;
    }

筛质数

每次循环时,把i的倍数给筛掉,如果i没有被筛掉,那他就是质数

import java.util.*;
public class Main{
    public static int N = (int)(1e6 + 10);
    public static boolean st[] = new boolean[N];
    public static int prime[] = new int[N];
    public static int n,cnt;
    public static void getPrims(int n){
        for(int i = 2; i <= n ; i ++){
            //如果i没有被筛掉,就是质数
            if(!st[i]){
                cnt ++;
            }
            //筛去i的倍数
            for(int j = i * 2; j <= n; j += i)
            st[j] = true;
        }
        
    }
    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        getPrims(n);
        System.out.println(cnt);
    }
}

进制转换

(秦九韶算法)
题目:https://www.acwing.com/activity/content/problem/content/8270/

最大公约数

a与b的最大公约数就是a与a%b的最大公约数
https://www.acwing.com/solution/content/43234/

    // a 与 b 的最大公约数等于b 与 a % b 的最大公约数//返回最大公约数
    public static int gcd(int a,int b){
        return b != 0 ? gcd(b,a % b) : a;
    }

最小公倍数

a与b的最大公约数 * 最小公倍数 = a * b
最小公倍数 = a * b / gcd(a,b)

快速幂

题目:https://www.acwing.com/problem/content/877/

  public static int n,b,p;
    public static long a;
    public static long res;
    //返回 a ^ b % p
    public static long pmi(long a,int b,int p){
        res = 1;
        while(b != 0){ //对b进行二进制化,从低位到高位
        if((b & 1) == 1) res = res * a % p; //最后一位为1则乘上a
        b = b >> 1; //右移
        //a用long
        a = a * a % p; //更新a,a依次为a^{2^0},a^{2^1},a^{2^2},....,a^{2^logb}
        }
        return res; 
    }

dfs

暴搜,必考,

bfs

暂时不看了,太麻烦了,好好看看dfs吧

eclipse debug

左边打断点,小虫子启动,F6单步执行程序,F5跟踪到方法,F8到下一个断点

奇淫技巧

计算器的使用

  1. 可以计算20^22次方(快速幂解决的问题)(科学模式)
  2. 可以进行进制转换(程序员模式)
  3. 可以计算两个日期之间的差值(日期计算模式)

excel的使用

  1. 可以看某一天日期是星期几
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值