原创 算法競賽入門經典訓練指南-4.1學習筆記

(1)平面座標系下,向量和點一樣也用x,y表示,等於向量的起點到終點的位移,也相當於把起點平移到座標原點後終點的座標。 //向量基本運算代碼 struct Point { double x, y; Point(double = 0,

原创 poj3673

題意就是把各兩個數的各個位分別相乘之後把結果加起來。 用個字符串存儲數,之後用long long記一下結果就OK了,非常非常的水#include<iostream> using namespace std; char num1

原创 poj2159

問題大意是問通過兩種加密方式可不可以由第一個字符串轉換到第二個 (1)調換字母的順序 (2)把一個字母映射到另一個字母 實質就是問兩個字符串中字母出現次數的關係,如果每個字母都能在另一個字符串中找到 出現次數相等的字母則兩個字符串可以互相

原创 算法競賽入門經典訓練指南-4.1.2學習筆記

直線的參數表示,直線可以用直線上一點P0和方向向量v表示。 直線上所有點P滿足P=P0+tv,其中t稱爲參數。如果已知直線上的 兩個不同點A和B,則方向向量爲B-A。所以參數方程爲A+(B-A)t 參數方程設定範圍即可表示線段和射線。

原创 字符串替換

實現的功能是對固定的字符換成別的固定的字符串  難點:當要替換的字符串是被替換串的一部分時,必須要做出判斷否則會出現重 思路:把文章裏各行讀入數組,對各個位置開始的子字符串逐個進行判斷。 如果被替換的長度大於替換串則先檢查是否和被替換串相

原创 poj1459

題目大意 有三種結點,發電站,中轉站和消耗站。 因爲是多源多匯的問題,所以建圖時應該自己增加一個超級源,超級匯。 超級源到各個發電站的流量限制等於發點的量, 用的是Dinic算法2000ms的時間限制用了188ms,雖然沒太優化效率還算不

原创 ISAP算法

第一步先用BFS給各個節點標層次。用的是到終點的距離進行標記。 從終點開始從0到終點爲起點給各個點進行標記。 第二步從起點出發對給點到終點的路徑。 有剩餘流量並且相鄰的點的距離函數比此點小1的話,探索的點x前進到相鄰的點。 有剩餘流量但

原创 poj3983

就是給4個數求24點的結果。 應該就是枚舉,也沒什麼別的方法。 但這道題的測試數據只有一組就是例題的輸出。 既然也沒法判斷程序對錯厚就顏無恥的水了一把!#include<iostream> using namespace std;

原创 poj1656

題意: 給三個數x,y,l,如果命令是BLACK,就在(x,y)到(x+L-1,y+L-1)裏塗黑色, WHITE就在(x,y)到(x+L-1,y+L-1)裏塗白色, TEST就在x,y)到(x+L-1,y+L-1)裏統計範圍中黑色方塊

原创 poj1753

題目大意: 有4*4的正方形,每個格子要麼是黑色,要麼是白色,當把一個格子的顏色改變(黑->白或者白->黑)時,其周圍上下左右(如果存在的話)的格子的顏色也被反轉,問至少反轉幾個格子可以使4*4的正方形變爲純白或者純黑? 思路:位圖 +

原创 Dinic算法例子

寫法: (1)用鄰接矩陣存儲各個流的起點終點 (2)用BFS把圖分出層次(記錄到各個點需要流幾次) (3)用DFS對圖找出增廣路進行流量擴充 注意反向流要記錄成容量爲0的路徑,更新正向流時也要更新反向流(教材361頁) #include<

原创 算法競賽入門經典訓練指南-4.1.1學習筆記

點積:兩個向量v和w的點積等於兩者長度的乘積再乘上它們的夾角的餘弦。夾角是指v到w的逆時針旋轉的角。 夾角大於90度時積爲負。(255頁2段爲止) double Dot(Vector A, Vector B){ return A.x*B

原创 poj3030

題目大意: 輸入r,e,c e-c>r則輸出advertise e-c==r則輸出does not matter e-c<r則輸出do not advertise 非常的水,沒啥感想#include<iostream> #includ

原创 poj2027

題目大意 A>=B就輸出MMM BRAINS A<B就輸出NO BRAINS 超級大水和A+B有一拼 #include<iostream> using namespace std; int main() { int

原创 poj2195

題意:在一個圖中給出房子和人的位置,一個房子對應一個人,求出這些房子和人的最小距離。 思路:這是一個帶權二分圖,沒法用匈牙利所以直接上最小費用最大流,設立一個超級源到源點的流量爲房子的個數即總流量,價格爲0。 從源點到各個人流量爲1,價格