Time of Update: 2018-12-05
雖說是水題,但是也太坑爹了吧~~~ 以前的floyd都是用的k作為內重迴圈,在這個題就是錯了,不知道為啥,總之就是錯了。調試了n久啊~ 有木有~~#include<iostream>#define MAXN 111#define INF 1<<30-1using namespace std;int map[MAXN][MAXN];int n,m;int main(){ while( scanf( "%d",&n )!=EOF ) {
Time of Update: 2018-12-05
這題的難度和前一篇的裸模版差不多。題目大意就是看字串是否是其他字串的首碼,其實就是在字典樹中查看最後一個節點的count數是否為1.若為1,則代表該字串唯一。若不唯一,則代表該字串被其他字串完全包含,不就是首碼麼!水過。。。#include<iostream>#include<string>#include<cstdio>#define MAX 10using namespace std;char s[11111][11];int allocp;struct
Time of Update: 2018-12-05
整整一天半都在弄AC自動機,我的第一道AC自動機。DEBUG N久竟然是題目意思讀錯了!題目大意:給定N個單詞,和一個模式串,求在單詞模式串中出現的次數。解題思路,先構造字典樹,再對字典樹進行AC自動機。我DEBUG N久....
Time of Update: 2018-12-05
第二道AC自動機。和前面那道沒有什麼不同,都是基礎的AC自動機模板。題目大意:有一些病毒序列,在主串中找到所有的病毒種類即可。求出每個網站攜帶的病毒種類。最後輸出有多少個病毒網站。還好輸出不坑爹!#include<iostream>#include<cstdio>#include<string.h>#define MAX 128using namespace std;struct node{ int id,fail,next[MAX]; void
Time of Update: 2018-12-05
【題目大意】判斷兩條環形字串是否相同。【思路】將待匹配串複製一份接在後面,再用模式串做KMP,若能找到說明為同一個串。蠻久沒寫KMP了,演算法忘得差不多了..小悲劇啊~【CODE】#include<iostream>#include<cstdio>using namespace std;char t[222],s[444];int next[222];void setNext(){ next[0]=-1; int j=0,k=-1; while(
Time of Update: 2018-12-05
最後一道模板題。下面把AC自動機小結一下。請看新文章.....這題如果只開26的next的數組的話。在查詢大串時,要注意的if( s[i] )當不符合條件時,不能淺顯的continue,而要把p=root;不然..... 那些在A-Z之外的字元會直接略去,相當於大串中沒有A-Z之外的字元,結果可想而知!!#include<iostream>#include<string>#include<cstdio>#define MAX 26using
Time of Update: 2018-12-05
E- Seven tombsTime Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 31 Accepted Submission(s) : 9Font: Times New Roman | Verdana | GeorgiaFont Size: ← →Problem
Time of Update: 2018-12-05
刷了3天的字串匹配題。為了下面繼續切題,小的先小結一些。字串匹配的最基礎演算法是枚舉(n^2)。高深一點的是KMP。KMP在資料結構課上學過,由於老師只是負責教學,不負責解答他不懂的問題,於是KMP就這麼被我擱置一邊了。ACM這麼多年了,一直不懂這些基礎的演算法,實在有愧與心。於是乎專程學習了一下KMP。先說說KMP的主要思想。KMP用於模式串的匹配。下面看看一個字串:(1)AACAACAAB;我們需要尋找的串為:(2)AACAAB;首先順序匹配:(1)AACAACAAB(2)AACAA到這裡都
Time of Update: 2018-12-05
一道很水的二維DP,但是對於DP沒有什麼感覺的我來說,真是辛苦了。這麼來。[疲勞值][怪物數量]=經驗值。這樣儲存的當前疲勞值擷取的最大經驗者。dp[i][j]=max( dp[i][j],dp[i-m_pl[k]][j-1]+m_exp[k] );當經驗值滿足升級的條件就可以了。#include<iostream>#include<stdio.h>#include<string>using namespace std;int max( int a,int
Time of Update: 2018-12-05
這道題還比較正常~話說~還是那個道理,最短路徑求最大值....這題比較新的一點就是出現了三種情況1.負環無解2.距離太遠不可達 N點未更新3.最大值#include<iostream>#include<queue>#define MAXN 2005#define MAXM 20010#define INF 0x7F7F7F7Fusing namespace std;struct Node{ int v,price; Node
Time of Update: 2018-12-05
看來還是要吧這個矩陣乘法理解透啊!我的題解大體和網上的一樣吧。沒有什麼可取性。對於矩陣,我們熟悉的操作有兩種,交換與置零。我們有初始的矩陣T[ A,B,C,D ];交換矩陣為 | 1 0 0 0 | [ A,B,C,D ] X | 0 0 1 0 | =>[ A C B D ] | 0 1 0 0 | | 0 0 0 1
Time of Update: 2018-12-05
[題目大意]給定一個無向圖,求出這些邊(至少出現在一棵產生樹中的邊)的數目。[解題思路]理解MST的思想,將貪心思想運用。由小到大遍曆這些邊,權值相同的為一組。先判斷這些邊是否能夠成為樹邊,再對這些邊進行合并。[注意事項]不知道為何,以前一直寫的模板不頂用了...一定要改成比較醜的樣子...[Code]#include<iostream>#include<cstdio>#include<algorithm>#define FF(i,N) for( int i=
Time of Update: 2018-12-05
以前也寫過字典樹,覺得自己寫得很不好,很水很弱,雖然也ac了。網上看了下別人的模板,果斷學習之.......#include<iostream>#include<string.h>#include<cstdio>#define MAX 26 using namespace std;struct TrieNode{ int nCount; TrieNode *next[MAX];};TrieNode
Time of Update: 2018-12-05
這題要寫的東西很多,以至於我不知道從哪裡開始寫了= =。總之要正確理解AC自動機中的狀態轉移。時間比較晚了,早點回去... 我要注意的地方就是正確理解fail指標的作用。在失配時,fail指標如果走向的是一個病毒節點那麼改節點的轉移也是病毒節點。不能轉移!另外要注意的就是mod十分的耗時間啊!兩次TLE都是出於此....總之是一道好題#include<iostream>#include<cstdio>#include<string.h>#define
Time of Update: 2018-12-05
簡單DP/*ID:sevenst4;LANG:C++PROG:maze1*/#include<stdio.h>using namespace std;char m[222][88];int hi[101][40];int fx( int x ){ return (x<<1)-1; }int fy( int y ){ return (y<<1)-1; }int min( int a,int b ){ return a<b?a:b; } int main()
Time of Update: 2018-12-05
弱爆了..... 我真水... 只會水。好久沒來POJ刷水了。#include<iostream>#include<stdio.h>using namespace std;int max( int a,int b ){ return a>b?a:b; }int main(){ int date[10000]; int DP[10000]; int testcase=1; while(1) { if( testcase!=1 ) printf( "\n" );
Time of Update: 2018-12-05
第一次做這種少人做的題目,感覺好爽啊~~~ 這個題目的解法借鑒了Matrix67大神的好文章:10種經典的矩陣解法 這裡講得很好,我用的是矩陣的經典7,專門用來借線性遞推的。再結合矩陣的快速冪,這題無疑是小細節要注意注意了!#include<iostream>#define MAXN 101#define mod 10000#define ull unsigned long longusing namespace std;struct Matrix{ ull
Time of Update: 2018-12-05
幾天沒有做題了。想好好的整合一下知識。不然的話真的採用題海戰術這樣絕對是不明智的!鄙人目前對圖論,組合數學,計算幾何感興趣。DP還好~做題做了一道次短路徑的題。以前也想過這樣的解法並且也還碼過代碼,很明顯的WA了。這次借鑒了網上的做法,並個人做了認真的思考。看來我對Dij的演算法理解還是不是很深啊!雖然通過YY,想出了最短路徑條數的計算方法,次短路徑卻怎麼也解決不了。研究過大神的演算法後,好不容易總算是理解了。這樣對於圖,開兩個維度cnt,vis,dis分別計算路徑的條數,是否訪問,單源點距離。
Time of Update: 2018-12-05
沒做過多重背包,這題從嚴格意義上來講也不算是多重背包。算是很水的遞推方程了。關鍵是看能不能找不出使得價格為sum/2的,通過遞推串連就好了。關鍵是怎樣可達...#include<iostream>#include<stdio.h>#include<string>int DP[120001];using namespace std;int main(){ int line[7]; int testcase=0; while( true ) {
Time of Update: 2018-12-05
第一次遇到這樣的題,平分= =,還要回去好好想一下...這麼水的... 不懂啊= =#include<iostream>#include<stdio.h>#include<string>using namespace std;int main(){ int n,m; int a[101],c[101]; int DP[100001]; while( scanf( "%d %d",&n,&m )!=EOF ) { if( n==0