Time of Update: 2018-12-03
/* * 前序+中序->後序 [HDU-1710] * mike-w * 2012-10-22 * ********************************************* * 代碼幾乎是照著被人的寫的,不過我還要點評兩句 * ********************************************* * 首先要理解樹的遍曆本來就有遞迴的想法。樹的前序 * 遍曆就是先訪問根,再分別對左子樹和右子樹進行 * 前序走訪。 *
Time of Update: 2018-12-03
最近看了不少電腦底層的東西,感覺看彙編代碼已經沒有明顯吃力的感覺,於是就想結合最近的閱讀作些小東西,來印認證本上的知識。第一個想到的就是基於棧的緩衝區溢位攻擊。 關於緩衝區溢位攻擊的原理,已經看了很多編了, 並不難理解,但是還是自己做個簡單的實驗來吧,紙上得來終覺淺。實驗環境:Ubuntu 6.10 , Kernel version:2.6.17.10, gcc :4.1.2 gdb:6.4.90 代碼如下:#include <stdio.h>char buf[
Time of Update: 2018-12-03
網上的原題大多是中文的,有些翻譯難免引起誤解,所以看一看USACO原汁原味的英文原題還是有必要的,我之前一直也苦於無處找到,今天偶然發現下面的網站上有USACO月賽原題。http://tjsct.wikidot.com根據月賽的名稱,我們可以寫出資料地址。比如08年一月的月賽即是:http://contest.usaco.org/JAN08 這裡要注意區分大小寫。
Time of Update: 2018-12-03
又理解了一下二分圖的匈牙利演算法。關鍵的一點是執行匈牙利演算法時,圖的頂點應該被分成兩個集合,所有邊都規定為一個方向。/* * poj-1274 * mike-w * 2012-11-04 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 222#define LOL_DEBUGint match[MAXN], tag[MAXN];int f[MAXN][MAXN];int
Time of Update: 2018-12-03
/* * tyvj-1046 * mike-w * 2012-10-30 * ********************************* * 10 days to NOIP2012 * ********************************* * 學習了一種新DP * 問題的關鍵是空格的數目是不確定的 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 222
Time of Update: 2018-12-03
按照MySQL預設的Customer (自訂安裝,可以更改安裝路徑)安裝完成後,其資料庫存放檔案夾路徑是C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data ,在安裝N點之類軟體的時候為了簡化路徑設定,我們需要將這些資料庫存放檔案夾路徑改到C:\mysql\data檔案夾,應該怎麼設定呢?方法如下: 1,更改MySQL設定檔My.ini中的資料庫儲存主路徑
Time of Update: 2018-12-03
C++中類的成員函數預設情況下是non-virtual,即被調用時為靜態繫結。 至少包含一個virtual成員函數的類,都有一個VTABLE——虛函數映射表,表中的每項對應類中一個virtual成員函數的函數體地址。相應的該類的每個對象在為其分配儲存空間時,編譯器會額外的為每個對象附加一個指標VPTR,該指標指向該對象所屬類的VTABLE。 一定要明確概念,VTABLE是在類這個層次上的概念,而VPTR則是在對象這個層次上的概念。
Time of Update: 2018-12-03
/* * tyvj-1057 * mike-w * 2012-10-30 * ******************************** * 又是慘痛的教訓:注意細節&遞推的依賴關係 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 33333#define MAXM 66int opt[MAXM][MAXN];int v[MAXM], im[MAXM], c[
Time of Update: 2018-12-03
在for的迴圈體中定義的non-static對象,其生存期僅限於一次迴圈迭代,即在本次迴圈結束時,對象會被自動銷毀。 實驗代碼如下:#include <iostream>using namespace std;class A...{public: A()...{cout<<"in ctor of A"<<endl;} A(A&)...{cout<<"in copy ctor of A"<<endl;}
Time of Update: 2018-12-03
不知道為什麼這個題被分到了DP分類==|我最近感到SPFA在處理網格最短路之類的問題很方便!對於這道題,我開始想DP,後來想到SPFA,就用SPFA,貌似要比DP簡單。這是個最佳化問題。/* * tyvj-1106 * mike-w * 2012-10-30 * */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 1111#define QSIZE 111111#define
Time of Update: 2018-12-03
拓撲排序的想法十分簡單:找個訪問的且入讀為0的節點訪問,然後標記該節點為訪問,刪除該節點,更新圖中其他節點的入度,接著重複上述過程。思路簡單,程式也很好寫,複雜度O(N^2)/* * 拓撲排序 [HDU-1285] * mike-w * 2012-10-23 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 555int f[MAXN][MAXN];int in[MAXN];
Time of Update: 2018-12-03
類比代碼:#include <iostream>#include <vector>#include <stdexcept>using namespace std;template <typename T>class Stack{private:vector<T> elems;public:void push( T const & element );void pop( );T top() const;bool
Time of Update: 2018-12-03
最開始沒想出怎麼貪心,看了網上的說法,才知道是貪心,但是網上的文章大多又沒有證明……/* * HDU-1051 * mike-w * 2012-10-16 * GREEDY */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 5555#define LOL_DEBUGint w[MAXSIZE][2];int tag[MAXSIZE];int T, N;int comp(
Time of Update: 2018-12-03
剛翻譯完一篇《writing reentrant and thread-safe code》,又通過google和水木搜集了一些資料,故對今天所新學到的只是做個簡要的總結,以防看了就忘。 首先,可重新進入和安全執行緒是兩個並不等同的概念,一個函數可以是可重新進入的,也可以是安全執行緒的,可以兩者均滿足,可以兩者皆不滿組(該描述嚴格的說存在漏洞,參見第二條)。
Time of Update: 2018-12-03
emulator: ERROR: unknown virtual device name: 'my_avd'emulator: could not find virtual device named 'my_avd'原因一:錯誤原因:如果先前安裝ADT時提示Android DDMS或是Android Development Tools “already exist”解決方案:單擊 視窗|喜好設定|Android
Time of Update: 2018-12-03
/* * 0-1背包 [HDU-2602] * mike-w * 2012-10-21 * ************************************* * 一點心得:注意遞推邊界條件 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 1111#define MAXV 1111int T, N, V;int v[MAXN], w[MAXN];int
Time of Update: 2018-12-03
#include <stdio.h>int main(void){ int i = 0xaabbccdd; char *p = (char *)&i; if (p[0] == 0xdd) printf("equal "); else printf("not equal "); return 0;} 程式的本意是當在little-endian的機器(
Time of Update: 2018-12-03
注意數組大小。/* * VIJOS-1040 高精度乘法 * mike-w * 2012-10-21 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXL 10000#define BASE 10000#define WIDTH 4int a[MAXL], b[MAXL], c[MAXL];char buf[MAXL];int read(int *s){scanf("%s",
Time of Update: 2018-12-03
題目在這裡我就不再重複。此題用了貪心演算法,每次都取w[i]+s[i]值最大的放在下面。但是為什麼這樣做可以得到最優解?下面給出證明。設最優排列時牛的編號由上至下為1,2,3,4....x-1,x+1, x. 其中w[1]+w[2]+...+w[x-2]=W,
Time of Update: 2018-12-03
複習了一下二分圖。說一下最後的結果為什麼要除以2。對於一個二分圖,它的頂點被劃分進入兩個集合A[i], B[i]。在執行匈牙利演算法時,若起點start屬於A,那麼hungary()函數使用的match[i]滿足i屬於B,對於i屬於A的match[i]沒有影響。所以如果不劃分集合而在無向圖上執行匈牙利演算法,求得的最大匹配數為實際最大匹配數的二倍,因為每一條增廣路都被計算了兩次!所以執行匈牙利演算法之前將二分圖染色是很有必要的。/* * hdu-2444 * mike-w * 2012-11-0