##约会求解

. 约会

题目ID:1179必做题100分

最新提交:0 分

历史最高:0 分

时间限制: 1000ms

空间限制: 262144kB

题目描述

时间:1s 空间:256M

题目描述:

小蓝准备去和小红约会,小蓝和小红居住在一个平面直角坐标系中,小蓝的家在(0,0)(0,0)位置,小红的家在(a,b)(a,b)位置,小蓝每一步可以往上下左右中的任意一个方向移动一个单位,换句话说,他可以从(x,y)(x,y)走 到(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1).中的一个位置。

不幸的是小蓝的方向感比较差,所以他每次随机选择了一个方向走出去,有时候可能走着走着走回了自己的家,有时候可能已经走到了小红的家还没有发现,又继续走。

幸运的是,在一个月黑风高的夜晚,他终于走到了小红的家,他高兴地跟小红说,从我家到你家我走了stepstep步,现在你帮帮小红计算一下,从小蓝的家走到小红的家有没有可能走stepstep步

输入格式:

输入一行,包含三个整数,a,b,stepa,b,step

输出格式:

输出一行,如果可能输出“Yes”,否则输出“No”

样例输入1:

5 5 11

样例输出1:

No

样例输入2:

10 15 25

样例输出2:

Yes

样例输入3:

0 5 1

样例输出3:

No

样例输入4:

0 1 3

样例输出4:

Yes

约定:

−10000 <=a,b<=10000,1<=step<=2∗10000 −10000 <=a,b<=10000,1<=step<=2∗10000

提示:

第四个样例:(0, 0) → (0, 1) → (0, 2)->(0,1)走了三步

1 个赞

核心代码

   //定义加输入
    if (a<0) {
        a = 0-a;
    }
    if (b<0) {
        b = 0-b;
    }
    int c = a+b;
    if (c>step) {
        printf("No\n");
    } else if (c==step) {
        printf("Yes\n");
    } else {
        if (0==(step-c)%2) {
            printf("Yes\n");
        } else {
            printf("No\n");
        }
    }

AC了给解决方案!!!

1 个赞

给你说一下思路:因为小明方向感不好所以做到小红家时,有可能会继续往前走,假设继续往前走了 k 步那么再走回小红加也要走 k 步,一来一回走了 2*k 步是一个偶数,所以 小明走的步数-正常情况下要走的步数 n ,如果这个明白了就可以写一下代码了if((n-step)%2==0)cout<<"Yes"; 而正常情况下走的步数 n 怎么球呢? 其实很简单就是小红的的坐标 (x1,y1)n=x1+y1 。但是现在还没完! 为什么呢如果小明走的步数 step<n 连小红的家都走不到也是没有可能的

代码(有备注)

int a,b,step;
int main(){
	cin>>a>>b>>step;
	if(step<a+b)cout<<"No";//如果step都走不到小红家输出No 
	else if((step-a-b)%2!=0)cout<<"No";//根据上文说的如果step-a-b不是偶数则输出No
	else cout<<"Yes"; 
	return 0;
}

这是核心代码,自己加上头文件就能AC了,如果AC了给个

解决方案

戳啦,系dp惹(我又来了

//这个不是这个代码的代码,但是你可以用这个来判断,改一下再用
int target = (step - dist) / 2;
bool dp[step+1] = {false};
dp[0] = true;

for (int i = 1; i <= step; i++) {
    if (dp[i - 1] || (i >= 2 && dp[i - 2]) || (i >= 3 && dp[i - 3])) {
        dp[i] = true;
    }
}

return dp[target];

}
1 个赞

OK

???解决方案不给我,还给我发OK??

@王子诺 不是为什么不给我发解决方案