time limit: 10 sec memory limit: 128 mb
小敏和小燕是一對好朋友。
他們正在玩一種神奇的遊戲,叫minecraft。
他們現在要做乙個由方塊構成的長條工藝品。但是方塊現在是亂的,而且由於機器的要求,他們只能做到把這個工藝品最左邊的方塊放到最右邊。
他們想,在僅這乙個操作下,最漂亮的工藝品能多漂亮。
兩個工藝品美觀的比較方法是,從頭開始比較,如果第
i i
個位置上方塊不一樣那麼誰的瑕疵度小,那麼誰就更漂亮,如果一樣那麼繼續比較第i+
1' role="presentation" style="position: relative;">i+1
i+1個方塊。如果全都一樣,那麼這兩個工藝品就一樣漂亮。
第一行兩個整數
n n
,代表方塊的數目。
第二行n
' role="presentation" style="position: relative;">n
n個整數,每個整數按從左到右的順序輸出方塊瑕疵度的值。一行n
n
個整數,代表最美觀工藝品從左到右瑕疵度的值。
sample input
10
10 9 8 7 6 5 4 3 2 1
sample output1 10 9 8 7 6 5 4 3 2
hint
資料規模與約定
對於20%的資料,
n<=
1000
' role="presentation" style="position: relative;">n
<=
1000
n<=
1000
對於40%的資料,
n<=
10000
n
<=
10000
對於100%的資料,
n<=
300000
n
<=
300000
' role="presentation" style="position: relative;">
' role="presentation" style="position: relative;">
' role="presentation" style="position: relative;">
' role="presentation" style="position: relative;">
' role="presentation" style="position: relative;">
' role="presentation" style="position: relative;">
這是乙個模板題。
最小表示法,但是不能用字尾自動機,字符集太大了。
期望複雜度:o(
n)' role="presentation" style="position: relative;">o(n
)o(n
) 記錄兩個指標i,
j i,j
,列舉比較長度
k k
:s[i,i+k] = a[j,j+k]
k++s[i,i+k] < a[j,j+k]
i=i+k
s[i,i+k] > a[j,j+k]
j=j+k
注意比較的時候要取模。
這樣為什麼是對的呢?
拿第二種情況舉例:
i~i+k-1都不可能是最小的,因為用對應的j和它比,都會比它大。
code:
#include
#include
#include
using namespace std;
int a[300005];
int i,j,k,n;
int main()
for(int w=0;wprintf("%d ",a[(i+w)%n]);
}
bzoj2882 工藝 最小表示法
小敏和小燕是一對好朋友。他們正在玩一種神奇的遊戲,叫minecraft。他們現在要做乙個由方塊構成的長條工藝品。但是方塊現在是亂的,而且由於機器的要求,他們只能做到把這個工藝品最左邊的方塊放到最右邊。他們想,在僅這乙個操作下,最漂亮的工藝品能多漂亮。兩個工藝品美觀的比較方法是,從頭開始比較,如果第i...
最小表示法 工藝
description 小敏和小燕是一對好朋友。他們正在玩一種神奇的遊戲,叫minecraft。他們現在要做乙個由方塊構成的長條工藝品。但是方塊現在是亂的,而且由於機器的要求,他們只能做到把這個工藝品最左邊的方塊放到最右邊。他們想,在僅這乙個操作下,最漂亮的工藝品能多漂亮。兩個工藝品美觀的比較方法是...
bzoj2882 工藝(字尾自動機(最小表示法))
原題位址 題意 小敏和小燕是一對好朋友。他們正在玩一種神奇的遊戲,叫minecraft。他們現在要做乙個由方塊構成的長條工藝品。但是方塊現在是亂的,而且由於機器的要求,他們只能做到把這個工藝品最左邊的方塊放到最右邊。他們想,在僅這乙個操作下,最漂亮的工藝品能多漂亮。兩個工藝品美觀的比較方法是,從頭開...