AtCoder Regular Contest 089 C - Traveling

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ParadiseHeaven/article/details/79232702

Problem StatementAtCoDeer the deer is going on a trip in a two-dimensional plane. In his plan, he will depart from point (0,0) at time 0, then for each i between 1 and N (inclusive), he will visit point (xi,yi) at time ti.

If AtCoDeer is at point (x,y) at time t, he can be at one of the following points at time t+1: (x+1,y), (x1,y), (x,y+1) and (x,y1). Note that he cannot stay at his place. Determine whether he can carry out his plan.

Constraints
  • 1 N 105
  • 0 xi 105
  • 0 yi 105
  • 1 ti 105
  • ti < ti+1 (1 i N1)
  • All input values are integers.
InputInput is given from Standard Input in the following format:
N
t1 x1 y1
t2 x2 y2
:
tN xN yN
Output

If AtCoDeer can carry out his plan, print Yes; if he cannot, print No.

Sample Input 1
2
3 1 2
6 1 1
Sample Output 1
Yes

For example, he can travel as follows: (0,0), (0,1), (1,1), (1,2), (1,1), (1,0), then (1,1).

Sample Input 2
1
2 100 100
Sample Output 2
No

It is impossible to be at (100,100) two seconds after being at (0,0).

Sample Input 3
2
5 1 1
100 1 1
Sample Output 3
No

这个方法真的很奇淫:

1. 两点之间的步数小于需要的步数,则不能到达(可行性剪枝)

2. 到达目标点的步数非偶数步,否则不能到达(奇偶剪枝)

3. 否则便可以到达

根本不需要写DFS

#include <iostream>
#include <cmath>

using namespace std;
int main(){
	int n, tt, tx, ty; 
	int t = 0, x = 0, y = 0, flag = 0;
	cin >> n;
	for (int i = 0; i<n; i++){
		cin >> tt >> tx >> ty;
		if (abs(tx - x) + abs(ty - y)>(tt - t) || (abs(tx - x) + abs(ty - y)) % 2 != (tt - t) % 2)
			flag = 1;
		t = tt;
		x = tx;
		y = ty;
	}
	if (!flag)	cout << "Yes" << endl;
	else	cout << "No" << endl;

	return 0;
}




猜你喜欢

转载自blog.csdn.net/ParadiseHeaven/article/details/79232702
今日推荐