小a是乙個中度強迫症患者,每次做陣列有關的題目都異常難受,他十分希望陣列的每乙個元素都一樣大,這樣子看起來才是最棒的,所以他決定通過一些操作把這個變成乙個看起來不難受的陣列,但他又想不要和之前的那個陣列偏差那麼大,所以他每次操作只給這個陣列的其中n-1個元素加1,但是小a並不能很好的算出最優的解決方案,如果你能幫他解決這個問題,小a就能送你乙個氣球
第一行乙個整數t(t<=100),表示組數對於每組資料有乙個n,表示序列的長度(0< n <100000)
下面一行有n個數,表示每個序列的值(0示例1
複製
1複製31 2 3
3 4一開始對於 1 2 3 4這個樣例就不知道如何變成相同的,因為是n-1個元素都加1,很多不應該增大的也變大了,很難操控,想想最接近答案的是什麼:三個相同的,乙個不同的(對於1 2 3 4這個樣例來說的),並且很重要的一點是三個相同的要比不相同的小,下一步就是給三個相同的不停的加一加一,直到都相同。
後來找到了規律,看看1 2 3 4怎麼找
1 2 3 4
2 3 3 5
3 4 3 6==3 3 4 6
4 4 4 7//我們找的就是這個
5 5 5 7
6 6 6 7
7 7 7 7//成功
也就是說,倒數第二個不加一,然後·一直保持序列有序,共進行了六次,為什麼要這樣加呢?最後乙個一直增大我們不怕,我們主要想要前n-1個元素相等,所以前面值小的元素要多加幾次1,相對來說大的就最好少加幾次,前n-1個最大的就是第n-1個元素,所以每次它不加一,然後就發現,操作的次數等於a[1]-a[0]+a[2]-a[0]+a[3]-a[0];,就是這個規律吧,讓我找了一晚上
#include#includeusing namespace std;
int a[100004];
int main()
sort(a,a+n);
for(int j=1;j有什麼問題歡迎提問哈
強迫症的序列 牛客網 思維
輸入 第一行乙個整數t t 100 表示組數 對於每組資料有乙個n,表示序列的長度 0 n 100000 下面一行有n個數,表示每個序列的值 0 ai 1000 輸出 兩個數 第乙個數表示最小的操作步數 第二個數經過若干步以後的陣列元素是什麼 例如 1 31 2 3 輸出 3 4 這裡有乙個很奇怪的...
強迫症的序列
小a是乙個中度強迫症患者,每次做陣列有關的題目都異常難受,他十分希望陣列的每乙個元素都一樣大,這樣子看起來才是最棒的,所以他決定通過一些操作把這個變成乙個看起來不難受的陣列,但他又想不要和之前的那個陣列偏差那麼大,所以他每次操作只給這個陣列的其中n 1個元素加1,但是小a並不能很好的算出最優的解決方...
J 強迫症的序列
題目描述 小a是乙個中度強迫症患者,每次做陣列有關的題目都異常難受,他十分希望陣列的每乙個元素都一樣大,這樣子看起來才是最棒的,所以他決定通過一些操作把這個變成乙個看起來不難受的陣列,但他又想不要和之前的那個陣列偏差那麼大,所以他每次操作只給這個陣列的其中n 1個元素加1,但是小a並不能很好的算出最...