如何准备蓝桥杯

首先,由于自己平时都在写C++,对于Java来说,很多内容其实是不熟悉的,所以想总结一下一些内容。如果你对Java的理解不是很深并且想参加蓝桥杯,那么我觉得这篇博客能够给你带来帮助。

一. Java基础

1. 重载比较器

重载比较器是很重要的内容,调整排序的内容,能够完成很多题目。
这里给出我比较喜欢的写法:重载Comparable 接口

class node implements Comparable<node>{
	int x,y;
	public node(int x, int y) {
		this.x = x; 
		this.y = y;
	}
	public int compareTo(node another) {
		if(this.x == another.x) return this.y - another.y;  //按y升序排序
		return this.x - another.x;  //按x升序排序
	}
}

2. 容器

这里给出 Java 中的 HashMap 的用法,类似的 HashSet / Queue 等等都要会用,如果忘了可以现场查 API 文档,但是这样速度就慢了,所以还是熟练点好。

HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();

map.isEmpty() 			    //返回bool 查看map是否为空

map.containsKey(x) 			//返回bool 查看map中是否有x健
    
map.containsValue(x) 	    //返回bool 查看map中是否有x值

map.put(x, k);				// 给x初始值k  重复时为覆盖

map.putAll(mp);				// 把mp的键值对复制给map

map.get(x); 				// 获取x的对应的值

map.remove(x)               // 移除键为x的键值对
    
map.clear()                 // 清空map

for(int u : map.values() )  // 遍历map的元素集

for(int v : map.keySet() )  // 遍历map的键值对集 
 
for(Entry<Integer, Integer> entry : map.entrySet())   // 遍历map 

for(Map.Entry<Integer,Integer> x: list)
	x.getValue() / x.getKey()
    
map.put(s, (map.get(s) == null ? 1 : map.get(s) + 1));  //累加

3. 字符串处理

首先是字符的接收,这个估计有部分新手是不会的。

char c = cin.next().charAt(0)

其次是关于 String 和 StringBuffer 的内容。

String 的 equals 方法因为重写了 Object 的 equals 方法,所以可以比较字符串的内容,而 StringBuffer 因为没重写 equals 方法,直接继承了 Object 的 equals 方法,所以不行。

顺便提一句: String 因为是 final 类型的,是不可变类,所以对于 append 等操作,是要重新 new String 的,而 StringBuffer 是可变类,不需要重新 new StringBuffer,所以在字符串操作上性能非常好,而且好的不是一点点。

String s= new StringBuilder(String.valueOf(x)).reverse().toString(); 
return s.equals(String.valueOf(x)); 

二. 算法

1. 前向星

对于蓝桥杯来说,需要用到的算法并不多,但是关于图的题有几率会出现,所以感觉掌握前向星建图还是有必要的。

import java.util.Arrays;
import java.util.Scanner;

class node{
	int v, next, w;
	public node(int v, int w, int next) {
		this.v = v; 
		this.next = next;
		this.w = w;
	}
}
public class Main {
	static int N = 1000000 + 5;
	static int head[] = new int[N << 1];
	static node a[] = new node[N << 1];
	static int k = 0, ans = 0;
	static void add(int u, int v, int w) {
		++k;
		a[k] = new node(v, w, head[u]);
		head[u] = k;
	}
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		for(int i = 2; i <= n; i++) {
			int u = cin.nextInt(), v = cin.nextInt(), w = cin.nextInt();
			add(u, v, w);
			add(v, u, w);
		}
	}
}

2. DFS

这个算法是必须掌握的,特别是全排列,推荐去刷 leetcode 的与全排列相关的题,刷完差不多就领悟到精髓了。

3. BFS

BFS 和 DFS 是蓝桥杯中最常见的算法,所以这个也是必须要会的,推荐用 BFS 去写迷宫相关的题目和二叉树的遍历题目,写到有所领悟就行。

4. 动态规划

动态规划是很重要的内容,在这次比赛里面我印象深刻的是用三维 dp 写了一道编程题,估计就是凭借这道题博得的国一,这里我推荐去刷洛谷的相关题目。

5. 数论

关于数论的话其实是很巧妙的,我个人觉得只要掌握唯一分解定理就够了。在这次比赛里填空题就出了一道求约数个数的题目,其实就是把每个数分解后算每个质数对答案的贡献而已。当然,数论的其他内容也不错,但是对于我来说并不是很熟悉,像欧拉定理,像中国定理…数论的话推荐多做点题,然后自己多推一些公式,然后就差不多了,学会这些的话其实对提升自己的思维也是有所帮助的。

三. 注意事项

Java 组的编程题记得写 Main
C++ 组的编程题记得写 return 0
不要慌!成绩没出来就是有机会的!

  • 17
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值