原文鏈接 https://www.cnblogs.com/zhouzhendong/p/CF1071.html
賽前:
呀,這個 Round #517 必須打啊。
於是臨時改變注意決定打這一場。用小號打。
比賽快要開始了:
F5 一下。woc 怎么咕了 5分鍾。
比賽開始了:
呀,這個 A 我怎么覺得比之前的幾個 A 難啊。
想必是有簡單做法的。
好吧原來是sb題。
呼呼呼呼敲完代碼過了樣例,測了一下1e9 的大數據發現掛了。
連忙改對,心想這總不會fst了吧。
交一發pp哈哈。
連忙開 B 。
發現是水題。
急忙開寫。
呼呼呼呼寫完了,交一發 wa4 。
瞪着屏幕 10 分鍾發現有細節掛了。
改完一交 pp 了,心想這總不會 fst 了吧。
急忙開 C 。
20 分鍾過去了,我發現題目看錯了……
然后很快就找到了消除單個1 的方法:
1000000
0001001
0001110
0000000
然后想着什么按照 1 的個數大於和小於 n*2/3 來分討,
然后算了一下不存在同時消除 3 個 1 的方案時,最多有 n*2/3 個 1 (就是 1-1/2+1/4-1/8+...)
很開心,覺得快想到正解了。
於是20分鍾過去了,毫無進展。
然后突然發現只要讓邊界收縮的速率 >=3 就好了。
假設區間 [L,R] 是有 1 的,
如果 a[L]=0 ,那么顯然可以 L++
如果 a[R]=0 ,那么同理 R--
如果 a[L]=1,a[L+1]=0 ,那么直接取最左邊的那一個和第二靠左的那一個以及對應的右邊一個就好了。
如果 a[R]=1,a[R-1]=0 ,那么類似。
如果 a[L]=a[L+1]=a[L+2]=1 或者 a[R-2]=a[R-1]=a[R]=1 ,那么直接消除連續三個就好了。
那么剩下一種棘手的情況:
a[L]=a[L+1]=1,a[L+2]=0,a[R]=a[R-1]=1,a[R-2]=0。
由於我太菜了,想了10多分鍾,才發現可以直接把左右兩對用兩次消除,這樣再加上a[L+2]和a[R-2] 是 0 ,效率剛好是 3 。
然后發現要來不及了。
這個真是毒瘤大分討啊。細節怎么這么多。
趕緊寫啊寫。
100多行寫完剛過編譯,cf就顯示比賽結束了……
賽后:
然后又花了幾分鍾過了樣例……
剛要吐槽一波,又手造了一組數據萎掉了。
想必是哪里寫萎了。
嗯不管了。
去水一水qq
水完回來看看榜
這 A 怎么這么多人 fst 了
正在為他們默哀之時,等等,我去哪了?
……
唉
還好,黃名還保的住。
然后我突然看到了這個:
不禁倒吸一口涼氣。
后來——
我看到了它——
成功達成成就:
在一場codeforces contest 里面全部題目fst
呵呵
呵呵
呵呵
呵呵
呵呵
呵呵
呵呵
可怕,我是不是該退游一些日子了。
還好是小號。