1. 程式人生 > >bzoj 4104 [Thusc 2015] 解密運算 - 構造

bzoj 4104 [Thusc 2015] 解密運算 - 構造

題目傳送門

  傳送門

題目大意

  (原題題意很簡潔)

  智商不夠,告辭。。

  顯然能夠確定第一列上的字元。

  這樣我們知道某種字元的後一個字元可能是哪些。只要我們能把右邊的字元對映到左邊的字元上,這樣我沿著 '.' 往後跳就能找出原串了。

  我們考慮最後一列從上到下的第$k$個a,它後面的$n$個字元構成的字串一定是對應第一列第$k$個a和後面$n - 1$組成的字串。

  然後排一個序就能夠計算了。

 1 /**
 2  * bzoj
 3  * Problem#4104
 4  * Accepted
 5  * Time: 996ms
6 * Memory: 2856k 7 */ 8 #include <bits/stdc++.h> 9 using namespace std; 10 typedef bool boolean; 11 12 #define pii pair<int, int> 13 14 int n; 15 pii *a; 16 17 int main() { 18 scanf("%d%*d", &n); 19 a = new pii[(n + 1)]; 20 for (int i = 0; i <= n; i++) {
21 scanf("%d", &a[i].first); 22 a[i].second = i; 23 } 24 sort(a, a + n + 1); 25 int cur = a[0].second; 26 for (int i = 1; i <= n; i++) { 27 printf("%d ", a[cur].first); 28 cur = a[cur].second; 29 } 30 return 0; 31 }