非整除集合

今每天光明媚,在牛客網上刷到了一個關於挖掘數的餘數性質的好題,特特記錄之!數組

問題說明:給定一個由正整數組成的集合S,找出一個最大的子集合S·,使得S·中任意兩個數字的和都不能被K整除。例如S=「10,10,12,19,22,24,25」,K=4。S·的可能取值爲「10,12,25」或者「19,22,25」等,S·最多隻能取3個數。spa

輸入描述:

輸入爲兩行,第一行兩個數字,分別表示集合S的元素數量N和K。第二行爲N個數字,分別是S的各個元素值。

1<N<1e5

1<K<100

1<S[i]<1e9

輸出描述:

輸出爲一個數字,集合S·的最大長度。
我一開始是並無什麼想法的。在瀏覽大神們的代碼時我發現了這一種作法。它的精神我儘可能地用個人一些理解來歸納:將集合中的數有序存儲於一個向量中。在創建一個依附於此向量的
每個元素的關於k的餘數向量數組。統計各餘數的出現次數。接下來一個循環判斷遍歷餘數向量數組問題得以解決。固然,這個遍歷語句頗有一種對稱形的美感。它基於的關於數的性質是:........
(好吧,我還尚且不能內化語言描述出來,但願有沒有大神能解釋一下他的性質!)

運行結果是:


 對啦,題目的敘述仍是有一些問題的。關於集合的性質有一點是要去澄明的:集合之元素各各互異。3d

關於數學知識的一些敘述呈現於此:blog

對於模m同餘的數組成由模m決定的數類。並且只要在式子mq+r裏讓q經過全部的整數,咱們就獲得這個類裏的全部數。數學

一個類的任意數,對於同一個類的全部數而言,都叫作模m的剩餘。當q=0時,咱們獲得的剩餘正好等於餘數r,叫作非負的最小剩餘。循環

從每一個類取一個剩餘,咱們獲得模m的一個徹底剩餘組。遍歷

相關文章
相關標籤/搜索