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 }