P7874「SWTR-07」My rating is -32(easy version)题解

2021-09-24 18:59:13


题目解析:

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