原创 非遞歸的二叉搜索樹的中序遍歷

 本來就是想實現一下二叉樹的中序遍歷,就用了二叉搜索樹來搞,結果發現了一個非常淺顯但我之前不知道的現象,就是中序遍歷二叉搜索樹得到的序列是有序序列。算是漲姿勢了…… #include <iostream> #include<stack

原创 HDU 5014(Number Squence)

 這道題一開始沒有什麼想法。後來隊友找到了一些規律,試驗了一下,發現規律成立,然後就AC了。 我們的做法是由n開始從大到小遍歷,每到一個數w,就找出比它小的二次方數h(就是h=2^k),然後找到w關於h對稱的數,進行組合,並且將組合過

原创 LeetCode #188

LeetCode OJ是一個有一些面試算法題的OJ,這次碰到一道令我頗爲頭疼的題。 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ 題意:給定一隻股票N天

原创 hdu 5188 (zhx and contest)

題意:zhx在比賽的時候有n道題目,第i道題目有一個分值vi,需要ti時間做完,而且必須在li或li之後完成。問zhx在獲得至少w分數的情況下需要的最少時間。 做法:類似於01揹包的做法,第i題可以選擇做或者不做。先對題目按照li-ti(

原创 URAL 1471(lca tarjan算法)

題意:給定一棵樹,查詢時給定兩個點,求出兩個點的距離。 暴力做肯定超時的。我的做法是採用lca(最近公共祖先)的離線算法,即tarjan算法(據說Tarjan提出了很多算法,可能還有很多tarjan算法),算法裏用到了並查集。在輸入完所

原创 POJ 2570

我在Codeforces上做過一道類似的題目,當時是純DFS暴力解決的。做這題時以爲還是一樣,結果TLE了。然後用floyd來做,但是我是用三維數組的方式的conj[i][j][k]代表i和j直接邊都是k是否爲一條通路。結果還是TLE,看

原创 ZOJ 3862 Intersection (dijkstra)

題意:有一個機器人和n個點,機器人從一個點只能走到與那個點距離小於等於r的另外一個點,而且機器人從一個角度轉到另外一個角度的用時等於角度之差。求從第一個點走到第n個點的最短用時。 比較容易想到用dijkstra算法。需要用到一個二維的vi

原创 從一個序列中獲取前K大的數的一種方法

    這個方法是利用快速排序的。在快速排序中,得到中間元素(pivot)之後,比較中間元素之前的元素個數和K的大小關係,從而確定後面該往哪個方向繼續遞歸。如果中間元素前面的元素個數等於K,那就停止遞歸過程;如果中間元素前面元素個數小於K

原创 二叉搜索樹(BST)模板

#include<iostream> #include<cstdio> #include<stack> #include<vector> #include<cstdlib> #include<cstdio> #include<strin

原创 hdu 5090

/*題意:給出n個數和一個整數K,那n個數每個只能加上k的正倍數或者不加,問能否使序列變成1~n的序列。 由於數據量較小,所以可以直接暴力了。具體過程直接看代碼吧,較容易看懂意思的。*/ #include <cstdio> #inclu

原创 hdu 5305 (搜索+剪枝)

題意:有n個人(n<=8),每個人有一定數量的朋友,而和朋友的關係是線上朋友或者線下朋友(只能是其中一種)。問每個人的線上朋友數量都等於線下朋友數量的方法數有多少。 做法:建成一個圖,如果邊的數目是奇數或者有人的度數是奇數,那個方法數肯定

原创 HDU 5335 walk out(特殊bfs)

題意:在一個只有‘0’和‘1’的矩陣中,找一條從(0,0)到(n,m)的字典序最小的一個路徑。 做法:bfs。但是不能每條路徑都搜,要按照一定層次的搜。如果(0,0)是‘0’,就從(0,0)開始找一個離終點最近的且值爲‘0’的點。然後,從

原创 HDU 3394 Railway(點雙連通分量的應用)

題意:給定一個無向圖,分別求出不在任何環中的邊的數量和同時在兩個或以上的環中的邊的數量。 解法:橋上的邊就是不在任何環中的。而如果一個點雙連通分量中邊的數量比點的數量要多,那麼該雙連通分量的所有邊都同時在兩個或以上的環中(這個可以想象一下

原创 POJ 1523 SPF (割頂 點雙連通分量)

題意就是求出在一個圖上去除一個點之後,那個圖會變成多少個子連通圖。 顯然我們要求出割頂。我的代碼套用了劉汝佳的大白書的tarjan算法,用一個數組cnt[]記錄一個點是多少個點雙連通分量的割頂。當發現一個點是割頂的時候,就cnt[i]++

原创 HDU 3714

在一場悲劇的隊內訓練中習得了新技能——三分法。三分法可以應用於凸函數或者凹函數的求極值。將一個區間分成三段並通過函數值的比較來縮小區間範圍,最終就可以求得極值。 #include <cstdio> #include <cstring>