【Usaco 2007 Dec gold】队列变换

题意:

每次,他在原来队列的首端或是尾端牵出一头奶牛,把她安排到新队列的尾部,然后对剩余的奶牛队列重复以上的操作,直到所有奶牛都被插到了新的队列里。求字典序最小

思路:

用指针一个指向头,一个指向尾,向里面作比较,如果有相同的就比较他们前面一个,还相同就前面两个,一直下去。

程序:

 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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值