跳到主要內容

發表文章

//伪代码,�...

//伪代码,要用自己去改 //storm.dll //////////////////////////////////////////////////////////////////////////////////////////////////// //1503AE83    E8 58FDABED     call    GameStat.02AFABE0 // hook Storm #501号函数,Storm.dll库的详细函数列表请看 //  code.google.com/p/vgce/wiki/stormDLL //GameStatDota.dll( modulebase:0x2af0000,  size:0x1a000) void GameStatDota_02afabe0(str) //比较游戏中的一些字符串,获得游戏结果等等 {   if(!IsBadReadPtr(str))     Func_2af9980(str); //跟据字符串内容做出动作 } char * mystrstr(char * str1, char * str2, int len) {   int i = strlen(str1);   for( int j=0; j< i - len; j++)   {     if(memcmp(str1+j, str2, len) == 0)       return str1+j;   }   return NULL; } Func_2af9980(str) //判断内容,做出动作   //只要在游戏中显示出来的字符串,都可以在这里面弄到,然后做一些分析   //比如统计杀人次数,死亡次数,金钱,等级。。。等等 {   install_seh(); //?   if(mystrstr(str, utf-8(":|r"), 4) != 0) //  0x3A, 0x20, 0x7C, 0x72     //不知道做啥的,=我再研究下   if(mystrstr(str, utf-8("等待其他玩家中"), 0x15) != 0)      GetTickCount();   if(mystrstr(str, asc(...

Stacking Boxes

#include #include #define SWAP(x,y) {int t; t = x; x = y; y = t;} #define BOX_SWAP(x,y) {box_t t; t = x; x = y; y = t;} typedef struct{ int no; int edge[12]; }box_t; using namespace std; int Greater(box_t b1,box_t b2,int dim){ int i; for(i=0;i<dim;i++){ /*cout<<b1.edge[i]<<" and "<<b2.edge[i]<<endl;*/ if(b1.edge[i]<=b2.edge[i])return 0; } return 1; } void sort_box(box_t box[],int box_num,int dim){ int i,j; for(i=0;i<box_num;i++){ for(j=i+1;j<box_num;j++){ if(Greater(box[i],box[j],dim))BOX_SWAP(box[i],box[j]); } } } void sort_edge(box_t box[],int box_num,int dim){ int i,j,k; for(i=0;i<box_num;i++){ for(j=0;j<dim-1;j++){ for(k=j+1;kbox[i].edge[k])SWAP(box[i].edge[j],box[i].edge[k]); } } } } void print_LIS(int x,int prev[],box_t box[],int choose){ if(prev[x]!=-1)print_LIS(prev[x],prev,box,1); if(choose==0){ cout<<box[x].no<<endl; } else{ cout<<box[x].no<<" "; } } int LIS(box_t box[],int prev[],int box_nu...

DP

動態規劃經典教程 引言:本人在做過一些題目後對DP有些感想,就寫了這個總結: 第一節 動態規劃基本概念 一,動態規劃三要素:階段,狀態,決策。 他們的概唸到處都是,我就不多說了,我只說說我對他們的理解: 如果把動態規劃的求解過程看成一個工廠的生產線,階段就是生產某個商品的不同的環節,狀態就是工件當前的形態,決策就是對工件的操作。顯然不同階段是對產品的一個前面各個狀態的小結,有一個個的小結構成了最終的整個生產線。每個狀態間又有關聯(下一個狀態是由上一個狀態做了某個決策後產生的)。 下面舉個例子: 要生產一批雪糕,在這個過程中要分好多環節:購買牛奶,對牛奶提純處理,放入工廠加工,加工後的商品要包裝,包裝後就去銷售……,這樣沒個環節就可以看做是一個階段;產品在不同的時候有不同的狀態,剛開始時只是白白的牛奶,進入生產後做成了各種造型,從冷凍庫拿出來後就變成雪糕(由液態變成固態=_=||)。每個形態就是一個狀態,那從液態變成固態經過了冰凍這一操作,這個操作就是一個決策。 一個狀態經過一個決策變成了另外一個狀態,這個過程就是狀態轉移,用來描述狀態轉移的方程就是狀態轉移方程。 經過這個例子相信大家對動態規劃有所瞭解了吧。 下面在說說我對動態規劃的另外一個理解: 用圖論知識理解動態規劃:把動態規劃中的狀態抽象成一個點,在有直接關聯的狀態間連一條有向邊,狀態轉移的代價就是邊上的權。這樣就形成了一個有向無環圖AOE網(為什麼無環呢?往下看)。對這個圖進行拓撲排序,刪除一個邊後同時出現入度為0的狀態在同一階段。這樣對圖求最優路徑就是動態規劃問題的求解。 二,動態規劃的適用範圍 動態規劃用於解決多階段決策最優化問題,但是不是所有的最優化問題都可以用動態規劃解答呢? 一般在題目中出現求最優解的問題就要考慮動態規劃了,但是否可以用還要滿足兩個條件: 最優子結構(最優化原理) 無後效性 最優化原理在下面的最短路徑問題中有詳細的解答; 什麼是無後效性呢? 就是說在狀態i求解時用到狀態j而狀態j就解有用到狀態k…..狀態N。 而求狀態N時有用到了狀態i這樣求解狀態的過程形成了環就沒法用動態規劃解答了,這也是上面用圖論理解動態規劃中形成的圖無環的原因。 也就是說當前狀態是前面狀態的完美總結,現在與過去無關。。。 當然,有是換一個劃分狀態或階段的方法就滿足無後效性了,這樣的問題仍然可以用動態規劃解。 三...

Problem 10608 Friends,最大朋友群

鎮上有 N 個人,照一句諺語說:「我朋友們的朋友也是我的朋友」。A 和 B 為朋友,B 和 C 為朋友,所以 C 和 A 也為朋友。 讀入 N 和 M 兩整數,N 為鎮上有公民 1 - N,而接下來會有 M 列資料,M 列資料都有兩整數 a, b,代表公民 a 和公民 b 為朋友。最後請你算出這鎮上最大朋友群的數量為多少。 其實只要給朋友群定義一個朋友群編號,如果雙方都沒有朋友群編號,就將兩人都定義一個新的朋友群編號,並將此朋友編號數量變成 2;若兩人其中一人沒有朋友群編號,則將他加入有編號的朋友群之中;如果兩人都有朋友群編號,就將其中一方的所有朋友的編號改為另一方的編號,順便將另一方朋友編號數量累加對方的數量。 一開始宣告陣列以及初始化朋友群編號以及朋友群數量:

Is A Tree?

解法 若一圖形為tree的結構,表示此圖形中所有的點都互相連通且必無cycle存在,因此判斷cycle的存在是本題最重要的關鍵。一個判斷有無cycle存在的簡單方法是利用集合的概念,把目前已知的連線關係歸類到同一個集合中,我們設計一個範例來逐步解釋這個過程: Input 1 2 2 3 4 6 2 5 2 4 5 6 0 0 首先我們假設所有的點都不在任何一個集合中。 第一個輸入:1 2,代表1指向2,所以我們把1與2歸類成集合I。 第二個輸入:2 3,表示2指向3,所以3也屬於集合I。 第三個輸入:4 6,表示4指向6,所以4與6屬於另一個集合II 下一個輸入:2 5,所以5也屬於集合I。 下一個輸入:2 4,所以包含4的這個集合內的全部元素都應該歸類到集合I。 最後一個輸入:5 6,表示5指向6,但是5與6已經屬於同一個集合,將同一個集合內的兩個點連起來必然會形成cycle,因此這個圖形不是tree。 若所有的輸入處理完後,所有的點都屬於同一個集合,則這個圖形就是一個tree。

約瑟夫環

題目大意: 有k個好人跟k個壞人按順序坐著,然後按第m個殺人,求出把壞人全部先殺光的m的最小值。 0<k<14。典型的約瑟環問題。 解題思路: 一開始看見數據量那麼小,還以為暴力一定可以出來,結果,好吧,當k為0以上時,時間大得驚人,自己暴力的方法還是有很大問題啊。 比較標準的做法是:在這麼多個人中,始終用start跟end來確定好人那個序列的位置。 比如一開始是1 2 3 4 5 6,那麼start = 0,end = 3(從0開始計數)當m等於5的時候,kill後就剩下1 2 3 4 6 ,重新拍下序列變成 6 1 2 3 4 ,這時候 start = ((start-m)%n+n)%n; end = ((end-m)%n+n)%n; n是當前剩下的人數。定完位置之後,kill的位置為kill = (m-1)%n; 這樣就可以做了。 代碼: #include using namespace std; bool joseph(int k, int m) { int start = 0, end = k - 1; //定位,定好人的位置 int kill;//殺人的序號 for(int n = 2 * k; n > k; n--) //n代表人數 { kill = (m - 1) % n; if(kill >= start && kill <= end) { return false; } start = ((start - m) % n + n) % n;//定位,加n模n是為了防止負數 end = ((end - m) % n + n) % n; } return true; } int main(void) { int f[14]; for(int i = 1; i < 14; i++) for(int j =...

10102 - The path in the colored field

The Problem The square field consists of M×M cells. Each cell is colored in one of three colors (1,2,3). The initial state is chosen in one of the cells of color 1. In each step one allowed to move one cell up, down, left or right remaining inside the field. You are to define the minimal amount of steps one should make to get a cell of color 3 independent on the initial state. Note that the field contains at least one cell of color 1 and at least one cell of color 3. The Input The input consists of several input blocks. The first line of each block contains integer M, the size of the field. Then there are M lines with colors of the cells. The Output For each input block the output should consist of one line with the integer, the minimal amount of steps one should make to get a cell of color 3 independent on the initial state. Sample Input 4 1223 2123 2213 3212 2 12 33 Sample Output 3 1