列表

详情


NC219243. uu与糖果

描述

uu是一个伟大的魔法师,她有n堆糖果。
由于她想得到更多的糖果,她可以施展无数次魔法,魔法的效果是她可以选择任意堆糖果,使得那堆糖果的数量增加h,如果有任何一堆糖果的数量在施展魔法后超过了k,uu就会永远失去释放魔法的能力。
uu想知道她最多能得到多少糖果?


输入描述

每组输入的第一行为n(1 <= n <= 2e6), k(1 <= k <= 1e9), h(0 <= h <= 1e9).

接下来一行为n个数字,代表每堆糖果的数量ai(1 <= ai <= 1e9)


输出描述

输出一个整数,代表uu能得到最多糖果的数量。

示例1

输入:

3 9 1
1 3 5

输出:

28

示例2

输入:

3 4 2
1 5 2

输出:

14

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 749ms, 内存消耗: 556K, 提交时间: 2023-03-28 20:35:02

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	ll n,k,h;
	cin>>n>>k>>h;
	ll a,ans=0;
	for(ll i=1;i<=n;i++)
	{
		cin>>a;
		if(h==0) ans+=a;
		else if(a>k) ans+=a;
		else ans+=a+(k-a)/h*h;
	}
	cout<<ans+h;
}

C(clang11) 解法, 执行用时: 246ms, 内存消耗: 376K, 提交时间: 2021-03-07 13:42:39

#include<stdio.h>
#include<string.h>
#define ll long long
int main()
{
	int n,k,h,a;
	scanf("%d%d%d",&n,&k,&h);
	ll ans=h;
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a);
		if(a>k||h==0) ans+=a;
		else ans+=a+(k-a)/h*h;
	}
	printf("%lld",ans);
}

Python3(3.9) 解法, 执行用时: 784ms, 内存消耗: 187752K, 提交时间: 2021-03-08 13:13:34

n, k, h = list(map(int, input().split()))
a = list(map(int, input().split()))
ans = sum(a)
if h==0:
    print(ans)
else:
    for i in a:
        s=k-i
        if s>0:
            ans+=(s//h)*h
    print(ans+h)

C++(clang++11) 解法, 执行用时: 527ms, 内存消耗: 15212K, 提交时间: 2021-04-19 19:54:38

#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,k,h,a;
	cin>>n>>k>>h;
	long long sum=0;
	while(n--) {
		cin>>a;
		sum+=a;
    if(h&&k>a){
      sum+=(k-a)/h*h; 
    }
	}
	cout<<sum+h;
}

上一题