NYOJ130 相同的雪花

2021-06-13 22:59:33 字數 970 閱讀 7255

題目分析:

很明顯這道題的資料量很大,所以不可能進行兩兩的判斷,所以需要將可能相同的資料對映到乙個集合中,然後在可能相同的資料集合中進行兩兩比較。如果兩組資料六個數的和相同,那麼就有可能是相同的雪花。但是六個數的和可能比較大,怎麼把它們分開呢,那只能建立乙個hash表,然後通過mod乙個比較大的素數來分到相應的集合裡面。

關於這個比較大的素數怎麼取呢?

六個數的和最大是6*10^7,如果我們允許每個集合最多有100個資料(如果太多的話,比較的時間就會比較長)。那麼最大的和為6*10^5。但是不可能按照最大和來取這個素數。大概小十倍左右。具體取法可能需要試一下。

#include#includeconst int n = 19373;

int hash[n][100][6];

int nlen[n];

bool judge(int *a, int *b)

if(k >= 6)

return true;

//逆時針

for(k = 0; k < 6; ++k)

if(k >= 6)

return true;

} return false;

}int main()

sum %= n;

for(i = 0; i < 6; ++i)

hash[sum][nlen[sum]][i] = a[i];

++nlen[sum];

} for(k = 0; k < n; ++k)

}if(flag)//找到乙個就可以跳出迴圈了

break;

}if(flag)

break;

} if(flag)

printf("twin snowflakes found.\n");

else

printf("no two snowflakes are alike.\n");

}}

nyoj 130 相同的雪花

題目連線 題意 乙個雪花有六個角,每個角對應乙個值,給出n個雪花,問能不能是否存在兩片相同的雪花 給出的角可能是逆序的 解題思路 由於有很多雪花,因此資料很大,如果單純的進行直接查詢的話肯定會te,因此可以用雜湊的方法,其中雜湊函式可以用每個雪花的各個角的和來定義 然後對映到相應的位置。一旦找到就不...

NYOJ 130 相同的雪花 雜湊

思路 以每組的和為key對每片雪花進行雜湊,然後從和相等的雪花裡進行匹配。注意雪花的匹配順序可以順時針也可以逆時針 include include include include using namespace std const int maxn 100001 最大數量 const int mod...

100 相同的樹

鏈結 給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。示例 1 輸入 1 1 2 3 2 3 1,2,3 1,2,3 輸出 true示例 2 輸入 1 1 2 2 1,2 1,null,2 輸出 false示例 3 輸入 1 1 2 ...