问题陈述:
Takahashi有一个字符串S,由小写英文字母组成。
从这个字符串开始,他将在下面给出的过程中生成一个新字符串。
程序包括Q次操作。在操作i(1≤i≤Q)中:
- 如果Ti=1:反转字符串
- 如果Ti=2:另输入整数Fi和小写英文字母Ci
*如果Fi=1:将Ci添加到字符串的开头
*如果Fi=2:将Ci添加到字符串的结尾
请帮助高桥找到这个过程的最后一个字符串。
解题思路:
若按照所给描述,一步步操作,时间超限;
因为翻转不改变原字符串相对顺序,且偶数次翻转操作不变,只需确定T2操作中字符应添加到字符串哪一端,设置计数器sum统计T1操作个数,当操作T2时,若sum为偶数,按规则insert字符,若sum 为奇数,反规则insert字符,最后进行T1操作,若sum为偶数直接输出,反之翻转输出。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int q,sum=0;string s;
cin>>s;
cin>>q;
while(q--)
{
int t,f;char c;
cin>>t;
if(t==1) sum++;
if(t==2)
{
cin>>f>>c;
if(f==1)
{
if(sum%2==0)
s.insert(s.begin(),c);
else s.insert(s.end(),c);
}
if(f==2)
{
if(sum%2==0)
s.insert(s.end(),c);
else s.insert(s.begin(),c);
}
}
}
if(sum%2==1)
reverse(s.begin(),s.end());
cout<<s;
}