题解 P2870 【[USACO07DEC]最佳牛线,黄金Best Cow Line, Gold】

· · 题解

emm,好像又没有Pascal的代码,那么就发一个吧QAQ

Pascal里面字符可以直接比较大小(太好了),就不用再一个个放到字典里找了,所以,变简单了一点

 {
     \(≧▽≦)/太棒了
 }

题目大意也放上去了,不过我没看懂,所以还是解释一下吧:

 一个从头开始,一个从尾巴开始,将两端小的输出,如果相等,一直比下去,直到有一个比另一个小。
 如果输出的字符%80是0,那么 printf("%c")QAQ

代码(不可以抄):

var
  a:array[1..30100]of char;
  n,i,j,ji,x,y:longint;
 begin
   readln(n);
   for i:=1 to n do
     readln(a[i]);
   i:=1;
   j:=n;
   while (i<j) do
   begin
     if a[i]<a[j] then//如果头比尾巴小,输出头
     begin
       write(a[i]);
       inc(i);
     end else
     if a[j]<a[i] then//如果尾巴比头小,输出尾
     begin
       write(a[j]);
       dec(j);
     end else
     if a[i]=a[j] then
     begin
       x:=i;y:=j;
       while (x<y) and (a[x]=a[y]) do//如果一样,就往死里搜,前提是头一直等于尾
       begin
         inc(x);dec(y);//坐标移动
       end;
       if a[x]<a[y] then//比一下
       begin
         write(a[i]);
         inc(i);
       end else
       begin
         write(a[j]);
         dec(j);
       end;
     end;
     inc(ji);
     if(ji=80) then begin writeln;ji:=0; end;//换行控制
   end;
   write(a[i]);//知道为什么么?自己想QAQ
 end.

所以: MY BLOG 了解一下?