题意:有n个石头,编号从1到n,礼物藏在编号为m的石头上,第i次跳2*1-1格,可以向前跳也可以向后跳,问是否能拿到礼物。
思路:简单的DFS。重点是有规律,就是n>=50时,不管m为何值,都是可以抵达m石头,所以只要搜索50以下就可以了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n, m, flag;
void dfs(int cur, int d) {
if (flag)
return;
if (cur == m) {
flag = 1;
return;
}
int step = 2 * (d + 1) - 1;
if (cur + step <= n && cur + step >= 1) {
dfs(cur + step, d + 1);
}
if (cur - step >= 1 && cur - step <= n) {
dfs(cur - step, d + 1);
}
return;
}
int main() {
while (scanf("%d %d", &n, &m) != EOF) {
if (m == 0 && n == 0)
break;
if (n >= 50) {
printf("Let me try!\n");
continue;
}
flag = 0;
dfs(1, 1);
if (flag)
printf("Let me try!\n");
else
printf("Don't make fun of me!\n");
}
return 0;
}UVA10120 - Gift?!,布布扣,bubuko.com
原文:http://blog.csdn.net/u011345461/article/details/38662561