2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest
Problem A. Advertising Strategy
題目描述:給出兩個數\(n, k\),初始時\(a_1=0\),每一天開始時令\(b_i=a_i+x_i\),每天結束時\(a_{i+1}=b_i+min(b_i, \left \lfloor \frac{n-b_i}{2} \right \rfloor)\),其中\(\sum x_i \leq k\),問最少多少天使得\(a_i \geq n\)
solution
將\(k\)分為兩部分,一部分為\(x_1\),另一部分為最后一天的\(x\),這樣最優,然后枚舉\(x_1\)即可。
時間復雜度:\(O(klogn)\)
Problem B. Byteland Trip
題目描述:給出一個字符串\(st\),由<, >
組成,當\(st_i='<'\)時,\(i\)可以去到\(i\)左邊的任意一個點,當\(st_i='>'\)時,\(i\)可以去到\(i\)右邊的任意一個點。問從任意一個點出發,遍歷所有的點,最終去到\(i\)的方案數,對於每個\(i\)輸出答案。
solution
還沒想到。。。
Problem C. Carpet
題目描述:給出一棵樹,將這棵樹的節點放在一個\(1 000 000 \times 20\)的網格中,每個格只能有一個節點,使得樹邊不相交(樹邊為線段),輸出一種方案。
solution
因為高度只有\(20\)所以只能盡量橫向發展。
設\(size[i]\)為子樹\(i\)的大小,\(longest[i]\)為\(i\)子樹中\(i\)到葉子的最長距離,\(longid[i]\)為最長鏈中\(i\)的兒子。
因為盡量要橫向發展,所以將最長鏈橫放,假設\(i\)的位置是\((x, y)\),則\(longid[i]\)的位置為\((x+size[i]-size[longid[i]], y)\),即將\(longid[i]\)與\(i\)放在同一行,並且給\(i\)的其它兒子留足空間,其它兒子依次放在\(y+1\)行,第一個兒子放在\((x, y+1)\),第二個放在\((x+size[son_1], y+1)\),以此類推,目的是給每棵子樹都留足空間。
時間復雜度:\(O(n)\)
Problem D. Decoding of Varints
題目描述:對整數進行編號:\(0\)編號為\(0\),\(-1\)為\(1\),\(1\)為\(2\),即當\(x \geq 0\)時,編號為\(2x\),當\(x<0\)時,編號為\(-2x-1\)。有一個數列\(x_i\)(未知),將\(x_i\)的編號化為\(128\)進制,然后除了最高位外,其余的數加\(128\),按順序給出操作后的序列,求原序列。
solution
模擬。
時間復雜度:\(O(9n)\)
Problem E. Empire History
題目描述:給出一個無向圖,將該圖的節點分成兩部分,使得這兩部分分別連通,並且存在兩個非空集合\(u, v\),分別為兩個部分的點的子集,使得\(u, v\)之間兩兩有邊。輸出一種方案。
solution
還不會。。。
Problem F. Fake or Leak?
題目描述:根據ACM
的賽制,給出封榜時每個隊伍的做題情況,再給出最終結果排名的連續\(k\)個人的做題情況,問是否可能出現。
solution
先按照規則判斷終榜的順序是否正確,如果正確,再判斷其它人是否都能排在他們的前面或者后面。排在前面的話肯定是假設全部題都答對,看看能不能排在終榜第一個人的前面;至於排在后面,則是根據封榜作為終榜,看看能不能排在終榜最后一個人的后面。
時間復雜度:\(O(n)\)
Problem G. God of Winds
題目描述:給出一個\(n \times m\)的網格圖,網格圖的每條邊都有一個值。現在在每個格子中填一個整數,若是正數\(x\),則在格子的左、下邊加\(x\),右、上邊減\(x\);若是負數\(-x\),則在格子的右、上邊加\(x\),左、下邊減\(x\)。初始時網格的所有邊都是\(0\),問是否存在一種填數的方案使得最后所有邊的值等於給出的邊值。
solution
容易找到規律:若存在方案,則存在無數種方案,即第一個方格填什么數都可以。所以設第一個方格為\(0\),然后推出所有格子的數,然后再驗證所有邊是否正確。
時間復雜度:\(O(nm)\)
Problem H. Hilarious Cooking
題目描述:存在一個序列\(a_i\),滿足\(a_i \geq 0, | a_i-a_{i+1} | \leq 1\),給出某些位置的數和一個數\(T\),問是否存在一個序列\(a_i\),使得\(\sum a_i=T\)。
solution
由於\(\sum a_i\)是連續的,所以可以求出\(\sum a_i\)的范圍,然后判斷\(T\)是否在這個范圍內。
時間復雜度:\(O(m)\)
Problem I. Infinite Gift
題目描述:在\(k\)維空間中選\(n\)個向量,然后將\(k\)維空間的所有向量\(a\)向\(a+v_i\)連邊。問構成的圖是否是二分圖。
solution
是否是二分圖相當於判斷是否有奇環。
然后隊友找到一個規律:設\(k\)個未知數,列\(n\)條方程,將向量的每一維都模\(2\),然后方程是\(x_1v_{i1} XOR x_2v_{i2} XOR ... XOR x_kv_{ik}=1\)
然后方程有解則表示有奇環,所以可以壓位求解異或方程。
時間復雜度:\(O(\frac{nk^2}{64})\)
Problem J. Judging the Trick
題目描述:在一個\(w \times h\)矩形中有若干個三角形,求矩形中的一個沒有被三角形覆蓋的點。
solution
還不會。。。