Codeforces Round #627 (Div. 3) 比赛人数6434
[codeforces 1324C] Frog Jumps 一直向右+边界处理
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
也在线测评地址http://codeforces.com/contest/1324/problem/C
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
C - Frog Jumps | GNU C++11 | Accepted | 15 ms | 0 KB |
比赛时,一直担心the frog can jump into the same cell twice
同一位置最多跳到2次,担心该题会因此比较难编。
带着担心,手工模拟了所有样例,突然发现,青蛙只要一直向右跳,就能成功跳出。
为了方便数据处理,对字串的左右边界加入了字符'R'.
该题就演变为寻找 依次出现 的 'R'字符 之间 最大 位置差值。
若还不明白上面所说,请看样例模拟
LRLRRLL
头尾加上字母R变为
RLRLRRLLR
相邻字母R间差值 2 21 3 最大值为3
L
头尾加上字母R变为
RLR
相邻字母R间差值 2 最大值为2
LLR
头尾加上字母R变为
RLLRR
相邻字母R间差值 31 最大值为3
RRRR
头尾加上字母R变为
RRRRRR
相邻字母R间差值 11111 最大值为1
LLLLLL
头尾加上字母R变为
RLLLLLLR
相邻字母R间差值 7 最大值为7
R
头尾加上字母R变为
RRR
相邻字母R间差值 11 最大值为1
个人觉的代码编得好的地方,还是边界的处理。
codeforces比赛多参加,能力真的是实实在在的提高。虚拟比赛与实时比赛,效果差的不是一星半点。
以下是比赛时提交的代码。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[200010];
int main(){
int t,n,i,mx,pre;//pre记录前一个R出现的位置
scanf("%d",&t);
while(t--){
scanf("%s",s+1);
n=strlen(s+1),mx=-1;
s[0]='R',n++,s[n]='R',pre=0;//边界处理
for(i=0;i<=n;i++)
if(s[i]=='R'){
mx=max(mx,i-pre);//依次出现的R字符之间最大位置差值
pre=i;
}
printf("%d\n",mx);
}
return 0;
}