题目解析:
小A有k个号要发贴,总共n条帖子,不能把连续的两条帖子发在同一个号上
要求每个号发的第一条的安全指数相加最高
思路:
先把前两条发出去,然后找到剩下的前k-2大的帖子相加就可以
因为剩下的如果是在前k大的里面,就可以拿别的号发,不是的话就用前两个号发
因为这题输入比较大,所以用上快读
AC代码:
#include<bits/stdc++.h>
#define LL long long
#define LD long double
#define rep(a,b,c) for(int a=b;a<=c;++a)
inline int read() //快读模板
{
int num=0;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
{
num=(num<<1)+(num<<3)+ch-'0';
ch=getchar();
}
return num;
}
const int N=10010; //2≤n≤10000
using namespace std;
int main()
{
LL a[N],ans;
int t,T,n,k;
cin>>t>>T;
rep(i,1,T)
{
cin>>n>>k;
rep(j,1,n)
a[j]=read();//调用快读
ans=a[1]+a[2];//先把前两条发出去
a[1]=-1;//把a[1]和a[2]设到最小,方便下面快排
a[2]=-1;
sort(a+1,a+1+n);//快排
rep(ccy,1,k-2)//找到剩下的前k-2大的帖子相加
ans+=a[n+1-ccy];
cout<<ans<<endl;
}
return 0;
}