如何準備藍橋杯
首先,由於自己平時都在寫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
不要慌!成績沒出來就是有機會的!
相關文章
- 備戰藍橋杯,你可以這樣準備
- 藍橋杯javaB組備賽Java
- 藍橋杯
- 藍橋杯備忘錄——超聲波
- 藍橋杯 買瓜
- 藍橋杯-分巧克力
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯 剪格子
- 藍橋杯-長草(BFS)
- 藍橋杯-螞蟻感冒
- 藍橋杯-帶分數
- 藍橋杯-翻硬幣
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- 藍橋杯 計算方程
- 藍橋杯-排列序數
- 藍橋杯年號字串字串
- 藍橋杯考點整理
- 藍橋杯 分巧克力(Java)Java
- 藍橋杯訓練2
- 藍橋杯 整數拼接
- 藍橋杯注意的地方
- 藍橋杯學習路線
- 藍橋杯——查詢的妙趣
- 藍橋杯——巧妙地遞迴遞迴
- 藍橋杯-走迷宮(BFS)
- 藍橋杯-地宮取寶
- 藍橋杯-波動數列
- 藍橋杯-k倍區間
- 太陽(藍橋杯14屆)
- 藍橋杯-日誌統計
- 藍橋杯-合併數列
- 藍橋杯-班級活動
- 藍橋杯模板(二)python組Python
- 藍橋杯模板(三)python組Python
- 藍橋杯——暴力列舉篇
- 藍橋杯全排列專題