zoukankan      html  css  js  c++  java
  • CF1456C. New Game Plus!

    题目大意

    n个数,有一个初始为0的计数器,每选一个数答案会加计数器的值,然后计数器加上该数

    有k次计数器归0的机会,求最大答案

    题解

    我是sb

    正数显然直接从大往小选,然后负数从小往大选,如果和小于0了就考虑使用归0

    k次归0等价于k+1个挡板,每个数x的贡献为x*到某个挡板的距离

    所以把负数排序从小往大贪心往挡板里放,再加上之前的和*max挡板长度即可

    code

     #include <bits/stdc++.h>
    #define fo(a,b,c) for (a=b; a<=c; a++)
    #define fd(a,b,c) for (a=b; a>=c; a--)
    #define ll long long
    //#define file
    using namespace std;
    
    int n,i,j,k,l,K;
    ll a[500001],s,ans;
    
    bool cmp(int a,int b) {return a>b;}
    
    int main()
    {
    	#ifdef file
    	freopen("c.in","r",stdin);
    	#endif
    	
    	scanf("%d%d",&n,&K);
    	fo(i,1,n) scanf("%lld",&a[i]);
    	sort(a+1,a+n+1,cmp);
    	
    	fo(i,1,n)
    	{
    		if (s+a[i]<0) break;
    		ans+=s,s+=a[i];
    	}
    	++K;l=i;j=0,k=0;
    	fd(i,n,l)
    	{
    		ans+=a[i]*k;
    		if (!j) ans+=s;
    		++j;
    		if (j==K) j=0,++k;
    	}
    	cout<<ans<<endl;
    	
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    error C2144
    Linux下STL使用
    GZip压缩的实例
    头文件类型的选择
    双重指针
    locate命令的使用
    有了malloc/free为什么还要new/delete !
    Mongdb windows下安装
    虚函数工作机制
    extern使用
  • 原文地址:https://www.cnblogs.com/gmh77/p/14057497.html
Copyright © 2011-2022 走看看