1. 程式人生 > >NYOJ 130 相同雪花(雜湊入門)

NYOJ 130 相同雪花(雜湊入門)

相同的雪花
時間限制:1000 ms | 記憶體限制:65535 KB
難度:4
描述
You may have heard that no two snowflakes are alike. Your task is to write a program to determine whether this is really true. Your program will read information about a collection of snowflakes, and search for a pair that may be identical. Each snowflake has six arms. For each snowflake, your program will be provided with a measurement of the length of each of the six arms. Any pair of snowflakes which have the same lengths of corresponding arms should be flagged by your program as possibly identical.
輸入
The first line of the input will contain a single interger T(0

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
const int MAXN=100005;
const int MOD=5000;
int snow[MAXN][6];
vector<int>Hash[MOD];//向量實現雜湊表的儲存
bool isSame(int a, int
b) { for(int i=0;i<6;i++){ if(/*順時針方向*/ (snow[a][0] == snow[b][i] && snow[a][1] == snow[b][(i+1)%6] && snow[a][2] == snow[b][(i+2)%6] && snow[a][3] == snow[b][(i+3)%6] && snow[a][4] == snow[b][(i+4
)%6] && snow[a][5] == snow[b][(i+5)%6]) || /*逆時針方向*/ (snow[a][0] == snow[b][(i+5)%6] && snow[a][1] == snow[b][(i+4)%6] && snow[a][2] == snow[b][(i+3)%6] && snow[a][3] == snow[b][(i+2)%6] && snow[a][4] == snow[b][(i+1)%6] && snow[a][5] == snow[b][(i+0)%6]) )return true; } return false; } int T,N,ok; int t; int main(){ scanf("%d",&T); while(T--){ ok=0; scanf("%d",&N); for(int i=0;i<MOD;i++){ Hash[i].clear(); } for(int i=0;i<N;i++){ int tot=0; for(int j=0;j<6;j++){ scanf("%d",&t); tot+=t; snow[i][j]=t; } tot%=MOD; Hash[tot].push_back(i); } for(int i=0;i<MOD;i++){ if(ok)break; if(Hash[i].size()<2)continue; for(int j=0;j<Hash[i].size()-1;j++){ for(int k=j+1;k<Hash[i].size();k++){ if(isSame(Hash[i][j],Hash[i][k])){ ok=1;break; } } } } if(ok)printf("Twin snowflakes found.\n"); else printf("No two snowflakes are alike.\n"); } return 0; }

相關推薦

NYOJ 130 相同雪花入門

相同的雪花 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 You may have heard that no two snowflakes are alike. Your task is to write a prog

散列表+衝突的解決方法

轉載http://www.nowamagic.net/academy/detail/3008060 1散列表 1簡單來說就是給一個key,就可以找到對應的key的儲存位置,就像身份證對應一個人一樣 儲存位置 = f(key) 2hashMap的key就是用到散列表 1.1雜湊衝突

兩數之和解法

給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的 兩個 整數。 你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。 示例: 給定 nums = [2, 7, 11, 15], tar

18.12.5 發現他,抓住他並查集&正方形

發現他,抓住他(10分) 題目內容: 一個城市中有兩個犯罪團伙A和B,你需要幫助警察判斷任意兩起案件是否是同一個犯罪團伙所為,警察所獲得的資訊是有限的。假設現在有N起案件(N<=100000),編號為1到N,每起案件由團伙A或團伙B所為。你將按時間順序獲得M條資訊(M<=100000

散列表及其儲存結構和特點詳解

順序儲存的結構型別需要一個一個地按順序訪問元素,當這個總量很大且我們所要訪問的元素比較靠後時,效能就會很低。散列表是一種空間換時間的儲存結構,是在演算法中提升效率的一種比較常用的方式,但是所需空間太大也會讓人頭疼,所以通常需要在二者之間權衡。我們會在之後的具體演算法章節中得到更多的領悟。 什麼是散列表 讓我

圖文詳解HashTree

引 在各種資料結構(線性表、樹等)中,記錄在結構中的相對位置是隨機的。因此在機構中查詢記錄的時需要進行一系列和關鍵字的比較。這一類的查詢方法建立在“比較”的基礎上。查詢的效率依賴於查詢過程中所進行的比較次數。 之前我們介紹的各種基於比較的樹查詢演算法,這些查詢演算法的效率

Redis常用操作-------Hash

1.HDEL key field [field ...] 刪除雜湊表 key 中的一個或多個指定域,不存在的域將被忽略。 在Redis2.4以下的版本里, HDEL 每次只能刪除單個域,如果你需要在一個原子時間內刪除多個域,請將命令包含在 MULTI

資料結構與演算法25-散列表查詢

散列表查詢(雜湊表) 我們只需要能過某個函式f,使得儲存位置=f(關鍵字) 那樣我們可以通過查詢關鍵字不需要比較就可獲得需要的記錄的儲存位置。這就是一種新的儲存技術-----雜湊技術。 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立一個確定的對應關係f,使得每個關鍵字key對應一個儲存位

查詢——圖文詳解HashTree

引 在各種資料結構(線性表、樹等)中,記錄在結構中的相對位置是隨機的。因此在機構中查詢記錄的時需要進行一系列和關鍵字的比較。這一類的查詢方法建立在“比較”的基礎上。查詢的效率依賴於查詢過程中所進行的比較次數。 之前我們介紹的各種基於比較的樹查詢演算法,這些查詢演算法的效率都將隨著資料記錄數的增長而下降

NOJ 48 小明的調查作業

描述小明的老師佈置了一份調查作業,小明想在學校中請一些同學一起做一項問卷調查,聰明的小明為了實驗的客觀性,想利用自己的計算機知識幫助自己。他先用計算機生成了N個1到1000之間的隨機整數(0<N≤1000),對於其

散列表查詢的基本操作 完整程式碼

表和二叉樹的排序,是利用元素之間的關係,逐個查詢,或按一定的規律查詢。 而散列表(雜湊表),元素之間沒有關係,它是利用了元素與儲存地址之間的關係。 說白了,就是利用雜湊函式建立 元素->地址

資料結構學習筆記七演算法

一、什麼是雜湊演算法        將任意長度的任意二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制值串就是雜湊值。 雜湊演算法需要滿足的要求:

Qt5中自動匯入檔案生成ScatterChart

最近學習了QT中的Qchart的用法,想自動生成雜湊圖ScatterChart,同時自動讀取.txt、.dat檔案來獲得資料座標,以下是生成的一個小的demo檔案。 首先在.pro 中新增: QT += charts .h檔案如下: #ifndef CHARTVIEW

查詢——圖文翔解HashTree

引 在各種資料結構(線性表、樹等)中,記錄在結構中的相對位置是隨機的。因此在機構中查詢記錄的時需要進行一系列和關鍵字的比較。這一類的查詢方法建立在“比較”的基礎上。查詢的效率依賴於查詢過程中所進行的比較次數。 之前我們介紹的各種基於比較的樹查詢演算法,這些查詢演算法的效率都將隨著資料記錄數的增長而下降。僅

POJ 1200 Crazy Search演算法【模板】

Many people like to solve hard puzzles some of which may lead them to madness. One such puzzle could be finding a hidden prime number i

[C++]資料結構:散列表函式構造、處理衝突

        關鍵字{12,25, 38, 15, 16, 29, 78, 67, 56, 21, 22, 47 } , 對應後位置是 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}。 不過這種方法很容易產生衝突(如果關鍵字餘數大部分相同)。一般地,散列表長為m, 通常p

資料結構之散列表

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。 理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存地址,雜湊查詢(Hashed Search)是

java資料結構和演算法09

  樹的結構說得差不多了,現在我們來說說一種資料結構叫做雜湊表(hash table),雜湊表有是幹什麼用的呢?我們知道樹的操作的時間複雜度通常為O(logN),那有沒有更快的資料結構?當然有,那就是雜湊表;   1.雜湊表簡介   雜湊表(hash table)是一種資料結構,提供很快速的插

漫畫 | 什麼是散列表

建立與輸入陣列相等長度的新陣列,作為直接定址表。兩數之和的期望是Target,將Target依次減輸入陣列的元素,得到的值和直接定址表比較,如果定址表存在這個值則返回;如果不存在這個值則將輸入陣列中的元素插入定址表,再進行輸入陣列中的下一個元素。 再進一步優化可以將輸入陣列直接作為直接定址

nyoj 130 相同雪花

用雜湊表直接新增,查詢就行了 #include<stdio.h> #include<iostream> #include<cstring> #include<vector> using namespace std; #de