嗯,把这几周做的都整理一下。
Contest1:
A题:Alphabet Soup
1.预处理出一个next数组(与KMP的预处理做法一致),p-next[p]就是最小的循环节piece。循环节的个数为cnt = p/piece(通过转动这个循环节得到的圆盘与原来的圆盘一致)
2.答案就是 ->> (囧,就写个公式好挫)
ps:黑书上无意间翻到了。这东西叫burnside
B题:Coin Collecting
占个坑,还没搞定。=。=
C题:Cybercrime Donut Investigation
就是个水线段树...不过被这线段树坑了两天了...被这段挫代码坑惨了...RE了50多次....I don't wanna to see this code again...=.=....
bool operator <(const Node &o1)const{
if (x == o1.x) return y >= o1.y;
return x < o1.x;
}
这坨代码一眼看上去是没有问题的...但是在两个点重合的时候,a < b是成立的,b<a也是成立的,然后...然后就没有然后了...
RE出翔...
D题:Distributing Ballot Boxes
不是我过的。。不过应该是个水题。
E题:Game, Set and Match
记忆化搜索乱搞一下就行了...不过比赛的时候被tie-break坑了。
F题:Guess the Numbers
水题。中缀转后缀表达式。
G题: Non-negative Partial Sums
单调队列乱搞水过。
H题: Peer Review
水题。
I,J题不是我做的。。
Contest2:
A题:Binomial coefficients
不是我做的。
B题: Bird tree
读懂题意还是好做的。
C题:Movie collection
树状数组弄下就好。还拿了个FB=。=
D题:Piece it together
每个L-shape都是由一个黑格子和横向白格子,竖向白格子组成。
那么我们可以将黑格拆成两个点,分别用来连横向白格子与竖向白格子,然后就是二分图匹配了。匈牙利~
E题:Please, go first
水题。
F题:Pool construction
建立最小割模型:
1.对于边界的点u,连一条(s,u,INF),如果是hole,再连一条(u,t,f)
2.对于任意一个点,分别与相邻的4个点连一条b的边。对于hole,连一条(u,t,f),对于grass,连一条(s,u,d)
G题:Smoking gun
差分约束。
H题:Tichu
先搜顺子。(只有3种,0个顺子,1个,2个)然后就能直接出答案。
保存最小的即可。
不过要注意这种情况。(3+3+4),对于这种情况,(3+2,3+2)只需要2次!!!
还有就是。。。这题UVAlive上的有问题...hdu上过了,UVAlive死也过不了。。。
ps:应该是spj的问题。另一道需要spj的题UVAlive又死活过不了,后来按他的方式输出过了。
G题:Train delays
把每个点拆成60个点,分别表示从t时刻在u出发的期望。然后做dijkstra。