POJ 3349 Snowflake Snow Snowflakes(乱搞)

题目链接

题意就是给出N个6个数,其中是否有两组相同。不知正解是怎么做的,我是按和排序,然后判相邻是否相同,2000+乱搞一下给水过了。

PS:貌似这个题目是让判两个雪花同构啊,我也不太清楚,就不深入研究了。。。数据水啊,难道我也看错题了。。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 using namespace std;
 6 struct node
 7 {
 8     int num[7];
 9     int sum;
10 } p[100001];
11 int cmp(const node &a,const node &b)
12 {
13     int i;
14     if(a.sum < b.sum)
15         return 1;
16     else if(a.sum > b.sum)
17         return 0;
18     for(i = 0; i <= 5; i ++)
19     {
20         if(a.num[i] < b.num[i])
21             return 1;
22         else
23             return 0;
24     }
25     return 1;
26 }
27 int main()
28 {
29     int n,i,j,z;
30     scanf("%d",&n);
31     for(i = 1; i <= n; i ++)
32     {
33         p[i].sum = 0;
34         for(j = 0; j <= 5; j ++)
35         {
36             scanf("%d",&p[i].num[j]);
37             p[i].sum += p[i].num[j];
38         }
39         sort(p[i].num,p[i].num+6);
40     }
41     sort(p+1,p+n+1,cmp);
42     z = 0;
43     for(i = 1; i <= n-1; i ++)
44     {
45         if(p[i].sum == p[i+1].sum)
46         {
47             for(j = 0; j <= 5; j ++)
48             {
49                 if(p[i].num[j] != p[i+1].num[j])
50                     break;
51             }
52             if(j == 6)
53             {
54                 z = 1;
55                 break;
56             }
57         }
58     }
59     if(z)
60     printf("Twin snowflakes found.\n");
61     else
62     printf("No two snowflakes are alike.\n");
63     return 0;
64 }

 

posted @ 2012-10-18 15:56  Naix_x  阅读(162)  评论(0编辑  收藏  举报