题解 P2870 【[USACO07DEC]最佳牛线,黄金Best Cow Line, Gold】
DreamShadow · · 题解
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.