Time of Update: 2018-12-05
//BFS寬度優先搜尋//G[x][y][k]表示走到(x,y)後還能飛k步的最優值#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;const int MAX = 102;const int dir[4][2] = {1,0,-1,0,0,1,0,-1};int N,M,D,ans;int
Time of Update: 2018-12-05
//Tarjan求橋 + LCA//蛋疼題目,確實想不到用LCA這個如此巧妙的方法,主要也就寫下求橋,對Tarjan的DFN,LOW值再加深下理解//重點是對橋的記錄,本來想通過用邊來記錄,後來發現這是無解的,用橋與點對應就可以了//一開始還想實踐下LRJ書裡面說的,縮點後形成的樹每條邊都是橋,後來覺得太難打了..就我這麼渣的代碼能力,打起來太蛋疼了-
Time of Update: 2018-12-05
主題:我的成功可以複製聽完後,一語驚醒夢中人。幽默而又不失深刻內涵的演講方式,深深的打動了我。對性格決定命運又有了更深刻的瞭解! 一、成功的定義就是改變自己(這和李開複對成功的定義差不多,李開複成功的定義是做最好的自己 經過我的思考,小人物的成功便是讓自己得到他人的認可,而大人物的成功確是讓自己得到自己的認可。我想這是兩者的區別所在。)二、時刻準備著機會的來臨三、人生是一場長跑,所以眼光要長遠,做事要大氣。四、幸福不在於你擁有了多少,而是把你擁有的來做你自己真正在乎的事情。六、年輕人不要抱怨,不
Time of Update: 2018-12-05
//搜尋+字典樹(Trie)//維基百科關於字典樹的介紹//Trie,又稱單詞尋找樹,是一種樹形結構,是一種雜湊樹的變種。//典型應用是用於統計和排序大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文本詞頻統計。//它的優點是:最大限度地減少無謂的字串比較,查詢效率比雜湊表高。#include<cstdio>#include<cstring>using namespace std;int n,m,ans;char str[10];struct dic_tree//
Time of Update: 2018-12-05
//枚舉 +
Time of Update: 2018-12-05
新手賽的題目,讓我回想起打醬油的時光//線段樹#include<iostream>#include<cstdio>#include<cstring>#define INF 100000000using namespace std;int T,M;char cmd[10],n;bool R[100005],G[100005];struct seg{int
Time of Update: 2018-12-05
//HASH//確實想不到HASH可以用在這麼地方,需要把問題進行轉化,看了別人解題報告才會寫的//題意是求一個最長的範圍,在這個範圍內各種FEATRUE出現的次數相同//很直接想到將他們轉化成位然後存起來,然後每位從1到N累加,但是規模還是10W,要找這麼大規模中2個數相減他們的差是相同的,並且距離最遠的,是O(n^2)//對於SAMPLE的資料的處理//前置字元為零 000
Time of Update: 2018-12-05
//動態規劃//dp1[i]數組表示從左往右以i為終點最大連續和//dp2[i]數組表示從右往左以i為終點最大連續和//dp3[i]數組表示從右往左記錄下到當前位置能取到的最大值,即記憶化,使調用該值不必再次迴圈//最終最大值_max = max(dp1[i] + dp3[i+1])//arr: 1,-1,2,2,3,-3,4,-4,5,-5//dp[1]: 1, 0,2,4,7, 4,8, 4,9, 4//dp[2]: 9, 8,9,7,5, 2,5, 1,5,-5//dp[3]: 9,
Time of Update: 2018-12-05
//字典排序,一開始以為很水,隨便快排完組合下就好了,誰知道有特殊情況,如c,ca,應該是輸出cac而不是c,ca//因此用填充末位的方法處理特殊情況,如c,ca,cda,cc四個字串,將他們轉化成ccccc...(1),caaaaaa....(2),cdaaaaaa....(3),cccccc....(2)//括弧中記錄他們的原始長度,這樣做的原因是為了能用快速排序方便地將字串按字典排序,如果填充後的字串內容相同,那麼比較長度,誰比較長誰排前面//上面例子的答案是ca|cc|c|cda,由這答
Time of Update: 2018-12-05
//DFS水題,在樹中找到滿足下條件的點集,若刪除當前點集的點,則將樹劃分成的最大連通塊最小,DFS統計即可//統計方式只需要記錄以當前結點為根的子樹的結點數num,若要求父親那一坨連通塊只需要用N個點減去他所有兒子的num值即可#include<iostream>#include<cstdio>#include<cstring>#include<vector>using namespace std;const int MAX =
Time of Update: 2018-12-05
//二分答案,注意精度只需要滿足1e-5,無需跟sample一樣也可AC//題意是求一個點(x,0)使得其他點到它的最大距離最小#include<iostream>#include<cmath>using namespace std;struct coord{double x,y;}A[50005];double ans,l,r,mid,X;int ansP,n;const double eps = 1e-6;//精度設定void cal(double mid){ans
Time of Update: 2018-12-05
//高精度運算+公式遞推//當m = 1時,ans = 2^d;//當m > 1時,f[1] = 1,f[2] = 2....f[m] = m,f[m+1] = f[m] + f[1]......f[n] = f[n-1] + f[n-m];#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;struct
Time of Update: 2018-12-05
//樹的遍曆//幾個結論//1:前序走訪第一個元素是根,後序遍曆最後一個元素是根//2:前序走訪第二個元素是某子樹的根,但左右不確定//3:在後序遍曆中找到前序走訪的第二個元素,那麼以這個元素為基準,可以劃分新的左右子樹//4:當前序走訪的第二個元素出現在後序遍曆的倒數第二位,以後序遍曆倒數第三位起向左數都是子樹的元素,但是左右不確定,因此有2種情況//遞迴處理 + 乘法原理#include<iostream>#include<cstring>using
Time of Update: 2018-12-05
//動態規劃//這題的關鍵在於先排序,只有先排序,後面動規的思路才能出來,我就是想不到得先排序,卡了好久還得別人提醒//我是NC不解釋//題意是對2個集合尋找N對數對,使得數對的距離之和最小//如果你先排好序,那麼用DP(i,j)表示A集合的前i個點與B集合前j個點的最優值//那麼對於第i+1個A集合的點而言,他的最優解就是前i個點與B集合前j個點的最優值加上第i+1個點與第j+1個點的距離//或許i+1與j+1配對不是最好的,它可能比上一個狀態DP(i+1,j)要差//綜上//動態轉移方程就是
Time of Update: 2018-12-05
//DP,動態規劃求組合數,dp[i][j]表示前i個重鎚獲得重量j有幾種方式//轉移方程dp[i][j+k] += dp[i-1][j];k為新添加第I個重鎚的品質//對重鎚對應鉤子將其分組後來處理#include<iostream>#include<cstdio>#include<cstring>using namespace std;int dp[25][1000];int C[25],G[25];int N,M;const int mid = 500;
Time of Update: 2018-12-05
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int pow[15];int dp[1<<12][10],N;char word[15][25];int W[15][15];void init(){int w;memset(W,0,sizeof(W));for(int i = 0;i < N;++i){for(int j = 0;j < N;
Time of Update: 2018-12-05
//圖的遍曆,DFS,統計森林的寬度和深度,加上對環的判斷//一道這麼簡單的題我一開始用BFS,結果WA到吐血,唉,我這個大水人#include<iostream>#include<vector>#include<cstring>using namespace std;bool vis[105],ok;int width[105];vector<int> E[105];//鄰接表int N,M,W,D,in[105];void dfs(int u,
Time of Update: 2018-12-05
//歐拉函數是少於或等於n的數中與n互質的數的數目//通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1,
Time of Update: 2018-12-05
//類比+遞推,感覺這種題不能稱之為動態規劃,只能叫遞推因為每個點只調用了一次,不存在所謂的轉移//題意是從起點到終點,有多少種不同的走法,圖中有些路有障礙//注意到規模是M*N <=
Time of Update: 2018-12-05
//搜尋,暴力//這題卡了我幾天,檢查到最後,居然是我的minID維護錯誤!我艸!這種錯誤居然卡了我幾天!!!我就是一個超級無敵大水人!//不過卡了這幾天也好,程式也經過不斷最佳化//做法是預先處理出以每個結點為根的子樹有多少個結點cnt,以每個結點為根的子樹最小編號minID//接著枚舉所有邊,暴力找出每個可行方案//在搜尋每一個可行方案,都以編號最小的結點作為根,這一個最佳化方案,可以省去搜尋比較上下兩部分的最小編號值//這題有幾個重要結論是需要證明的//1、在樹中僅存在一條邊能將一棵樹均分