(首先聲明一下,今年AHOI R1的題==JSOI R3 Day1的題)
【題解】
sport:
首先很容易證明,最優方案必然是左邊都是-,右邊都是+(從樣例也可以看出來囧)……
因此問題轉化為了第幾次開始+,可以使得開始+的時候,目標元素的位置最左……
注意到排隊的過程實際上是個冒泡……因此本題的關鍵在于發掘出冒泡的性質囧……
設最初的序列為A[0..N-1],目標元素為A[pos]。設S[0]為排在A[pos]之左的比A[pos]大的元素的個數(因為一開始排在A[pos]之左的且<=A[pos]的元素,不管腫么搞都一直在目標元素之左,不管它們了囧……),然后,考察所有一開始排在A[pos]之右的,比A[pos]小(注意是<A[pos],不是<=)的所有元素,設它們之間的間隔分別為S[1]、S[2]、S[3]……(具體見圖,其中S[1]為A[pos]和第一個比A[pos]小的元素之間的間隔)

然后來審視一下整個冒泡的過程。一開始,必然是將目標元素左邊的一個比目標元素大的元素移到右邊去,在目標元素右邊它可能會停下來,但緊接著必然是一個值更大的元素繼續往右移,最終的效果等價于將目標元素左邊的一個比目標元素大的元素“移出去”了(即移到了最右邊的比目標元素小的元素的右邊),也就是S[0]減了1,而S[1]、S[2]……都沒變,這個過程顯然只能持續S[0]次,目標元素左邊比它大的元素就全部移出去,此時目標元素到達了它“可能到達”的最左位置。
接著,目標元素和右邊第一個比它小的元素(即圖中的A[i1])之間的,比目標元素大的那些元素將被依次的移出去,也就是S[1]不斷減1,而S[2]及后面的都沒變。這一過程會持續S[1]次,目標元素就和A[i1]靠在一起了(注意,在這個過程中,目標元素的位置是不會變的)。
如果此時繼續冒泡,則目標元素就會和A[i1]交換,右移一個位置,并且就從這次冒泡開始,S[2]不斷減1,減到0為止,接著目標元素和A[i2]交換,右移一個位置,S[3]不斷減1……直到最后一個S[]值也減到0后,目標元素到達它的目標位置。
也就是,設“第i階段”為S[i]值減少的這個階段,則在第0階段,目標元素會不斷左移,顯然不用+,第1階段,目標元素不動,也不用+,但從第2階段開始,在每階段的第一次冒泡時,目標元素都會向右移一個位置。因此,開始+的時候,必然是第x(x>=2)階段的開始的那次。由于最多只能+ K次,因此可能的最左位置就是滿足N-1-∑(0<=j<x)S[j] <=K的最小的x值減2,加上一開始就在目標元素之左的,且值不大于目標元素的元素個數(它們必然在目標元素之左)。注意特殊情況:x<2(此時當成x=2處理),或者x不存在(全是-)。
因此,本題就是預處理求出所有S之后,掃一遍得出最小的x值就行了,O(N)。
當然,二分答案+暴力判斷可以得50,有神犇說二分答案之后可以在O(N)時間內判斷,從而O(NlogN)解決,我太弱了,完全搞不懂囧……(Orz!!)
mole:
首先,一個很重要的事實就是,“整個過程中左手所在的位置嚴格小于右手”其實是一個廢條件!!因為如果左右手交叉了,必然是左手試圖去打靠右的一個,而右手試圖去打靠左的一個,此時,讓它們交換,則兩只手移動的距離都變小,方案仍然合法,且更優(我太弱了,當時就是在這里想抽了很久,以至于木有做這題……后來才知道這題很水……真悲劇!!!)
接下來就變成了一個全局統籌的問題,可以用網絡流解決:每個地鼠i拆成兩個點:入點i'、出點i'',中間連一條容量為1(表示只能打一次),費用為它的得分的邊,兩只手開始的位置也當成有地鼠,只不過得分為0而已。如果某只手在打完第i個地鼠后能接著去打第j個地鼠,就連邊<i'', j'>,容量1,費用0。s往表示兩只手開始的兩個點的入點連一條容量為1,費用為0的邊,每個出點往T連一條容量為1,費用為0的邊。求這個圖的最大費用最大流即可。
當然,用O(N
3)的DP也可以得到至少60分,如果卡的好的話可能有80以上囧……
bus:
裸的數據結構題,用一坨Splay Tree維護即可,唯一要注意的就是鏈可以翻轉,因此要rev標記……
還是不會搞的可以去做ZJOI2012 Day2的某題……
這題在數據結構題中還是比較好寫的……值得吐槽的是它的對拍很難寫……本沙茶寫正解用了50min,寫對拍用了75min……
———————————————————————————————————————————————————
【總結 && 一些閑扯】
(1)(Orz @sunzhouyi)
“要想滾粗:
0.仔細看錯或者記錯題。
1.選對不可做題。
2.思考坑爹題[鑒于‘坑爹’一詞在AH的特殊含義,建議這一點改為“思考廢條件怎么處理”]。
3.認真寫自己不會的東西。
4.最后還不寫暴力分。”
本沙茶中了其中的三點,因此悲劇了……
(2)熱烈慶祝今年的題目不再坑爹了!!!!!!(因為用的是JSOI的題,bus還抄襲了ZJOI……)
(3)這次的題目……要么是難想、好寫(sport代碼只有1K多),要么是好想、較難寫,但還可以寫的完的(指bus,和BZOJ上最近的那些數據結構相比真是太人道了……)
(4)要善于發掘題目的本質,特別是一些隱含的最優性質(比如mole的那個廢條件為什么廢);
(5)遇到想了很久想不出的題,一定要換一個方向去想,因為很可能是一開始的方向疵了;
(6)對于代碼量較大的題(如數據結構題),到底寫不寫是要看情況的,靈活掌握;
一些閑扯:
(1)本沙茶所在的考場幾乎全是神犇,就我一個沙茶……于是被虐傻了……
(2)比賽時看到對面的一個人在喝“和其正”……瞬間嚇傻了……(話說腫么木有看到喝阿華田的囧……)
(3)昨天試機的時候,被Atbiter虐了半天,一開始腫么配置都是“找不到答案文件”……后來才發現Atbiter已經改版了,players下面的第一層文件夾應該是考試場數編號(Day1、Day2……);
(4)試機的時候發現鼠標是壞的,后來才知道這個考場有6個鼠標壞了,3個鍵盤壞了,2個系統時間顯示錯誤……
(5)總之這次掛慘了,不過前30應該能進,重點是Round2,加油!!我要復仇!!