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

· · 题解

比较字符串不要人工比较吗,分别从首尾开始比较不就是直接比较所给字符串与它反转字符串的大小关系吗?这样的话就有接下来简短的代码了.

#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
string s;int n;
int main()
{
char c;
for (scanf("%d\n",&n);n--;) c=getchar(),s.push_back(c),c=getchar();//构造字符串,由于要读取回车符,后面多一个getchar.
string ss=s;reverse(ss.begin(),ss.end());//再构造一个所求字符串的反转字符串
for (int t=0;s.size();)
  {
  s<ss?(putchar(s[0]),s.erase(0,1),ss.erase(ss.size()-1)):(putchar(s[s.size()-1]),s.erase(s.size()-1,1),ss.erase(0,1));
//如果小于反转字符串就拿出第一位,同时去掉反转字符串的最后一位,反之亦为同理.
  if (++t%80==0) puts("");//80个换行
  }
}