ACM第一次周赛-第H题

Time limit1000 ms Memory limit262144 kB
total:
Time
46ms
Memory
12kB

原题:
Someday, Drazil wanted to go on date with Varda. Drazil and Varda live on Cartesian plane. Drazil’s home is located in point (0, 0) and Varda’s home is located in point (a, b). In each step, he can move in a unit distance in horizontal or vertical direction. In other words, from position (x, y) he can go to positions (x + 1, y), (x - 1, y), (x, y + 1) or (x, y - 1).

Unfortunately, Drazil doesn’t have sense of direction. So he randomly chooses the direction he will go to in each step. He may accidentally return back to his house during his travel. Drazil may even not notice that he has arrived to (a, b) and continue travelling.

Luckily, Drazil arrived to the position (a, b) successfully. Drazil said to Varda: “It took me exactly s steps to travel from my house to yours”. But Varda is confused about his words, she is not sure that it is possible to get from (0, 0) to (a, b) in exactly s steps. Can you find out if it is possible for Varda?

Input
You are given three integers a, b, and s ( - 109 ≤ a, b ≤ 109, 1 ≤ s ≤ 2·109) in a single line.

Output
If you think Drazil made a mistake and it is impossible to take exactly s steps and get from his home to Varda’s home, print “No” (without quotes).

Otherwise, print “Yes”.

翻译
有一天,Drazil想与Varda约会。Drazil和Varda住在笛卡尔飞机上。Drazil的家位于点(0,0),Varda的家位于点(a,b)。在每个步骤中,他可以在水平或垂直方向上以单位距离移动。换句话说,从位置(x,y),他可以到达位置(x + 1,y),(x-1,y),(x,y + 1)或(x,y-1)。不幸的是,德拉齐没有方向感。所以他随机选择了每一步的方向。他在旅行期间可能会不小心回到自己的房子里。德拉齐甚至没有注意到他已经到达(a,b)并继续旅行。幸运的是,Drazil成功抵达了位置(a,b)。德拉齐对瓦尔达说:“从我的房子到你的房子,我花了很多步。”但是Varda对他的话语感到困惑,她不确定是否有可能以恰好的步骤从(0,0)到(a,b)。你能知道Varda是否有可能吗?

输入
在一行中给出三个整数a,b和s( - 109≤a,b≤109,1≤s≤2·109)。

产量如果你认为Drazil犯了一个错误并且不可能采取正确的步骤并从他的家到Varda的家,打印“No”(没有引号)。否则,请打印“是”。

否则,请打印“是”。

Examples
Input
5 5 11
Output
No
Input
10 15 25
Output
Yes
Input
0 5 1
Output
No
Input
0 0 2
Output
Yes

题目思路:问题里面很清楚,画个坐标轴基本知道s和ab之间是什么关系了,
现在来看下细节:
1.最基本的s=a+b,那肯定yes;s<a+b就no,
2.但是如果s>a+b呢;肯定是走出1步,返回一步;或者走一个正方形要4步,在坐标轴上其实不难发现(s-(a+b))%=0时均能刚好回到那个坐标点(a,b).
3.首先坐标点是有正负的;但是我们走的步数肯定为正,则s>0,当然acm的题,我们不用限制这个,但是我们计算走几步路时,那就要把a,b的输入数据转化为正数了
题目大概就这么多细节,在输入给出的条件里,可以看出肯定要用long int

AC通过的C++语言程序如下:

#include <iostream>
#include<cstdlib>    //调用长整形绝对值函数,老手忽视
using namespace std;
void printmessage( long int a,  long int b,  long int c);   //长数据,无返回
int main()
{
	 int i, j, k;
	cin >> i >> j>>k;
	printmessage(i, j, k);   //这里有一个细节,直接调用函数,不能用cout,不然会返回输入的最后一个数据,老手忽视
	system("pause");
	return 0;
}

void printmessage( long int a,  long int b,  long int c)
{
	long int x, y, z;
	x = labs(a); 
	y = labs(b);
	if ((c -x- y) < 0)
	 cout << "no" << endl;
	else
	{
		z = (c - x - y) % 2;
		if (z == 0)
			cout << "yes" << endl;
		else   cout << "no" << endl;
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值