P12167 [蓝桥杯 2025 省 C/Python A] 倒水

题目描述

小蓝有 nnn 个装了水的瓶子,从左到右摆放,第 iii 个瓶子里装有 aia_iai 单位的水。为了美观,小蓝将水循环染成了 kkk 种颜色,也就是说,第 iii 个瓶子和第 i+ki + ki+k 个瓶子里的水的颜色相同。

小蓝发现有的瓶子里的水太少了,因此他规定如果第 iii 个瓶子和第 jjj 个瓶子中的水颜色相同并且满足 i<ji < ji<j,即可将任意整数单位的水从第 iii 个水瓶倒出,倒入第 jjj 个水瓶中。小蓝想知道任意次操作后所有瓶子中的水的最小值 min⁡{ai}\min\{a_i\}min{ai} 最大可以是多少?

输入格式

输入的第一行包含两个正整数 n,kn, kn,k,用一个空格分隔。

第二行包含 nnn 个正整数 a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1,a2,,an,相邻整数之间使用一个空格分隔。

输出格式

输出一行包含一个整数表示答案。

输入输出样例 #1

输入 #1

7 3
8 5 5 2 2 3 4

输出 #1

3

说明/提示

样例说明

其中一种方案:

  • a1a_1a1a4a_4a4 倒入 333 单位;
  • a2a_2a2a5a_5a5 倒入 222 单位;
  • a3a_3a3a6a_6a6 倒入 111 单位;
    最终每个瓶子里的水:5,3,4,5,4,4,45, 3, 4, 5, 4, 4, 45,3,4,5,4,4,4,最小值为 333

评测用例规模与约定

  • 对于 40%40\%40% 的评测用例,1≤n,ai≤1001 \leq n, a_i \leq 1001n,ai100
  • 对于所有评测用例,1≤n,ai≤1000001 \leq n, a_i \leq 1000001n,ai1000001≤k≤n1 \leq k \leq n1kn

C++实现

//luogu P12167
#include <bits/stdc++.h>
using namespace std;
const int M=100010;
struct Node { //用于表示每种颜色的情况
    long long sum=0,cnt=0; //sum前缀和 cnt数量
} s[M];
long long n,k;
long long a[M],ans=1e9;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    for(int i=1; i<=n; i++) {
        cin>>a[i];
        s[i%k].sum+=a[i];
        s[i%k].cnt++;
        ans=min(s[i%k].sum/s[i%k].cnt,ans);
    }
    cout<<ans;
    return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐