Mikhail walks on a 2D plane. He can go either up or right. You are given a sequence of Mikhail's moves. He thinks that this sequence is too long and he wants to make it as short as possible.
In the given sequence moving up is described by character U and moving right is described by character R. Mikhail can replace any pair of consecutive moves RU or UR with a diagonal move (described as character D). After that, he can go on and do some other replacements, until there is no pair of consecutive moves RU or UR left.
Your problem is to print the minimum possible length of the sequence of moves after the replacements.
Input
The first line of the input contains one integer n (1 ≤ n ≤ 100) — the length of the sequence. The second line contains the sequence consisting of n characters U and R.
Output
Print the minimum possible length of the sequence of moves after all replacements are done.
Examples
Input
5 RUURU
Output
3
Input
17 UUURRRRRUUURURUUU
Output
13
Note
In the first test the shortened sequence of moves may be DUD (its length is 3).
In the second test the shortened sequence of moves can be UUDRRRDUDDUUU (its length is 13).
#include<bits/stdc++.h>
using namespace std;
char a[110];
int main(){
int n;
cin>>n;
cin>>a;
int num=0;
for(int i=0;i<n-1;i++){
if(a[i]!=a[i+1]){
num++;
i++;
}
}
cout<<n-num;
return 0;
}
一看这道题题目由于也没讲是复杂还是简单,我想的是从一边开始遍历,但是我想既然两边一样的话,还有一种可能,就是从两边同时往中间,但实际上,一边已经包含了最优情况,我想的情况虽然是特例但是不符合条件。
就是想多了而已。

探讨了在二维平面上,通过替换连续的RU或UR移动为斜向移动D,以缩短Mikhail移动序列的问题。介绍了算法实现思路及代码示例,目标是最小化移动序列长度。
1825

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



