题意:
对于长度为n的数组a,从第一位开始如果可以整除x,就将x个a/x的结果加到数组最后,然后对下一位进行一样的操作,直到第x位不可以整除x,到此结束,然后计算此时数组的总和
题解:
最直接的方法就是按照题意模拟即可
然后稍微优化优化就行(不优化好像问题也不大)
代码:
#include <bits/stdc++.h> using namespace std; #define qc std::ios::sync_with_stdio(0); int a[100001]; int b[100001]; int main() { qc; cin.tie(0); int t; cin >> t; while (t--) { int n, k; long long ans = 0; cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i]; b[i] = 1; ans += a[i]; } int flag = 0; while (1) { for (int i = 0; i < n; i++) { if (a[i] % k != 0) { flag = 1; break; } else { a[i] = a[i] / k; b[i] = b[i] * k; ans += b[i] * a[i]; } } if (flag == 1) break; } cout << ans << endl; } }