4538: T1 程小盟教学生

题目描述

程小盟的学生丹丹永远分不清减法和求余,他觉得两种运算都是将数字变小,所以差不多。

于是程小盟给了他两道题目来帮助他分清这两种运算。第一道题目是这样的:给定一个包含 n  个数字的数组,每次你可以任选两个数字做减法运算,将这两个数字变成一个新数字放回 数组,经过 n − 1  次操作之后变成一个数字。你的目标是让最终的这一个数字变得尽可能 大,请问最大是多少。

当然,这道题只涉及减法,于是程小盟还有一道同样的题目(只有加粗的地方不同):给定 一个包含 n  个数字的数组,每次你可以任选两个数字做求余运算,将这两个数字变成一个 新数字放回数组,经过  n − 1  次操作之后变成一个数字。你的目标是让最终的这一个数字 变得尽可能大,请问最大是多少。

丹丹说:“都是 n  个数字变成  1  个数字,这两道题不是一样吗?” 看来丹丹又分不清了,你能帮帮他吗?

为了防止丹丹搞混数字,所以程小盟给出的 n  个数字各不相同。

输入格式

第一行输入一个正整数 n, k,表示共有 n  个数字,k  是题目编号,如果 k = 1,则你需要 完成“减法”这道题,k = 2  表示你需要完成“ 求余”这道题。

接下来一行输入 n  个数字,其中第 i   个数字为  ai (1  ≤   ai    ≤   106)

输出格式

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

样例输入content_copy

5 1
1 2 3 4 5

样例输出content_copy

13

提示/说明

样例  1  的  k  =  1,说明是一道减法问题,可以先用数组中的  1  减去  2,得到  −1,然后用 −1  减去  4,得到  −5,用  −5  减去  5,得到  −10,用  3  减去  −10,得到  13。

【样例 2  输入】

3 2

100 400 905

【样例 2  输出】

100

【说明】

样例  2   的  k  = 2,说明是一道求余问题,先用  905  求余  400,得到余数  505,然后用  100 求余  505,得到余数  100。方案不唯一,但是无法得到比  100   还大的数字了。

测试点编号

k

n

1

1

1

2

1

2

3

1

3

4

1

1000

5

1

100000

6

2

1

7

2

2

8

2

3

9 − 10

2

100000

 
#include<bits/stdc++.h>
using namespace std;

int a[100020];
int main()
{
	long long sum=0;
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		sort(a+1,a+n+1);
	if(k==1){
		if(n==1){
			cout<<a[1];
			return 0;
		}
		sum=a[2]-a[1];
		for(int i=3;i<=n;i++){
			sum+=a[i];
			
		}
	}else{
		sum=a[1];
	}
	cout<<sum;
    return 0;

}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值