• poj 3349 Snowflake Snow Snowflakes


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

    这道题太纠结了,卡了一个晚上,一开始题意理解错了,顺时针和逆时针没有看到,还有就是知道用哈希可是不知道怎样设置key的值来处理冲突,后来搜了一下解题报告然后说是取999983,然后就是用哈希链表,用到了指针,总是出错,错误太难找了,好不容易运行OK了,结果TLE,直接被伤,后来在discuss里有人说是用cin会超时,就改成了scanf,试了一下就A了,唉,这个纠结的啊。。。

    代码:

    View Code
      1 #include <iostream>
      2 #include<algorithm>
      3 #include<cstdio>
      4 #define prim 999983
      5 using namespace std;
      6 
      7 struct node
      8 {
      9     int data;
     10    int a[6];
     11    struct node *next;
     12 }hash[prim+1];
     13 int main()
     14 {
     15     int s[6];
     16     int n;
     17     int i,j,k,t;
     18     __int64 sum;
     19     int fflag=0;
     20     for(i=0;i<=prim;i++)
     21     {
     22         hash[i].next=NULL;
     23         hash[i].data=0;
     24     }
     25     scanf("%d",&n);
     26     for(i=1;i<=n;i++)
     27     {
     28         sum=0;
     29         for(j=0;j<6;j++)
     30         {
     31             scanf("%d",&s[j]);
     32             sum+=(s[j]%prim);
     33             sum%=prim;
     34         }
     35 
     36         if(fflag==0)
     37         {
     38             if(hash[sum].data!=0)
     39             {
     40                 struct node *q;
     41                 q=hash[sum].next;
     42                 for(k=0;k<6;k++)
     43                 {
     44                     int flag=1;
     45                     for(t=0;t<6;t++)
     46                     {
     47                         if(q->a[t]!=s[(k+t)%6])
     48                         {
     49                             flag=0;
     50                             break;
     51                         }
     52                     }
     53                     if(flag)
     54                     {
     55                         fflag=1;
     56                         break;
     57                     }
     58                 }
     59                 for(k=0;k<6;k++)
     60                 {
     61                     int flag=1;
     62                     for(t=0;t<6;t++)
     63                     {
     64                         if(q->a[t]!=s[(5-k-t+6)%6])
     65                         {
     66                             flag=0;
     67                             break;
     68                         }
     69                     }
     70                     if(flag)
     71                     {
     72                         fflag=1;
     73                         break;
     74                     }
     75                 }
     76 
     77                 while(q->next!=NULL&&fflag==0)
     78                 {
     79                     q=q->next;
     80                     for(k=0;k<6;k++)
     81                     {
     82                         int flag=1;
     83                         for(t=0;t<6;t++)
     84                         {
     85                             if(q->a[t]!=s[(k+t)%6])
     86                             {
     87                                 flag=0;
     88                                 break;
     89                             }
     90                         }
     91                         if(flag)
     92                         {
     93                             fflag=1;
     94                             break;
     95                         }
     96                     }
     97                     if(fflag)
     98                     break;
     99                     for(k=0;k<6;k++)
    100                     {
    101                         int flag=1;
    102                         for(t=0;t<6;t++)
    103                         {
    104                             if(q->a[t]!=s[(11-k-t)%6])
    105                             {
    106                                 flag=0;
    107                                 break;
    108                             }
    109                         }
    110                         if(flag)
    111                         {
    112                             fflag=1;
    113                             break;
    114                         }
    115                     }
    116                     if(fflag)
    117                     break;
    118 
    119                 }
    120                 if(fflag==0)
    121                 {
    122                     struct node *p;
    123                     p=(struct node *)malloc(sizeof(struct node));
    124                     p->data=i;
    125                     for(k=0;k<6;k++)
    126                     {
    127                         p->a[k]=s[k];
    128                     }
    129                     p->next=q->next;
    130                     q->next=p;
    131                 }
    132             }
    133             else
    134             {
    135                 struct node *p;
    136                 p=(struct node *)malloc(sizeof(struct node));
    137                 p->data=i;
    138                 for(k=0;k<6;k++)
    139                 {
    140                     p->a[k]=s[k];
    141                 }
    142                 p->next=hash[sum].next;
    143                 hash[sum].next=p;
    144                 hash[sum].data=1;
    145             }
    146 
    147         }
    148 
    149     }
    150     if(fflag==0)
    151     cout<<"No two snowflakes are alike."<<endl;
    152     else
    153     cout<<"Twin snowflakes found."<<endl;
    154     return 0;
    155 }
  • 相关阅读:
    冲不动刺。。
    第六次作业——团队作业
    LeetCode 638 Shopping Offers
    windows 64bit 服务器下安装32位oracle database 11g 问题集
    Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟
    Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
    HDU 1171 Big Event in HDU 多重背包二进制优化
    HDU 3401 Trade dp+单调队列优化
    HDU 5976 Detachment 打表找规律
    HDU 5973 Game of Taking Stones 威佐夫博弈+大数
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2868068.html
Copyright © 2020-2023  润新知