main
黄海 1 year ago
parent c411dd6d16
commit 6e7339bd38

@ -30,6 +30,7 @@ int main() {
3 3
10 1 1 10 1 1
3 3
5 1 6 5 1 6
@ -41,8 +42,8 @@ int main() {
int d = a[i] - avg; // 差值,注意:这个差值可能是正的,也可能是负的 int d = a[i] - avg; // 差值,注意:这个差值可能是正的,也可能是负的
total += abs(d); total += abs(d);
int j = i + 1; for (int j = i + 1; j <= n; j++) { // 枚举i的所有后位的小朋友,如果当前i位上的小朋友需要糖果或者多出来糖果时应该把
while (d != 0 && j <= n) { // 多出来的糖果分给哪些小朋友,或者,少出来的糖果需要从哪些小朋友那里要过来
// 向后找比avg小的 // 向后找比avg小的
if (d > 0 && a[j] < avg) { if (d > 0 && a[j] < avg) {
int x = min(d, avg - a[j]); int x = min(d, avg - a[j]);
@ -52,12 +53,12 @@ int main() {
} }
// 向后找比avg大的 // 向后找比avg大的
if (d < 0 && a[j] > avg) { if (d < 0 && a[j] > avg) {
int x = min(-d, a[j] - avg); int x = min(abs(d), a[j] - avg);
a[i] += x; a[i] += x;
a[j] -= x; a[j] -= x;
d += x; d += x;
} }
j++; if (d == 0) break;
} }
} }
cout << total << endl; cout << total << endl;

@ -1,24 +1,40 @@
#include <bits/stdc++.h> #include <bits/stdc++.h>
using namespace std; using namespace std;
const int N = 210; const int N = 10010;
int a[N];
char a[N][N]; int sum, avg, total;
int n, m; int n;
int main() { int main() {
string s; cin >> n;
cin >> s; for (int i = 1; i <= n; i++) {
int len = s.size(); cin >> a[i];
for (int i = 1;; i++) { sum += a[i];
if (len % i == 0 && len / i >= i) n = i;
if (len / i < i) break;
} }
m = len / n; if (sum % n) {
cout << -1 << endl;
for (int i = 0; i < n; i++) exit(0);
for (int j = 0; j < m; j++) }
a[i][j] = s[i * m + j]; avg = sum / n;
for (int j = 0; j < m; j++) for (int i = 1; i <= n; i++) {
for (int i = 0; i < n; i++) int d = a[i] - avg;
cout << a[i][j]; total += abs(d);
int j = i + 1;
while (d != 0 && j <= n) {
if (d > 0 && a[j] < avg) {
int x = min(d, avg - a[j]);
a[i] -= x;
a[j] += x;
d -= x;
}
if (d < 0 && a[j] > avg) {
int x = min(-d,a[j]-avg);
a[i] += x;
a[j] -= x;
d += x;
}
j++;
}
}
cout << total << endl;
return 0; return 0;
} }
Loading…
Cancel
Save