原題連結
這道題我一開始以為可以用枚舉和dp去寫,但是複雜度怎麼壓都壓不下來......最後是聽了大神同學的提示才發現我枚舉錯東西了.....枚舉天數去做合併大概是沒救的......
2016年4月15日 星期五
2016年4月12日 星期二
2016年3月15日 星期二
2016年3月14日 星期一
[BZOJ 3295][操作分治] 動態逆序對
2016年3月13日 星期日
[ZJ b417][莫隊] 區間眾數
原題連結
莫隊算法(Mo's algorithm)這幾年非常的紅啊~~
有很多需要複雜資料結構(LCT , 樹鏈剖分 , 持久化資料結構....) 的題目都可以用莫隊搭配樹壓平之類的技巧作到帶根號的複雜度。
莫隊算法(Mo's algorithm)這幾年非常的紅啊~~
有很多需要複雜資料結構(LCT , 樹鏈剖分 , 持久化資料結構....) 的題目都可以用莫隊搭配樹壓平之類的技巧作到帶根號的複雜度。
2016年3月12日 星期六
[2013-2014 Samara SAU ACM ICPC Quarterfinal Qualification Contest pK][BIT][sqrt method] Three Contests
2016年3月11日 星期五
[Wunder Fund Round 2016 pD][DP] Hamiltonian Spanning Tree
link
You can view official tutorial here.
Here I will explain some points I consider important when trying to solve the problem.
There may be some mistakes in grammar due to my poor English QAQ.
Any correction of algorithm or grammar is welcomed.
It's not hard to find that x>y and x<y are two different problem: One is to use more tree edges as possible while the other is to use less tree edges.
You can view official tutorial here.
Here I will explain some points I consider important when trying to solve the problem.
There may be some mistakes in grammar due to my poor English QAQ.
Any correction of algorithm or grammar is welcomed.
It's not hard to find that x>y and x<y are two different problem: One is to use more tree edges as possible while the other is to use less tree edges.
2016年3月10日 星期四
2016年3月9日 星期三
2016年3月8日 星期二
2016年3月7日 星期一
2016年3月6日 星期日
2016年3月5日 星期六
2016年3月4日 星期五
2016年3月3日 星期四
[Codeforces Round #218 (Div. 2) pD][Disjoint Set] Vessels
原題連結
一道並查集的頗直覺的題目
難點大概就只有在有沒有想到要用Disjoint Set去做吧......
對於已經滿的vessel i ,執行 fa[i] <- findset(i+1) ,直觀上就是將每個相鄰的滿vessel連接起來,已達到快速查詢可用vessel的效果。
細節上要注意水流到地上的case要做好,不然很容易WA或是TLE。
一道並查集的頗直覺的題目
難點大概就只有在有沒有想到要用Disjoint Set去做吧......
對於已經滿的vessel i ,執行 fa[i] <- findset(i+1) ,直觀上就是將每個相鄰的滿vessel連接起來,已達到快速查詢可用vessel的效果。
細節上要注意水流到地上的case要做好,不然很容易WA或是TLE。
#include<cstdio> #define LL long long using namespace std; const int maxn=200000+5; int fa[maxn],cap[maxn],cur[maxn]; int findset(int x) {return x==fa[x]?x:fa[x]=findset(fa[x]);} int main() { int n,m; scanf("%d",&n); for(int i=0;i<n;i++) {fa[i]=i;scanf("%d",cap+i);} fa[n]=n; scanf("%d",&m); for(int i=0,type,a,b;i<m;i++) { scanf("%d",&type); if(type==1) { scanf("%d%d",&a,&b);a--; a=findset(a); for(;b && a!=n;) { if(cap[a]-cur[a]>b) cur[a]+=b,b=0; else // cap[a]-cur[a]<=b { b-=cap[a]-cur[a]; cur[a]=cap[a]; fa[a]=findset(a+1); a=findset(a); } } } else { scanf("%d",&a);a--; printf("%d\n",cur[a]); } } }
2016年3月2日 星期三
2016年2月29日 星期一
2016年2月28日 星期日
2016年2月24日 星期三
[POI XI Stage II][SCC] The Tournament
原題連結
我個人非常喜歡這道題,主要是因為直到我AC前的2個小時,我都完全沒想到這題是SCC的一道題XD。
最後雖然發現了和SCC的強大關聯性,還是借用了同學的code,而且想了非常久才弄出來的......
我個人非常喜歡這道題,主要是因為直到我AC前的2個小時,我都完全沒想到這題是SCC的一道題XD。
最後雖然發現了和SCC的強大關聯性,還是借用了同學的code,而且想了非常久才弄出來的......
2016年2月23日 星期二
2016年2月22日 星期一
2016年2月21日 星期日
[Codeforces Round #313 (Div. 1) pC][DP] Gerald and Giant Chess
原題連結
本來一直往dp[i][j]=dp[i-1][j]+dp[i][j-1]去想......結果不管怎麼弄都逃離不了O(n^2)XD
最後看了codeforces上的tag寫著combinatorics!
才突然想起高中數學也有教,從(0,0)走到(n,m)的捷徑方法數是C(n+m,m),這是解這題的其中一個關鍵
本來一直往dp[i][j]=dp[i-1][j]+dp[i][j-1]去想......結果不管怎麼弄都逃離不了O(n^2)XD
最後看了codeforces上的tag寫著combinatorics!
才突然想起高中數學也有教,從(0,0)走到(n,m)的捷徑方法數是C(n+m,m),這是解這題的其中一個關鍵
2016年2月20日 星期六
2016年2月13日 星期六
2016年2月12日 星期五
2016年2月5日 星期五
2016年2月4日 星期四
2016年1月31日 星期日
[POJ 1741][男人八題][樹分治] Tree
題目連結
不多說......就是樹分治的經典問題......在那個科技還不發達的年代還是挺難做的......
找重心,分治計算答案。最難的地方大概是答案的加減要想清楚,不然很容易完全寫錯。
啟發式合併貌似也挺快的,晚點補上code。
不多說......就是樹分治的經典問題......在那個科技還不發達的年代還是挺難做的......
找重心,分治計算答案。最難的地方大概是答案的加減要想清楚,不然很容易完全寫錯。
啟發式合併貌似也挺快的,晚點補上code。
2016年1月29日 星期五
[教學][String][Data Structure] 後綴自動機(Suffix Automaton)
==========!! Warning !!==========
此文內容皆是出自自己的理解,若有與實際情況不符之處,請以論文或是大神文章為主
==========!! Warning !!==========
後綴自動機(Suffix Automaton)大概是我見過網路上最多教學資源的資料結構了,許多大陸和外國的神人都有寫教學文,包括寫過持久化資料結構介紹的clj大神。
不過有鑒於許多教學不是為了力求邏輯通順,定義複雜繁瑣,就是講解過程中,省略許多思考步驟,導致讀起來不甚順暢。
最後我還是決定自己完整的給出一篇教學文,使用最少的定義(3個),盡量簡化構造它和使用它的思考流程,對於重要的性質除非必須,否則說明點到即止,不加以證明。
此文內容皆是出自自己的理解,若有與實際情況不符之處,請以論文或是大神文章為主
==========!! Warning !!==========
後綴自動機(Suffix Automaton)大概是我見過網路上最多教學資源的資料結構了,許多大陸和外國的神人都有寫教學文,包括寫過持久化資料結構介紹的clj大神。
不過有鑒於許多教學不是為了力求邏輯通順,定義複雜繁瑣,就是講解過程中,省略許多思考步驟,導致讀起來不甚順暢。
最後我還是決定自己完整的給出一篇教學文,使用最少的定義(3個),盡量簡化構造它和使用它的思考流程,對於重要的性質除非必須,否則說明點到即止,不加以證明。
2016年1月28日 星期四
2016年1月27日 星期三
[SPOJ LCS2][Suffix Automaton] LCS2 - Longest Common Substring II
[SPOJ LCS][Suffix Automaton] LCS - Longest Common Substring
原題連結
Suffix Automaton(後綴自動機)的初級練習題,關於Suffix Automaton的教學和介紹網路上有很多資源,我之後也會自己補上一篇的
這題會用SAM的主要原因是SPOJ會莫名的把O(nlogn)的Suffix Array解卡掉,所以能過的大概只有後綴自動機或是O(n)後綴樹、後綴陣列的構造法吧
Suffix Automaton(後綴自動機)的初級練習題,關於Suffix Automaton的教學和介紹網路上有很多資源,我之後也會自己補上一篇的
這題會用SAM的主要原因是SPOJ會莫名的把O(nlogn)的Suffix Array解卡掉,所以能過的大概只有後綴自動機或是O(n)後綴樹、後綴陣列的構造法吧
2016年1月26日 星期二
[Codeforces 100495A][2014 KTU ACM ICPC Qualification Round][Dijkstra] Crystals
原題連結
注意到因為n很小...所以對於任何一個水晶集合都可以將狀態用一個int表示出來(點),然後將集合的變換看成狀態的轉移(邊)
那麼本題就可以套用經典的最短路算法解決O(NlogN),此時N=(2^n)
注意到因為n很小...所以對於任何一個水晶集合都可以將狀態用一個int表示出來(點),然後將集合的變換看成狀態的轉移(邊)
那麼本題就可以套用經典的最短路算法解決O(NlogN),此時N=(2^n)
2016年1月25日 星期一
[Codeforces 452E][MemSQL Start[c]UP 2.0 - Round 1][Suffix Array] Three strings
原題連結
首先老規矩,把三個字串用神秘的符號分隔後拼接起來,構造SuffixArray和Height陣列
相似的後綴會被排在一起,而且我們可以很快知道在SuffixArray的一群連續後綴的LCP(by H陣列)
首先老規矩,把三個字串用神秘的符號分隔後拼接起來,構造SuffixArray和Height陣列
相似的後綴會被排在一起,而且我們可以很快知道在SuffixArray的一群連續後綴的LCP(by H陣列)
訂閱:
文章 (Atom)