From 6e7339bd38aa9d64257e399af5ed6036b3a7f021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Sat, 9 Mar 2024 19:56:57 +0800 Subject: [PATCH] 'commit' --- .../ZhongGaoJi/LanQiao15STEMA202401/5.cpp | 9 ++-- .../ZhongGaoJi/LanQiao15STEMA202401/hags.cpp | 54 ++++++++++++------- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/5.cpp b/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/5.cpp index 58c010c..dc25938 100644 --- a/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/5.cpp +++ b/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/5.cpp @@ -30,6 +30,7 @@ int main() { 3 10 1 1 + 3 5 1 6 @@ -41,8 +42,8 @@ int main() { int d = a[i] - avg; // 差值,注意:这个差值可能是正的,也可能是负的 total += abs(d); - int j = i + 1; - while (d != 0 && j <= n) { + for (int j = i + 1; j <= n; j++) { // 枚举i的所有后位的小朋友,如果当前i位上的小朋友需要糖果或者多出来糖果时,应该把 + // 多出来的糖果分给哪些小朋友,或者,少出来的糖果需要从哪些小朋友那里要过来 // 向后找比avg小的 if (d > 0 && a[j] < avg) { int x = min(d, avg - a[j]); @@ -52,12 +53,12 @@ int main() { } // 向后找比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[j] -= x; d += x; } - j++; + if (d == 0) break; } } cout << total << endl; diff --git a/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/hags.cpp b/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/hags.cpp index 0804fe8..acedda5 100644 --- a/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/hags.cpp +++ b/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/hags.cpp @@ -1,24 +1,40 @@ #include using namespace std; -const int N = 210; - -char a[N][N]; -int n, m; +const int N = 10010; +int a[N]; +int sum, avg, total; +int n; int main() { - string s; - cin >> s; - int len = s.size(); - for (int i = 1;; i++) { - if (len % i == 0 && len / i >= i) n = i; - if (len / i < i) break; + cin >> n; + for (int i = 1; i <= n; i++) { + cin >> a[i]; + sum += a[i]; } - m = len / n; - - for (int i = 0; i < n; i++) - for (int j = 0; j < m; j++) - a[i][j] = s[i * m + j]; - for (int j = 0; j < m; j++) - for (int i = 0; i < n; i++) - cout << a[i][j]; + if (sum % n) { + cout << -1 << endl; + exit(0); + } + avg = sum / n; + for (int i = 1; i <= n; i++) { + int d = a[i] - avg; + 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; -} +} \ No newline at end of file