zoukankan      html  css  js  c++  java
  • CF1114B Yet Another Array Partitioning Task

    CF1114B Yet Another Array Partitioning Task

    • 贪心,选择前 (k*m) 大的元素对答案进行贡献.
    • 每次划分时,从当前位置往后扫,扫到 (m) 个前 (k*m) 大的元素时就将该区间划出.
    • 时间复杂度为排序时间复杂度 (O(nlogn)) .
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define mp make_pair
    #define pii pair<int,int>
    inline int read()
    {
    	int x=0;
    	bool pos=1;
    	char ch=getchar();
    	for(;!isdigit(ch);ch=getchar())
    		if(ch=='-')
    			pos=0;
    	for(;isdigit(ch);ch=getchar())
    		x=x*10+ch-'0';
    	return pos?x:-x;
    }
    const int MAXN=2e5+10;
    int n,m,k;
    int a[MAXN];
    struct nd{
    	int x,y;
    }b[MAXN];
    int cmp(nd x,nd y)
    {
    	return x.x==y.x?x.y<y.y:x.x>y.x;
    }
    int c[MAXN],tp;
    ll ans=0;
    bool tag[MAXN];
    int stk[MAXN];
    int main()
    {
    	n=read(),m=read(),k=read();
    	for(int i=1;i<=n;++i)
    		{
    			a[i]=read();
    			b[i].x=a[i],b[i].y=i;
    		}
    	sort(b+1,b+1+n,cmp);
    	for(int i=1;i<=k*m;++i)
    		tag[b[i].y]=1;
    	int j=0;
    	for(int i=1;i<=k;++i)
    		{
    			int oj=j;
    			int L=oj+1,R=n-m*(k-i);
    			int p;
    			int cnt=0;
    			for(j=L;j<=R;j++)
    				{
    					if(tag[j])
    						++cnt,ans+=a[j];
    					if(cnt==m)
    						break;
    				}
    			stk[i]=j;
    		}
    	cout<<ans<<endl;
    	for(int i=1;i<k;++i)
    		printf("%d ",stk[i]);
    	return 0;
    }
    
  • 相关阅读:
    Linux基础学习(7)
    Linux基础学习(6)
    Linux基础学习(5)
    Linux基础学习(4)
    Linux基础学习(3)
    测试工程师面试题
    Postman实战
    接口测试
    HTTP请求结构与HTTP响应结构
    GET请求与POST请求的区别
  • 原文地址:https://www.cnblogs.com/jklover/p/10388860.html
Copyright © 2011-2022 走看看