Zero Remainder Array (數學,思維 , STL)
阿新 • • 發佈:2020-09-06
Zero Remainder Array
原題連結:傳送門
題目大意
給你一個數組有n個正數,你想讓這個陣列都變成可以整除 k 的元素,你可以執行兩種操作:
1.將ai + x ,然後 x ++
2.僅x++
一開始x = 0 ,求一共最少需要多少次操作可以使得滿足上述條件,且輸出最終的 x
分析
我們只需要記錄下來每個數t距離k的模數就可以了:
即 k - (t % k) , 如果這個模數已經出現過那麼我們需要再加上一個 k 來到下一個滿足要求的最小位置即可。 由於資料範圍很大我們可以利用map來進行儲存取模後的距離。
AC 程式碼
AC code
void slove() { int n , k;cin >> n >> k; map<ll,ll> m; ll x = 0 , t = 0 , flag = 0; for(int i = 0;i < n ;i ++) { cin >> t ; if(t % k == 0)continue; flag = 1; int y = k - (t % k); int val = m[y]; x = max(x ,(ll)val * k + y); m[y]++; } if(flag)cout << x + 1 << endl; else cout << 0 << endl; }