原题链接: AcWing

题目描述:

小朋友们在玩跳方格游戏。 n 个方格排成一排,从左到右依次编号为 1∼n。 每个方格中都标有一个方向箭头,箭头分为两种:">" 和 "<"。 ">" 表示进入方格的小朋友需要向右跳动一格距离,"<" 表示进入方格的小朋友需要向左跳动一格距离。 初始时,小朋友需要选择任意一个方格作为自己的初始位置,并从初始位置开始,按照每个方格的指示跳跃方向进行连续跳跃。 如果小朋友可以跳到界外,则视为赢得游戏胜利。 请你计算,为了赢得游戏胜利,共有多少个方格可以作为初始位置。 例如,当 n=4 且每个方格中的箭头方向依次为 <<>< 时,选择第 1 个或第 2 个方格作为初始位置,均可以跳到(左侧)界外,而选择第 3 个或第 4 个方格作为初始位置,则会陷入无限反复横跳,无法跳出界外,所以共有 2 个方格可以作为初始位置。

输入格式

第一行包含整数 n。 第二行包含一个长度为 n 的由 < 和 > 构成的字符串,其中第 i 个字符表示第 i 个方格中的方向箭头。

输出格式

一个整数,表示可以作为初始位置的方格数量。

数据范围

前 3 个测试点满足 1≤n≤10。 所有测试点满足 1≤n≤2×10^5。

输入样例1:

4
<<><

输出样例1:

2

输入样例2:

5
>>>>>

输出样例2:

5

输入样例3:

4
>><<

输出样例3:

0

解题思路:

这道题实际上是一个思维题,一开始我还以为是什么大模拟之类的,后面发现其实就是从左边出的必须一直向左,右边出同理必须一直向右,否则就会陷入死循环,那么就只需要把从左边出的和从右边出的加起来就好了。

代码:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    cin>>s;
    int ans = 0;
    for(int i=0;i<n&&s[i]=='<';++i)
    {
        ans++;
    }
    for(int i = n-1;i>=0&&s[i]=='>';--i)
    {
        ans++;
    }
    cout<<ans<<endl;
    return 0;
}