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;
}

浙公网安备 33010602011771号