題目鏈結
首先肯定想到貪心,從隊尾和隊首取更小的那個。
但是如果遇到隊尾和隊首一樣大的情況呢,總不能再挨個往前比較。所以就把整個字串倒過來再掛到現在字串的後面,也就是把當前字串對稱過去。然後求出字尾陣列,給每個字尾都求個排名。然後每次取得時候取排名更小的就行了。
注意這個題的輸出格式,每80個字元輸出為一行。
#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int n = 60000 + 100;
ll read()
while(c>='0'&&c<='9')
return x*f;
}char s[n];
int n,m;
int x[n],c[n],y[n],sa[n],rk[n];
void get_sa()
for(int i = 1;i <= n;++i) rk[sa[i]] = i;
}char ans[n];
int anss;
int main()
n *= 2;
m = 'z';
get_sa();
int l = 1,r = len + 1;
while(l + r - len - 2 < len)
for(int i = 1;i <= anss;++i)
return 0;
}
乙個始終不被善待的人,最能識別善良,也最珍惜善良。 bzoj 1692 字尾陣列
將乙個字串進行如下操作 每次拿去首或尾,放在新字串尾,問新字串字典序最小的情況。直覺貪心,但情況複雜。可以用字尾陣列,每次比較當前剩餘串正序和倒序哪種字典序小,可以如下構建 abcd abcd0dcba include include include include include include ...
Jzoj 1247 佇列變換
fj打算帶他的n 1 n 30,000 頭奶牛去參加一年一度的 全美農場主大獎賽 在這場比賽中,每個參賽者都必須讓他的奶牛排成一列,然後領她們從裁判席前依次走過。今年,競賽委員會在接受隊伍報名時,採用了一種新的登記規則 他們把所有隊伍中奶牛名字的首字母取出,按它們對應奶牛在隊伍中的次序排成一列 比如...
03 佇列操作
時間限制 100ms 記憶體限制 100kb 描述假設以帶頭節點的迴圈鍊錶表示佇列,並且只設乙個指標指向隊尾元素節點 不設頭指標 節點元素這裡設為整型,編寫佇列的初始化 入隊和出隊演算法。其中入隊元素個數n及其節點資料,和出隊元素個數m都是從鍵盤輸入 預設n m都不小於0 然後輸出出隊元素,出隊不合...