题目链接:http://codeforces.com/problemset/problem/515/A
题目意思:问能否从 (0, 0) 出发,恰好走 s 步,到达该位置(a, b)。
首先容易知道,最少的步数为 |a| + |b|,最长就是——当然是无限啦(乱兜圈子就行)。然后就有一点点带着个人感觉来做了= =,第六感确实不错的,呵呵,证明就有待考究了。
如果 |a| + |b| 跟 s 的奇偶性相同就有解,否则无解。当然前提是满足 s 至少要比最少的步数大!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 using namespace std; 7 8 int main() { 9 int a, b, s; 10 while (scanf("%d%d%d", &a, &b, &s) != EOF) { 11 int mindist = abs(a) + abs(b); 12 if (mindist > s) 13 printf("No\n"); 14 else { 15 if (mindist & 1 && s & 1) 16 printf("Yes\n"); 17 else if (mindist % 2 == 0 && s % 2 == 0) 18 printf("Yes\n"); 19 else 20 printf("No\n"); 21 } 22 } 23 return 0; 24 }
时间: 2024-10-23 06:01:21