原创 [算法]—容斥原理

容斥原理 基本思想:拿圖來舉例子吧 我們已知集合A,B,C的數據個數,想求得A∩B∩C的大小 1.我們首先求得A+B+C的大小,但此時2, 4, 6區域計算了兩次,5區域計算了3次 2.所以我們應該將多計算的減去 A∩B∩C =

原创 [C/C++語法]—gets函數及fgets函數

gets函數 gets函數描述 gets函數原型爲 char* gets(char* buffer); gets函數將讀取字符串直至**’\n’**結束,並將最後讀取的’\n’轉化爲’\0’(字符串結束標誌) gets函數將返回

原创 [題解]—漢諾塔III,漢諾塔IV

漢諾塔III 題目描述 約19世紀末,在歐州的商店中出售一種智力玩具,在一塊銅板上有三根杆,最左邊的杆上自上而下、由小到大順序串着由64個圓盤構成的塔。目的是將最左邊杆上的盤全部移到右邊的杆上,條件是一次只能移動一個盤,且不允許大

原创 [算法]—二分查找

int類型的二分查找 基本思想:二分查找的基本思想是每次查找縮小查找範圍的一半 int LowerBound(int a[], int target, int left, int right) { while(right

原创 2016藍橋杯C++ B組部分題解 湊算式 四平方和 交換瓶子

湊算式 這個算式中A ~ I代表1 ~ 9的數字,不同的字母代表不同的數字 比如: 6+8/3+952/714 就是一種解法, 5+3/1+972/486 是另一種解法。 這個算式一共有多少種解法? 注意:你提交應該是個整數,不

原创 C++計算n階行列式

#include <iostream> #include <cstring> using namespace std; const int N = 105; int p[N][N], n, ans; int f(int a[]

原创 二分查找算法模板

二分算法思想 我們目標區間定爲[l, r], 每次縮小一半的空間,知道l = r時我們就找到目標值 整數二分 版本1 當我們把區間劃分爲[l, mid]和[mid + 1, r]時,即我們每次令r = mid或l = mid +

原创 P1135 奇怪的電梯 鄰接表+手寫隊列

算法思路:dfs, bfs, spfa, floyd等方法都可做出,本文用的是圖的廣度優先遍歷:鄰接表+手寫隊列實現 用鄰接表存儲每個點可以到達的樓層 用圖的廣度優先遍歷遍歷得到次數 #include <iostream

原创 P1182 數列分段 Section II 題解

算法思路:首先求最大值最小或最小值最大問題應用二分來直接二分出答案,其次寫出check函數判斷,由題意可得,答案的範圍一定在數列的最大值至數列所有項的和之間,於是我們可令l = 數列中最大值, r = 數列所有項的和,而chec

原创 [C/C++語法]—取整函數

floor()函數 floor函數爲向下取整函數,返回的是小於或小於等於x的最大整數,也就是向負無窮取整 函數原型:double floor(double) floor函數的頭文件爲<math.h> 例如: #include

原创 高精度加減乘除算法模板

本文中的高精度加減乘除的數據範圍爲正整數,不考慮負數的加減乘除 代碼已經過測試 高精度加法 vector<int> add(vector<int> &A, vector<int> &B) { int t = 0;

原创 優先隊列priority_queue

priority_queue priority_queue 優先隊列。其底層是用堆來實現的。隊列爲先進先出,而優先隊列是將優先級最高的元素放在頂端,及優先隊列中,隊首元素一定是優先級最高的元素。 優先隊列的頭文件及聲明 首先,你需