151022的測試總結

第一題

【題目及題號】異或 superoj948
【題解】
性質一:當x爲偶數時,x^(x+1) = 1;
所以可以根據k進行分類討論。
(一)當k >= 4時
①r-l+1>4
直接輸出連續的四個數(x爲偶數,x,x+1,x+2,x+3);異或和爲0;
②r-l+1=4
枚舉(2^4)-1種情況求最小。
(二)當k < 4時
①k = 1直接輸出左界l;
②k = 2
(1)r-l+1>2 輸出連續的兩個數(x爲偶數,x,x+1);異或和爲1;
(2)r-l+1=2 判斷l和(l^r)的大小;
③k = 3
這是最難的一種情況,答案一定不會超過1。所以我們可以只考慮能否找到一組使答案爲零的解。
設選的三個數爲x,y,z(x < y < z),首先三個數的二進制不可能擁有同樣的最高位(否則最高位一定有1)。
那麼設z = 2^k+c,y = 2^k+b;(x < 2^k)則有b^c^x = 0;
爲了讓x,y,z都在[l,r]之間,所以需要讓x儘量大,z儘量小(c儘量小,即x>=c)。
假設x>=2^(k-1),則有z>=2^(k-1)+2^k,讓z最小則取z = 2^k+2^(k-1);
x儘量大所以取x = 2^k-1;
z = 1100000……;
x = 0111111……;
求得
y = 1011111……;
y = z - 1;

至於x小於2^k的情況我們可以通過讓z,y變成2^(k-1)來轉化成同一個問題。
現在就可以枚舉k看是否存在解了。

【考試ING】
考試的時候覺得這個題最難,想出來了除了k=3以外的所有情況。
對於k=3的情況想到了高位補1和三個數高位不相同的性質

之所以沒有想出來大概是因爲除了二進制沒有把它轉成數學公式來限制範圍。Orz。數學推導多麼重要,沒了它我會死。Orz。

第二題

【題目及題號】樹 superoj949
【題解】
本題需要求sigma(d(u,v))(u!=v),樹上任意兩點之間的距離和。如果分別考慮起點和終點是至少O(n^2)的複雜度,是不可接受的。所以考慮轉化。
既然是求邊權的和,那麼自然就可以直接考慮每條邊會出現多少次。明顯一條邊會被使用的次數=它左邊的點數*它右邊的點數*2;(因爲本題的點對無序,所以要乘二)。
現在的問題就變成了:如何求一條邊左邊的點和右邊的點數量?
把樹畫出來這個問題就非常簡單了。
這裏寫圖片描述
如圖所示,當前邊左邊的點明顯就是它從父親連向的兒子節點所在子樹的size,右邊的點就是(n-size)。
最後一邊dfs就可以解決所有問題。

注意:開long long。

【考試ING】
我反正覺得這個題沒有什麼難度,至於標算推的什麼lca啦……好麻煩啊有空再看好了。

提醒自己一點,毫無頭緒的時候畫個圖就什麼都清楚了。

第三題

【題目及題號】玩具 superoj950
【題解】
注意兩個性質:
1、平板無限長,寬度只有w。
2、滑塊只能被平移不能被旋轉。
根據性質一,我們就可以只考慮木塊兩兩之間的關係(因爲我們可以把其他木塊都移到無窮遠處)再考慮性質二,兩個木塊的寬度是固定的。當要求改變兩個木塊的相對位置的時候,兩個木塊的高度就成了限制條件。所以當且僅當存在兩個木塊的寬度加在一起大於w且要求交換相對位置時無解(如圖)。現在就可以O(n^2)驗證了。
這裏寫圖片描述
【考試ING】
當時推出這個題的結論的時候其實我是不敢相信出題人會把如此水題放T3的,還是要相信自己啊Orz。

注意一個地方就是,題目沒有提到的保證儘量考慮,但是在會影響常數大小(時間複雜度)的時候最好就分塊吧。
本題因爲懶得刪多餘代碼導致常數大T了10分。好心疼Orz。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章