/*
样例说明
(1)
输入:        输出: 
5 1           13
1 2 3 4 5
(1) 1-2=-1 (2) -1-4=-5 (3) -5-3=-8 (4) 5--8=13
综合:5-(1-(2+3+4)) = 5-1-(2+3+4) =  5-1+2+3+4+1-1=(1+2+3+4+5)-1-1
由此可知:n个数相减最大值=n个数相加-其中最小的数*2

(2)
输入:          输出: 
3 2             100 
100 400 905
(1) 905%400=105 (2) 100%105=100
综合:100%(905%400) = 100%905%400 = 100%400%905 = 100
由此可知:n个数取余求最大值=n个数中最小的那个

注意:还有一个坑
当n=1的时候,算出来的结果会是负数,这里要特判一下 

数据范围:
n最多就10^5,开int可以解决 
*/
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long a[100010],sum; 
int main(){
	freopen("divmod.in","r",stdin);
	freopen("divmod.out","w",stdout);
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>a[i];
		if(a[i]) sum+=a[i];
	}
	sort(a,a+n);//排序 找到最小值 
	if(n==1){//注意,这里是个坑!!! 
		cout<<a[0];
		return 0; 
	}
	if(k==1) cout<<sum-a[0]*2;//减法  
	else cout<<a[0];//求余 
		return 0;
	}

0 条评论

目前还没有评论...