昨天晚上新生训练赛第一次前三,这里分享一个比较有意思的题目,大家可以尝试做一下,我将我写的也分享给大家看看,欢迎一起交流~两个邻国决定在它们之间建造一堵城墙,并设有一些城门,使公民能够从一个王国走向另一个王国。每当公民通过一座城门时,他都必须支付一枚银币世界可以用一个平面的第一象限来表示,而城墙是沿着象限的角平分线(即满足方程 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; }