日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj 3349 雪花

發布時間:2025/4/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 3349 雪花 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:每片雪花有 6 個角長度的值,對于不同的雪花而言,這些值可能被反轉,并且開頭的長度未必是一致的

例如 1 2 3 4 5 6和 4 3 2 1 6 5,雖然他們表面上不同,但是經過反轉和偏移以后,就是相同的雪花。?

在輸入數據中如果有相同的雪花,則輸出yes,否則輸出no。


這個題目為什么適合用哈希表呢,個人覺得主要一個原因是數據不好排序,因為六片花瓣順序被打亂了,如果數據不能有效的排序,自然就不能有效的檢索。

但是這些數據雖然 卻可以比較容易找到一個哈希函數,將 被打亂的相同數據 映射到同一個哈希值上。 然后在針對小規模的數據做檢索,能很高的提高效率。

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define mod 99983 using namespace std; struct node {node(): next(NULL){}int snow[6];struct node *next; }hash[100001]; int a[6]; void add(int key) {node *p=new node;for(int i=0;i<6;++i)p->snow[i]=a[i];p->next=hash[key].next;hash[key].next=p; } bool find(int key) {node *p=hash[key].next;while(p!=NULL){for(int i=0;i<6;++i)if((a[0]==p->snow[i]&&a[1]==p->snow[(i+1)%6]&&a[2]==p->snow[(i+2)%6]&&a[3]==p->snow[(i+3)%6]&&a[4]==p->snow[(i+4)%6]&&a[5]==p->snow[(i+5)%6])||a[0]==p->snow[i]&&a[1]==p->snow[(i+5)%6]&&a[2]==p->snow[(i+4)%6]&& a[3]==p->snow[(i+3)%6]&&a[4]==p->snow[(i+2)%6]&&a[5]==p->snow[(i+1)%6])return true;p=p->next;}return false; } int main() {int n;//int key=0;還記得這天中午因為key的苦惱嗎2017.11.23 13:31bool ok=false;cin>>n;memset(hash,NULL,sizeof(hash));for(int i=0;i<n;++i){int key=0;for(int j=0;j<6;++j){scanf("%d",&a[j]);//用cin會超時key+=a[j];}key%=mod;if(find(key))ok=true;elseadd(key);}if(ok)printf("Twin snowflakes found.\n");elseprintf("No two snowflakes are alike.\n");return 0; }

總結

以上是生活随笔為你收集整理的poj 3349 雪花的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。