原创 printf格式化輸出整數

在做CCCC訓練題的時候,偶爾會碰到例如輸入07,輸出07的情況。用字符串難免有點麻煩,不過用sscanf函數再將其轉換爲整型也未嘗不可。但是有一個更簡單的方式就是控制輸出方式。 例如下面的代碼是可以輸出num的數值。如果num

原创 匈牙利算法模板 二分圖最大匹配

bool find(int x){ int i,j; for (j=1;j<=m;j++){ //掃描每個被匹配的物體 if (line[x][j]==true && used[j]=

原创 網絡流Dinic算法

#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #inc

原创 POJ2287 Tian Ji——The Horse Racing

這是一個田忌賽馬的故事。 田忌用差的馬去匹配齊王的好馬,等到田忌的好馬能夠獲勝時,田忌就可以用好馬直接贏得比賽。 一開始用了二分圖的最大匹配做的,先判斷田忌最多能勝多少局,再判斷最多不敗多少局,用(win+notlose- n)*20

原创 二分圖的多重最大匹配——網絡流

說到二分圖的多重最大匹配問題,就可以將其看成由超級原點到超級匯點間的最大流問題。而二分圖已經天然將超級源點和超級匯點間的結點劃分了不同的層次,因此利用dinic就會跑的飛快。當然,根據這個原理,上述dinic算法模板還可以在層次圖的計算上

原创 POJ 1011 Sticks

用當前的木棍拼木棒,問能拼成x(x>=1)根等長木棒的最小長度是多少 首先考慮由最大的木棒開始拼,邊界條件爲所有木棍拼接成一根木棒,因此答案就在max~sum之間枚舉。注意一個需要滿足的性質是,木棒的總長度sum%當前長度len==0,

原创 博弈論(階梯博弈)POJ 1704

對階梯博弈的闡述:博弈在一列階梯上進行,每個階梯上放着自然數個點。兩個人進行階梯博弈,每一步則是將一個集體上的若干個點( >=1 )移到前面去,最後沒有點可以移動的人輸 證明方式:如這就是一個階梯博弈的初始狀態 2 1 3 2 4 …

原创 SPFA算法模板

#include<iostream> #include<queue> #include<stack> #include<cstring> using namespace std; int matrix[100][100]; /

原创 博弈論(尼姆博弈)

尼姆博弈指的是這樣一個博弈遊戲:有任意堆物品,每堆物品的個數是任意的,雙方輪流從中取物品,每一次只能從一堆物品中取部分或全部物品,最少取一件,取到最後一件物品的人獲勝。 結論就是:把每堆物品數全部異或起來,如果得到的值爲0,那麼先手必敗

原创 POJ 3922 A simple stone game(K倍減法遊戲)

題意:兩人取一堆石子,石子有n個。 先手第一次不能全部取完但是至少取一個。之後每人取的個數不能超過另一個人上一次取的數的K倍。拿到最後一顆石子的贏。先手是否有必勝策略?若有,先手第一步最少取幾個? 思路: (1)首先k=1的時候,必敗

原创 Codeforces 9C Hexadecimal‘s number (DFS)

給出一個數,判斷不大於它的數中有多少個只由0,1組成 // 這種方法針對只給出一個數據非常容易,僅僅是單純的DFS #include<iostream> #include<stdio.h> #include<map> using name

原创 HDU 4771 Stealing Harry Potter's Precious

旅行商問題,狀壓dp 用一個二進制數表示是否走過當前的幾個位置 #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #incl

原创 ST表模板(維護區間最大值)

衆所周知,ST表可以用來維護任意一段區間的最大最小值。ST表的狀態可以描述爲從i開始區間長度爲2^j的區間。因此核心代碼爲 for(int j = 0; j< log(n);j++) for(int i = 0 ; i< n;i+

原创 博弈論(斐波那契博弈)

有一堆物品,兩人輪流取物品,先手最少取一個,至多無上限,但不能把物品取完,之後每次取的物品數不能超過上一次取的物品數的二倍且至少爲一件,取走最後一件物品的人獲勝。先手必勝態:當前物品總數不是斐波那契數

原创 Codeforces 768B Code For 1 (簡化版線段樹)

#include<iostream> using namespace std; typedef long long ll; ll query(ll n,ll L, ll R ,ll l, ll r) { if(R<l||L>r||