description
fj打算帶他的n(1 <= n <= 30,000)頭奶牛去參加一年一度的「全美農場主大獎賽」。在這場比賽中,每個參賽者都必須讓他的奶牛排成一列,然後領她們從裁判席前依次走過。
今年,競賽委員會在接受隊伍報名時,採用了一種新的登記規則:他們把所有隊伍中奶牛名字的首字母取出,按它們對應奶牛在隊伍中的次序排成一列(比如說,如果fj帶去的奶牛依次為bessie、sylvia、dora,登記人員就把這支隊伍登記為bsd)。登記結束後,組委會將所有隊伍的登記名稱按字典序公升序排列,就得到了他們的出場順序。
fj最近有一大堆事情,因此他不打算在這個比賽上浪費過多的時間,也就是說,他想盡可能早地出場。於是,他打算把奶牛們預先設計好的隊型重新調整一下。
fj的調整方法是這樣的:每次,他在原來佇列的首端或是尾端牽出一頭奶牛,把她安排到新佇列的尾部,然後對剩餘的奶牛佇列重複以上的操作,直到所有奶牛都被插到了新的佇列裡。這樣得到的佇列,就是fj拉去登記的最終的奶牛佇列。
接下來的事情就交給你了:對於給定的奶牛們的初始位置,計算出按照fj的調整規則所可能得到的字典序最小的佇列。
input
* 第1行: 乙個整數:n
* 第2..n+1行: 第i+1行僅有1個'a'..'z'中的字母,表示佇列中從前往後數第i頭奶牛名字的首字母
output
* 第1..??行: 輸出fj所能得到的字典序最小的佇列。每行(除了最後一行)輸出恰好80個'a'..'z'中的字母,表示新佇列中每頭奶牛姓名的首字母
sample input
6acdbcb
sample output
abcbcd
data constraint
hint
【樣例解釋】
運算元原佇列新佇列
#1acdbcb
#2cdbcba#3
cdbc
ab#4
cdbabc
#5cd
abcb#6d
abcbc
#7abcbcd
題解:
貪心,頭尾指標列舉字串兩邊,選小的那個,若相等,則往內延伸判斷哪邊裡面的字元更小
var n,l,r,i,t1,t2,bz:longint;
s,s2:ansistring;
c:char;
begin
readln(n);
for i:=1
to n do
begin
readln(c);
s:=s+c;
if (i>1)and(s[i]<>s[i-1]) then bz:=1;
end;
if bz=0
then
begin
for i:=1
to length(s) do
begin
write(s[i]);
if i mod
80=0
then writeln;
end;
exit;
end;
l:=1;
r:=length(s);
while ldo
begin
if s[l]then
begin
s2:=s2+s[l];
inc(l);
endelse
if s[r]then
begin
s2:=s2+s[r];
dec(r);
endelse
begin
t1:=l;
t2:=r;
while s[t1]=s[t2] do
begin
inc(t1);
dec(t2);
end;
if s[t1]then
begin
s2:=s2+s[l];
inc(l);
endelse
begin
s2:=s2+s[r];
dec(r);
end;
end;
end;
s2:=s2+s[l];
for i:=1
to length(s2) do
begin
write(s2[i]);
if i mod
80=0
then writeln;
end;
end.
1625 Usaco2007 Dec 寶石手鐲
time limit 5 sec memory limit 64 mb submit 1268 solved 887 submit status discuss 貝茜在珠寶店閒逛時,買到了乙個中意的手鐲。很自然地,她想從她收集的 n 1 n 3,402 塊寶石中選出最好的那些鑲在手鐲上。對於第i塊寶...
1625 Usaco2007 Dec 寶石手鐲
貝茜在珠寶店閒逛時,買到了乙個中意的手鐲。很自然地,她想從她收集的 n 1 n 3,402 塊寶石中選出最好的那些鑲在手鐲上。對於第i塊寶石,它的重量為w i 1 w i 400 並且貝茜知道它在鑲上手鐲後能為自己增加的魅力值d i 1 d i 100 由於貝茜只能忍受重量不超過m 1 m 12,8...
USACO 修理牛棚
同樣是一道貪心題,我的思路是用乙個陣列存下所有的空擋,對空擋進行排序,然後再在總長度中減去前m 1 大的空檔長度。關鍵還是理解題意。貌似洛谷 oj不支援 int min 之類的。還有要對初始資料排一次序,害我 wa了一次。include include includeusing namespace ...