看似很简单的题目,第一感觉就是直接模拟了,结果TLE...然后套论坛上是look一下后,改进了一下,结果还是TLE,无奈下只好购买代码了,不过理解了就好,呵呵.直接j的顺序是从后往前
#include <iostream>
#include <string.h>
using namespace std;
typedef struct
{
char c;
int s, e;
}Op;
char s[80002];
Op p[3001];
int n, nn;
int main()
{
int T, i, j, k;
char c;
int m;
int a, b;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
scanf("%s",s);
nn = 0;
for (i=0; i<m; ++i)
{
getchar();
scanf("%c",&c);
if(c == 'Q')
{
scanf("%d",&a);
--a;
int cnt = 0;
for (j=nn-1; j>=0; --j)
{
if(a<p[j].s || a>p[j].e)
continue;
if(p[j].c == 'R')
{
a = p[j].s+p[j].e-a;
}
else if(p[j].c == 'S' )
{
++cnt;
}
}
c = s[a];
for (j=0; j<cnt; j++)
{
if(c-'z' == 0)
c = 'a';
else
++c;
}
printf("%c ", c);
}
else
{
scanf("%d%d",&a,&b);
p[nn].c = c, p[nn].s = a-1, p[nn++].e = b-1;
}
}
}
return 0;
}
本文介绍了一个看似简单的编程问题,最初尝试直接模拟但遭遇了时间限制错误(TLE)。经过多次尝试改进仍然未能解决,最终通过购买代码的方式学习到了正确的解决方法。文章详细展示了改进后的代码实现过程。

173

被折叠的 条评论
为什么被折叠?



