POJ2575 Jolly Jumpers C语言

View Code
 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #define MAXN (3000 + 100)
6
7 int flag[MAXN], num[MAXN];
8
9 void Fac(int n) {
10 memset(flag, 0, sizeof(flag));
11 memset(num, 0, sizeof(num));
12 int i, j, k;
13 __int64 f;
14 int res = 0;
15 for(i = 1; i <= n; ++i)
16 scanf("%d", &num[i]);
17 for(k = 2; k <= n; ++k) {
18 f = abs(num[k] - num[k - 1]); //不是 abs(abs(num[k]) - abs(num[k - 1]))题意理解错误啊!!!!
19 if(f < MAXN)
20 flag[f] = f;
21 }
22 for(j = 1; j < n; ++j)
23 if(!flag[j]) {
24 res = 1;
25 break;
26 }
27 if(res)
28 printf("Not jolly\n");
29 else
30 printf("Jolly\n");
31 }
32
33 int main() {
34 int n;
35 while(~scanf("%d", &n))
36 Fac(n);
37 return 0;
38 }

题目:http://poj.org/problem?id=2575

题目大意:n个数字,每对连续的两个数字,如果后数与前数差值的绝对值能覆盖1~(n-1)的每一个数,就输出Jolly,否则输出Not jolly

思路:水题啊,对每组相邻的数字做减法取绝对值,检查从1到n-1是否都存在就可以。先开始题意理解错误,以为是每个数的绝对值的差值,WA了无数次,读了好多遍题,终于发现问题了

提交情况:WA 7次, AC 1次

AC code:


 

posted @ 2011-07-29 11:46  cloehui  阅读(521)  评论(0编辑  收藏  举报