方格跳跃 (每日一题)
原题链接: 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;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一生雾梦!
评论
ValineDisqus