P9160 题解

首先先读题。

读题后我们发现,因为题目中要求我们选的数要尽量大,并且选的数最多为 \(n-1\),我们当然是选的数越多越好,所以答案 \(T\) 的大小一定是 \(n-1\),同时,若要满足这 \(n-1\) 个数的总和最大,则将原数列排序后找到最小的重复的数并减掉它即可。

最后记得开 long long。

AC code

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
ll n,num[100001],ans,f=inf;
inline ll in() {
    char a=getchar();
	ll t=0,f=1;
	while(a<'0'||a>'9') {if (a=='-') f=-1;a=getchar();}
    while(a>='0'&&a<='9') t=(t<<1)+(t<<3)+a-'0',a=getchar();
    return t*f;yinw
}
signed main() {
	n=in();
	for (ll i=1;i<=n;++i) num[i]=in();
	sort(num+1,num+1+n);
	for (ll i=1;i<=n;++i) {
		if (num[i-1]==num[i]) f=min(f,num[i]);
		ans+=num[i];
	}
	if (f==inf) printf("%lld %lld",n-1,ans-num[n]);
	else printf("%lld %lld",n-1,ans-f);
	return 0;
}
posted @ 2023-06-06 17:33  Pwtking  阅读(9)  评论(0)    收藏  举报