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