原创 ZOJ1039

字典樹+搜索時用dfs#include<cstdio> #include<cstring> #include<iostream> #include<

原创 ZOJ3381

DP+線段樹, dp[i]記錄從i開始的最大收益, dp[i]=s[i]+max(dp[x]|i+x[i]<=x<i+y[i]); 利用線段樹維護個最大值就行了 #include<cstdio> #define MAXN 50010 #d

原创 POJ2155 二維線段樹

二維線段樹,不像hdu1823用4分搞定,這題4分會超時,用樹套樹即可#include<cstdio> #include<cstring> bool

原创 poj1734 最小環

這道題目是floyd的經典,floyd的核心思想就是動態規劃從k=0->n來鬆弛i->j的路徑, 這樣我們可以這樣思考這個環,裏面肯定有最大的下標,設爲k,與之相鄰的是i和j,然後i->j的最短路肯定在用k鬆弛前已經更新完,換句話說就是

原创 ZOJ3511

暴力竟然過了、、利用vector記錄每個多邊形頂點,明天看別的解法,mark下(據說線段樹)#include<cstdio> #include<ve

原创 HDU 1823 二維線段樹

第一次寫二維線段樹,參考了別人代碼,主要思路是類似於一維線段樹,只不過線段二分思想變成了矩陣四分。#include<cstdio> #include

原创 POJ1184

荒廢了好久的時間啊,刷了一會博弈後就天天醬油好久了,昨天繼續ACM之旅,刷到POJ1184, 覺得好難啊,看了別人的思路,纔會寫的、、直接上代碼,(無力了).BFS#include<cstdio> #include<cmath> #inc

原创 2.6-精確表達浮點數

看到了自己不會的(ps:可能很水的東西) 對於一個小數,如何把它變爲分數形式呢? 只看無限循環的,有限easy。 首先把這個數分爲整數+0-1的小數, 對於0-1的小數 0.a1a2a3..an(b1b2b3..bn)   b1..bn是

原创 poj 1743及spoj694

最近在看後綴數組,剛開始看完後,自己寫個後綴數組的倍增算法都累死了(ps:lz太菜了),慢慢寫了幾道之後好多了。 poj 1743: 題目求最長不想交子字符串, 方法是二分長度k求上限,然後根據k把height數組分組,每組字符串間的公共

原创 ZOJ1610+線段樹

線段樹成段覆蓋:#include<cstdio> #include<cstring> #define MAXN 10000 int seg[4*MA

原创 小問題

今天發現了一個問題, 比如 vector<int>vt[100]; 對100個容器進行push操作,然後求vt[i].size()的最大值。 開始我是 int maxn=-1; for(int i=0;i<100;i++) if(maxn

原创 poj3264

純RMQ問題#include<cstdio> #include<iostream> using namespace std; #define MAX

原创 後綴數組+RMQpoj3693

大概的思想就是對於一個重複長度爲l的串,對於下表0,l,2*l,3*l。。。存在相鄰兩個數使得r[i]==r[j],這樣對於i,j匹配得到的最長公共前綴得出重複次數z/l+1,但如果不整除的話, i和j要前移l-z%l,原因很明顯,畫個圖

原创 HDU 1430+BFS

這道題一看,暴力bfs去搞,超時,康拓hash下還是超時,結果看大牛博客,才知道。。對於一個狀態到另一個狀態都可以轉化爲12345678到另一個狀態

原创 hdu1251

字典樹入門~#include<cstdio> #include<cstdlib> typedef struct node { int cnt;