1. 程式人生 > 實用技巧 >E1. Close Tuples (easy version) - CF1462E1

E1. Close Tuples (easy version) - CF1462E1

題意:

給出一個由n個數字組成的陣列,先讓你找出符合下列條件的子集的數量:
  • 每個子集包含的數字個數為m = 3
  • 這三個數字中的最大值減去最小值不超過k = 2

思路:

首先對給出的陣列進行排序,現在假設這個陣列為\(a\),這個子集為\(\{A_1, A_2, A_3\}\),那麼我們每次列舉\(A_1\),用一個指標記錄陣列中最後一個滿足\(a[p] - A_1\)的位置,那麼如果\(p\)\(A_1\)之間元素的個數n再加上1大於等於2,那麼答案的總數就加上\(C_n^2\)
這裡有個地方需要注意,由於指標p指向的位置只會越來越靠後,所以p不用每次都從\(A_1\)的位置開始找,只需要從上一次p的位置開始往後找就可以了。我不會說因為這個我T了好幾次的