昨天晚上新生训练赛第一次前三,这里分享一个比较有意思的题目,大家可以尝试做一下,我将我写的也分享给大家看看,欢迎一起交流~
两个邻国决定在它们之间建造一堵城墙,并设有一些城门,使公民能够从一个王国走向另一个王国。每当公民通过一座城门时,他都必须支付一枚银币
世界可以用一个平面的第一象限来表示,而城墙是沿着象限的角平分线(即满足方程 x=yx=y 的射线)。城墙以下的任何一点属于第一个王国,而城墙以上的任何一点都属于第二个王国。角平分线线上的任何整数点都有一个城门(即在点 (0,0),(1,1),(2,2),\ldots(0,0),(1,1),(2,2),… 上有城门)。城墙和城门不属于任何一个王国
法法在位置为 (0,0)(0,0)的城门处,他想在两个王国之间散步。他要按照序列 SS散步。这个序列是一个字符串,每个字符代表一个动作。法法将做的两个可能的动作是'U'
(向上移动一步,即从 (x,y)(x,y)移动到 (x,y+1)(x,y+1)和'R'
(向右移动一步,即从 (x,y)(x,y)移动到 (x+1,y)(x+1,y))
法法想要知道按照序列 S散步他需要支付的银币数量。请注意,如果法法在不从一个王国移动到另一个王国的情况下经过城门,他就不付银币。还假定他不在 (0,0)(0,0)处的门口付钱,即,他最初在他需要的一侧
我的题解:
#include<stdio.h>
#include<string>
int main()
{
int t;
scanf("%d", &t);
int flag = 0;
int X = 0, Y = 0;
int x = 0, y = 0;
for (int i = 0; i < t; i++)
{if (i==0)
getchar();
char a = getchar();
if (a == 'U')
{
y++;
if (y > x&&y - 1 == x&&Y==1)
{
flag++;
X = 1;
Y = 0;
}
if (i==0)
X = 1;
}
else
{
x++;
if (y < x&&y == x-1&&X==1)
{flag++;
Y = 1;
X = 0;
}
if (i == 0)
Y = 1;
}
}
printf("%d", flag);
return 0;
}