题目

源地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=56

理解

特别涨姿势的一道题。 题目不难,只要理解题目中所谓的翻转的意思,很好做。但是我在看题解的过程中,被STL的各种酷炫吓呆,感觉string类真的好好用= =。要是自己用char数组模拟的话,可能会写得各种坑。

默默记录一下:

  • istringstream iss(str);,专门用于操作string类的一个类,可以这样用for(int tmp; iss>>tmp; que.push_front(tmp));。超酷炫有木有!。!
  • deque<int>::iterator it 迭代器,方便好用不多说= =
  • reverse(Max, que.end()); 用于容器中两个元素的交换,超级好用。
  • distance(que.begin(), Max) 返回两个迭代器之间的距离,也是相当的赞。

恩- -,好好学STL,大有前途。

代码


string str;

int main(int argc, char const *argv[])
{
    while(getline(cin,str))
    {
        cout<<str<<endl;
        istringstream iss(str);
        deque<int> que;
        for(int tmp; iss>>tmp; que.push_front(tmp));
        for(deque<int>::iterator it=que.begin(); it!=que.end(); ++it)
        {
            deque<int>::iterator Max = max_element(it, que.end());
            if(Max!=it)
            {
                if(Max != que.end()-1)
                {
                    reverse(Max, que.end());
                    cout<<distance(que.begin(), Max)+1<<' ';
                }
                reverse(it,que.end());
                cout<<distance(que.begin(),it)+1<<' ';
            }
        }
        cout<<"0\n";
    }
    return 0;
}

更新日志

  • 2014年11月4日 已AC。