AtCoder Beginner Contest 174 比赛人数9817
AtCoder Beginner Contest 174 D Alter Altar 双指针交换
总目录详见https://blog.csdn.net/mrcrack/article/details/104454762
在线测评地址https://atcoder.jp/contests/abc174/tasks/abc174_d
题目大意:给定一个只包含W,R的字符串,要求将R摆在最左边,W摆在最右边,可以采用的方式有,交换R,W字母,或者将R改成W,或者将W改成R.
基本思路:最有效的方式,就是交换R,W字母。双指针,l寻找W位置,r寻找R位置,为了交换。
样例模拟如下:
8
WRWWRWRR
3
位置12345678
数值WRWWRWRR
l=1,r=8
s[1]=W,s[8]=R,交换,字串更新
位置12345678
数值RRWWRWRW
l=3,r=7
s[3]=W,s[7]=R,交换,字串更新
位置12345678
数值RRRWRWWW
l=4,r=5
s[4]=W,s[5]=R,交换,字串更新
位置12345678
数值RRRRWWWW
AC代码如下:
#include <stdio.h>
#define maxn 200010
char s[maxn];
int main(){
int n,l,r,cnt;
scanf("%d%s",&n,s+1);
l=1,r=n,cnt=0;
while(l<r){
while(s[l]=='R')l++;
while(s[r]=='W')r--;
if(l<r)cnt++,s[l]='R',s[r]='W';//交换
}
printf("%d\n",cnt);
return 0;
}