Codeforces 1114B (贪心)
2024-08-25 07:39:49
题面
分析
答案很好看出,显然是选最大的m*k个数
那么如何构造方案呢
我们把最大的m*k个数的位置标记为1,其他标记为0
从左到右维护一个ptr,记录有标记的数的个数,如果当前有m个有标记的数,则已经找到一个满足条件的区间分界点,break
这样的操作进行k-1次,由于ptr单调递增,时间复杂度为\(O(n)\)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<algorithm>
#define maxn 200005
using namespace std;
typedef long long ll;
int n,m,k;
struct node{
int x;
int id;
}a[maxn];
int mark[maxn];
int cmp(node a,node b){
return a.x>b.x;
}
vector<int>res;
map<int,int>cnt;
int main(){
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].x);
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
ll ans=0;
for(int i=1;i<=m*k;i++){
ans+=a[i].x;
mark[a[i].id]=1;
}
int ptr=1;
for(int i=1;i<k;i++){
int len=0;
while(ptr<=n){
if(mark[ptr]){
len++;
}
if(len==m) break;
ptr++;
}
res.push_back(ptr);
ptr++;
}
printf("%lld\n",ans);
for(int x : res){
printf("%d ",x);
}
}
最新文章
- 安装.NET FRAMEWORK 4.5安装进度条回滚之后发生严重错误 代码0x80070643
- iOS Application Life Cycle 应用程序生命周期
- NSMakeRange,substringWithRange,substringToIndex,substringFromIndex区别和联系
- 构建高性能web之路------mysql读写分离实战
- firefox下对ajax的onreadystatechange的支持情况分析及解决
- ref参数的用途
- 【ecos学习5】redboot 加载运行hello world
- C++多态性中基类析构函数声明为虚函数
- mac下brew install 报错
- 第19章 网络通信----UDP程序设计基础
- JVM 调优总结
- zlib 压缩输出缓冲区 overflow 问题
- 基于Redis实现分布式锁
- C#杀掉进程的方法
- pycharm 激活码
- centos7下mysql半同步复制原理安装测试详解
- Java实现FTP与SFTP文件上传下载
- js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
- 子数组最小值的总和 Sum of Subarray Minimums
- appium自动化测试(四)