题意:
每次,他在原来队列的首端或是尾端牵出一头奶牛,把她安排到新队列的尾部,然后对剩余的奶牛队列重复以上的操作,直到所有奶牛都被插到了新的队列里。求字典序最小
思路:
用指针一个指向头,一个指向尾,向里面作比较,如果有相同的就比较他们前面一个,还相同就前面两个,一直下去。
程序:
var
i,j,n,m,ii,jj,k:longint;
s,s1:ansistring;
c:char;
begin
readln(n);
for i:=1 to n do
begin
readln(c);
s:=s+c;
end;
i:=1; j:=n;
ii:=0; jj:=n+1;
for k:=1 to n do
begin
if s[i]<s[j] then
begin
s1:=s1+s[i];
inc(i);
end else
if s[i]>s[j] then
begin
s1:=s1+s[j];
dec(j);
end else
if s[i]=s[j] then
begin
ii:=i+1;
jj:=j-1;
while (ii<jj) and (s[ii]=s[jj]) do
begin
inc(ii);
dec(jj);
end;
if (ii>=jj) or (s[ii]<s[jj]) then
begin
s1:=s1+s[i];
inc(i);
end else
begin
s1:=s1+s[j];
dec(j);
end;
end;
end;
for i:=1 to n do
begin
write(s1[i]);
if i mod 80=0 then writeln;
end;
end.