C - Traveling
Time limit : 2sec / Memory limit : 256MB
Score : 300 points
Problem Statement
AtCoDeer 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 ) , ( x−1, y ) , ( x , y+1) and (x,y−1). 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
- t i < t i+1 (1 ≤ i ≤ N−1)
- All input values are integers.
Input
Input is given from Standard Input in the following format:
N t 1 x 1 y 1 t 2 x 2 y 2 : t N x N y N
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
这题题目简单,我就不说题意了,只要根据结论写就可以AC了
结论是 当前点到上一点的曼哈顿距离所需要的时间(起点的上一点为原点)%2==0
这代表该点满足,否则不满足
#include <cstdio> #include <cmath> #include <cstdlib> using namespace std; int main() { int t; scanf("%d",&t); int s=0,sx=0,sy=0; while (t--) { int tx,x,y; scanf("%d%d%d",&tx,&x,&y); if((tx-s-abs(x-sx)-abs(y-sy))<0||(tx-s-abs(x-sx)-abs(y-sy))%2==1) break; s=tx; sx=x; sy=y; } t++; if(t) printf("No\n"); else printf("Yes\n"); return 0; }