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 }

 

你可能感兴趣的:(poj)