zoukankan      html  css  js  c++  java
  • Codeforces

    https://codeforces.com/contest/1114/problem/B

    一开始叫我做,我是不会做的,我没发现这个性质。

    其实应该很好想才对,至少要选m个元素,其中m个作为最大值,从总体上考虑的话,要是能区分哪些元素处于前m*k大,就把他们m个一组直接划分就好了。

    魔理沙dalao说还不需要用sort来降序,用nth_element,我还在想怎么从序列中复原出标号,其实只需要在一起nth_element就好了。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    int n,m,k;
    pair<int,int> a[200005];
    int idx[200005];
    
    int main(){
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0;i<n;i++){
            scanf("%d",&a[i].first);
            a[i].second=i;
        }
        nth_element(a,a+m*k,a+n,greater<pair<int,int> >());
    
        ll sum=0;
        for(int i=0;i<m*k;i++){
            sum+=a[i].first;
            idx[i]=a[i].second;
        }
        printf("%lld
    ",sum);
        sort(idx,idx+m*k);
        for(int i=0;i<m*k;i++){
            if(i%m==0&&i){
                if(i!=m)
                    printf(" ");
                printf("%d",idx[i]);
            }
        }
        printf("
    ");
    }
  • 相关阅读:
    smarty语法
    combobox里面显示checkbox
    requirejs打包项目
    datagrid中用tooltip
    combobox默认值为第一个数据,修改为空值
    easyui-textbox高为0
    C++并发编程 异步任务
    C++并发编程 互斥和同步
    C++并发编程 thread
    C++智能指针
  • 原文地址:https://www.cnblogs.com/Yinku/p/10416190.html
Copyright © 2011-2022 走看看