diff --git a/TangDou/.vscode/settings.json b/TangDou/.vscode/settings.json index 60010b7..07f71e6 100644 --- a/TangDou/.vscode/settings.json +++ b/TangDou/.vscode/settings.json @@ -119,4 +119,5 @@ "span": "cpp", "stop_token": "cpp" }, + "C_Cpp.errorSquiggles": "disabled", } \ No newline at end of file diff --git a/TangDou/LanQiaoBei/LanQiao14STEMA202301/BC3.cpp b/TangDou/LanQiaoBei/LanQiao14STEMA202301/BC3.cpp new file mode 100644 index 0000000..b28c192 --- /dev/null +++ b/TangDou/LanQiaoBei/LanQiao14STEMA202301/BC3.cpp @@ -0,0 +1,36 @@ +#include +using namespace std; +const int N = 120; +int a[N], b[N]; +const int INF = 0x3f3f3f3f; +/* +3 +2 6 7 +*/ +int n, sum, avg; +int main() { + cin >> n; + for (int i = 0; i < n; i++) { + cin >> a[i]; + sum += a[i]; + a[i + n] = a[i]; // 破环成链, 0 1 2-->a[3]=a[0],a[4]=a[1],a[5]=a[2] + } + avg = sum / n; // 平均数 + int mi = INF; // 最少次数,给初始值最大 + + for (int i = 0; i < n; i++) { // 按每个石子堆为起点 + for (int j = 0; j < n; j++) b[j] = a[i + j]; // 从原始的破环成链数组中拷贝出来现在的临时数组 + + int cnt = 0; + for (int j = 0; j < n - 1; j++) { + cnt += abs(b[j] - avg); // 需要调整几个石子到下一个石子堆 + b[j + 1] += b[j] - avg; // 下一个石子堆接着这些石子 + b[j] = avg; // j调整为平均值,其实这句没有发挥作用,可省略 + } + // 以第i个石子为起点的讨论结束,判断是不是我们需要的最优解 + mi = min(mi, cnt); + } + + cout << mi << endl; + return 0; +} \ No newline at end of file