蓝桥杯 2025 省 C 倒水

题目描述

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

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

输入格式

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

第二行包含 n 个正整数 a1​,a2​,⋯,an​,相邻整数之间使用一个空格分隔。

输出格式

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

输入输出样例

输入 #1复制

7 3
8 5 5 2 2 3 4

输出 #1复制

3

说明/提示

样例说明

其中一种方案:

  • a1​ 往 a4​ 倒入 3 单位;
  • a2​ 往 a5​ 倒入 2 单位;
  • a3​ 往 a6​ 倒入 1 单位; 最终每个瓶子里的水:5,3,4,5,4,4,4,最小值为 3。

评测用例规模与约定

  • 对于 40% 的评测用例,1≤n,ai​≤100;
  • 对于所有评测用例,1≤n,ai​≤100000,1≤k≤n。

前天比赛的时候想错了,看对题目后写的那份正确率还不如看错题目写的那个;

我想成每次删去头了,但明显加上尾更对;

#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define F first
#define S second
#define pii pair<int,int>
using namespace std;
const int N=1e5+10;
void solve(){
	int n,k,ans=N,sum,f;
	cin>>n>>k;
	int a[n];
    for(int i=0;i<n;++i){
        cin>>a[i];
    }
    for(int i=0;i<k;++i){
        sum=a[i];//sum记总量  
        int cnt=1;//个数 
        ans=min(ans,a[i]);//防最小数在开头
        for(int j=i+k;j<n;j+=k){
            cnt++;
            sum+=a[j];
            if(a[j]<ans){
            	ans=min(ans,sum/cnt);   
            }
        }
    }
    cout<<ans;
}
signed main() {
	IOS
	int t=1;
	while(t--)solve();
	return 0;
}

其实感觉还有点问题,但找不到样例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值