第十四届蓝桥杯青少组C++选拔赛[2023.1.15]第二部分编程题(4 、移动石子)

参考程序1:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main() {
    int N;
    cin >> N;
    vector<int> stones(N);
    int sum = 0;
    for (int i = 0; i < N; i++) {
        cin >> stones[i];
        sum += stones[i];
    }
    int target = sum / N; // 每个篮子的平均值
    int answer = INT_MAX; // 最终最小搬运次数
    // 枚举所有可能的起点
    for (int start = 0; start < N; start++) {
        // 把圆圈旋转,使 start 位置当作起点
        vector<int> rotated(N);
        for (int i = 0; i < N; i++) {
            rotated[i] = stones[(start + i) % N];
        }
        int moves = 0;
        vector<int> temp = rotated;
        // 按线性方式从左到右转移石子
        for (int i = 0; i < N - 1; i++) {
            int diff = temp[i] - target; 
            temp[i + 1] += diff;        
            moves += abs(diff);        
        }
        // 更新最小值
        answer = min(answer, moves);
    }
    cout << answer << endl;
    return 0;
}

参考程序2:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; // 或者 using ll = long long;

int main() {
    int N;
    cin >> N;
    vector<ll> a(N);
    ll sum = 0;
    for (int i = 0; i < N; ++i) {
        cin >> a[i];
        sum += a[i];
    }

    ll target = sum / N;

    // 构造前缀欠账 S,包含 S0 = 0,一共 N 个值 S[0..N-1]
    vector<ll> S(N);
    S[0] = 0;
    for (int i = 1; i < N; ++i) {
        S[i] = S[i-1] + (a[i-1] - target);
    }

    // 找中位数(使用排序后直接取中间值)
    vector<ll> tmp = S;
    sort(tmp.begin(), tmp.end());
    ll median = tmp[N/2];

    // 计算最小步数:sum |S[i] - median|
    ll moves = 0;
    for (ll x : S) moves += llabs(x - median);

    cout << moves << '\n';
    return 0;
}
相关推荐
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
weilx12344 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼4 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛4 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark4 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·4 天前
C++ 萌新语法入门篇
c++·算法比赛
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集