凉心的比赛补题

F - 法法要穿过大门

 CodeForces - 935B 

这一题不难,可是题目是老长老长的英文,而且还有一些我不懂的词,导致我理解题意就花了很长的时间。

题意:统计法法一共穿过y=x这条直线几次(第一次不算)。

观察:法法穿过y=x一定有这样一个条件:这次所在位置与上两步所处位置分别分布在y=x的上下两侧。

代码实现思路:易发现——在y=x的上测的点满足y>x,而在y=x下测的点满足y<x,在y=x上的点满足y=x。于是,我们只要把每个点相对y=x的位置都记录下来,最后遍历求出满足条件的点的个数即可。

代码:

#include<iostream>
using namespace std;
char s[100010];
int x[100010],y[100010],q[100010];
int main()
{
    int n;
    cin>>n;
    int coin=0;
    cin>>s;
    for(int i=0;i<=n-1;i++)
    {
        y[i]+=y[i-1];
        x[i]+=x[i-1];
        if(s[i]=='U') y[i]++;
        else x[i]++;
        if(x[i]>y[i]) q[i]=2;
        else q[i]=3;
        if(x[i]!=y[i]&&x[i-1]==y[i-1]&&q[i]!=q[i-2]) coin++;  
    }
    coin--;
    printf("%d",coin);
}

猜你喜欢

转载自www.cnblogs.com/Cnxz/p/12190039.html
今日推荐