Time of Update: 2018-12-05
題意:給出一些擠奶機、奶牛,以及他們之間距離的權值,每隻奶牛都要走到任意一台機器中,每台機器最多為M只奶牛服務,問所有奶牛都完成任務,所走的路程最遠的那隻奶牛,所走的路程最短可以是多少。(0代表的是兩點之間沒有直接路徑。) 首先求出任意點間的最短路,由於資料量不大,可用Floyd。注意到,如果將奶牛、機器作為左右兩幅圖,做一次二分匹配,如果能將所有奶牛匹配完畢,即是完成了任務,這裡就是多重匹配。但題目要求最遠路程最小,需要二分長度,每次二分以是否能完成二分匹配為標準改變上下限。對於二分圖的多重
Time of Update: 2018-12-05
求一個串中有多少重複字串?如ababab中結果為3,a = ab。方法:利用KMP的預先處理得出數組p[i],很容易得出a長度為len - p[len]。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>
Time of Update: 2018-12-05
改進的匈牙利188ms水過。。。。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <cstdio>#include <math.h>#include <iomanip>#include <
Time of Update: 2018-12-05
kmp模板題,不懂可看Matrix67's blog 複雜度分攤為O(n)#define N 1000010char w[10005];//short stringchar t[1000005];//long stringint p[10005];//數組p[j],表示當匹配到B數組(主串)的第j個字母而第j+1個字母不能匹配了時,新的j最大是多少int sum;int n,m;void gao(){//對模式串預先處理p數組 int i,j = 0; p[1] = 0;
Time of Update: 2018-12-05
這題跟POJ 2752差不多,因為要求首碼,所以要從前到後遍曆求出每個滿足要求的首碼。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include
Time of Update: 2018-12-05
題目貌似有點難理解,忍不住看了一下解題報告。。。囧方法:對每行求最小重複長度,求出lcm,記為ans1;再對每列求最小重複長度,求出lcm,記為ans2ans1*ans2就是最後答案#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include
Time of Update: 2018-12-05
理解好kmp演算法中的p數組的含義(常用next數組,但我習慣命名為p^_^),p數組含義是第i個字元跟首碼中最長的k個相同,所以從最後一個一直往回找j = p[ j ],就是結果,注意從小到大輸出。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>
Time of Update: 2018-12-05
spoj 687#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <cstdio>#include <math.h>#include <iomanip>#include
Time of Update: 2018-12-05
題意很簡單,給出一棵樹的前序&中序遍曆,輸出後續遍曆。首先我們來研究一下第一個sample:DBACEGF ABCDEFG前序走訪是先是從根節點->左子樹->右子樹;而中序遍曆則是左子樹->根節點->右子樹。所以DBACEGF中D是根, ABC DEFG 中序可以找左子樹&右子樹,此時把D放在輸出數組的最後一個,然後先遞迴處理右子樹再處理左子樹。#include <map>#include <set>#include
Time of Update: 2018-12-05
看來一個大牛的code,好厲害,完全不用結構體啥的去建樹,就只利用數組的下標關係去記錄,贊~#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include
Time of Update: 2018-12-05
這題算是並查集的變形,每個blocks需要記錄三個資訊分別是under(位於x以下的個數),cnt(該block所在堆的積木個數),fa(父親是誰,注意這個父親是位於當前block的下面那個)。接著就利用並查集的壓縮路徑回溯時更新under數組。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>
Time of Update: 2018-12-05
二叉搜尋樹:左子樹比根小,右子樹比根大,中序遍曆會得出有序序列。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include
Time of Update: 2018-12-05
A,B水題。C:暴力枚舉l~r之間的lucky number,因為最多約有1500個lucky number,所以可以大膽暴力!注意int溢出#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include
Time of Update: 2018-12-05
其實這算是一道水題,方法比較暴力,題意問有多少個矩形能夠包含至少k個題中的star(允許相交),於是可以預先處理一下,用數組a[i][j]記錄(i,j)的左上方有多少個星形中心,接著就用兩個迴圈把行定下來,對列進行遍曆,其中的數學關係我是畫圖推出x = a[j-1][r-1] + a[i][l] - a[i][r-1] - a[j-1][l];代表當前矩形有多少個星形(包括相交的情況),如果比k還少右邊界就要向右擴充,比k大就直接加上矩形右邊餘下的列數然後左邊界向右擴充。#include
Time of Update: 2018-12-05
題意是求最小用幾輛出租車完成n個任務,方法:最小路徑覆蓋= 點數 - 最大匹配數,這裡有個注意的細節http://www.cnblogs.com/ka200812/archive/2011/07/31/2122641.html#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include &
Time of Update: 2018-12-05
solution:用一個數組記錄該字元對應首碼中某個字元的下標(下標從1開始而且是必須是連續的),譬如ababab,就有i p[i]1--->02--->03--->14--->25--->36--->4接著就檢查2~len - 1中是否有p[i] == x,各種亂搞。#include <map>#include <set>#include <list>#include <queue>#include &
Time of Update: 2018-12-05
dp[i][0]表示不取該點,dp[i][1]取該點轉移方程:dp[i][1] = w[i] + ∑dp[j][0]; dp[i][0] = ∑max(dp[j][0] , dp[j][1]);(j為i的兒子) #include <map>#include <set>#include <list>#include <queue>#include <deque>#include
Time of Update: 2018-12-05
#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <cstdio>#include <math.h>#include <iomanip>#include
Time of Update: 2018-12-05
剛開始沒看清楚題目,直接匈牙利演算法,後來看到一句話Then print a series of all the slides whose numbers can be uniquely determined from the input輸出要唯一!就是問每條邊是否唯一,做法:先用一次匈牙利求出一個匹配,再逐條邊拆,當出現另一個完全符合時就是none,否則可以輸出結果。注意match[i] = j的i是x,j是y。#include <map>#include <set>#
Time of Update: 2018-12-05
昨晚各種傻x,首先B數組開小了過不了ST,然後傻x的去做了D,結果規律找錯了(都怪sample下面再解釋),結果錯過了C,C很水,直接暴力就可過。A、B水不解釋C數學題,分解n的因子就可以,直接爆330ms過,注意64位D規律題,分情況討論:預設n為最小邊①n=1,結果是n*m②n=2,最優解的情況是以4列為一組,其中前兩列填滿4個,具體可以畫圖試試③n>2,最優解是每一行畫一個隔一個空格,注意要兩列兩列的錯開,所以有(n*m+1)/2個ps:sample有點誤導人的嫌疑,我一味的想著sa