列表

详情


NC254287. 小红的数组操作(easy version)

描述

请注意,本题和hard版本的唯一区别的数据范围的限制:本题保证x=1

小红拿到了一个数组,她可以进行若干次以下操作:
1.选择一个元素,花费p,使其加x
1.选择一个元素,花费q,使其减y

小红希望若干次操作后,数组的平均数是一个整数。你能帮小红求出最小的总代价吗?

输入描述

第一行输入五个正整数n,p,x,q,yn代表数组的大小,其余几个变量如题目描述所示。
第二行输入n个正整数a_i,代表数组的元素。
1\leq n\leq 10^5
x=1
1\leq a_i,y,p,q \leq 10^9

输出描述

如果无解,请输出-1。
否则输出一个整数,代表最小的总代价。

示例1

输入:

3 3 1 5 6
2 3 4

输出:

0

说明:

平均数为3,是整数,不需要任何操作。

示例2

输入:

4 4 1 7 3
2 3 2 2

输出:

12

说明:

操作3次:分别对第一个、第三个和第四个元素加1即可。

原站题解

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

pypy3 解法, 执行用时: 149ms, 内存消耗: 29664K, 提交时间: 2023-07-07 21:39:12

n,p,x,q,y = map(int,input().split())
a = map(int,input().split())

t = sum(a)
if t % n == 0:
    print(0)
else:
    ans = float('inf')
    i = 0
    while i <= n:
        ans = min(ans,i * q + p * ((n - (t - i * y) % n)%n))
        i += 1
    print(ans)

C++(clang++ 11.0.1) 解法, 执行用时: 49ms, 内存消耗: 456K, 提交时间: 2023-07-08 14:21:17

#include<iostream>
using namespace std;
long n,p,q,y,i,a,s,mi=2e12;
int main(){
	cin>>n>>p>>a>>q>>y;
	for(i=0;i<n;i++)cin>>a,s+=a;
	for(i=0;i<1575;i++) mi=min(mi,(n-(s-i*y)%n)%n*p+q*i);
	cout<<mi;
}

C++(g++ 7.5.0) 解法, 执行用时: 49ms, 内存消耗: 448K, 提交时间: 2023-07-08 23:20:33

#include<iostream>
using namespace std;
long n,p,q,y,i,j,a,s,mi=2e12;
int main(){
	cin>>n>>p>>a>>q>>y;
	for(;j<n;j++)cin>>a,s+=a;
	for(;i<1575;i++) mi=min(mi,(n-(s-i*y)%n)%n*p+q*i);
	cout<<mi;
}

上一题