Codeforces 723c [贪心][乱搞]
/*
不要低头,不要放弃,不要气馁,不要慌张。
题意:
给一个n和m。
第二行给n个数。
每次操作可以把n个数中的任何一个数替代为别的数,问最少的操作次数使得1.2.3.4.5...m中的数出现的次数的最小值尽可能大。
输出这个数,输出最少操作次数,输出替换后的数组。
思路:
1.显然,最小值尽可能大,这个值是可以确定的,即n/m;
2.还有,为使得操作次数最少,我们发现最多有n%m个没有贡献的无关值无需更改...
3.这题实际上可以n^2复杂度,因为n只有2000.但是本渣作死,写了nloglog的复杂度...
n^2复杂度的话循环检查就好...
我是用一个map<int,multiset<int> >将数字的位置记录下来...然后种种... 坑:
if else if else这种逻辑写崩了==仍然很弱的我
逻辑逻辑逻辑 */ #include<bits/stdc++.h>
using namespace std;
int jilu[],all[];
map<int,multiset<int> >mp;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",jilu+i);
all[i]=jilu[i];
mp[jilu[i]].insert(i);
}
int k=n/m;
int w=n%m;
map<int,multiset<int> >::iterator it;
multiset<int>cun;
multiset<int>que;
for(it=mp.begin();it!=mp.end();it++){
if(it->first <= m){
while(it->second.size()<k){
if(cun.size()){
int ss=*cun.begin();
cun.erase(cun.begin());
jilu[ss]=it->first;
it->second.insert(ss);
}
else{
que.insert(it->first);
it->second.insert();
}
}
while(it->second.size() > k){
if(w>){
w--;
it->second.erase(it->second.begin());
}
else if(que.size()){
int ss=*que.begin();
que.erase(que.begin());
int pos=*(it->second.begin());
it->second.erase(it->second.begin());
jilu[pos]=ss;
}
else{
int pos=*(it->second.begin());
it->second.erase(it->second.begin());
cun.insert(pos);
}
}
}
else{
while(it->second.size() > ){
if(w>){
w--;
it->second.erase(it->second.begin());
}
else if(que.size()){
int ss=*que.begin();
que.erase(que.begin());
int pos=*(it->second.begin());
it->second.erase(it->second.begin());
jilu[pos]=ss;
}
else{
int pos=*(it->second.begin());
it->second.erase(it->second.begin());
cun.insert(pos);
}
}
}
}
for(int i=;i<=m;i++){
while(mp[i].size()<k){
int ss=*cun.begin();
cun.erase(cun.begin());
jilu[ss]=i;
mp[i].insert(ss);
}
}
while(que.size()){
int pos=*cun.begin();
int ss=*que.begin();
cun.erase(cun.begin());
que.erase(que.begin());
jilu[pos]=ss;
}
int num=;
for(int i=;i<=n;i++){
if(jilu[i]!=all[i])num++;
}
printf("%d %d\n",k,num);
for(int i=;i<=n;i++){
printf("%d ",jilu[i]);
}
}
Codeforces 723c [贪心][乱搞]的更多相关文章
- CodeForces 509C Sums of Digits(贪心乱搞)题解
题意:a是严格递增数列,bi是ai每一位的和,告诉你b1~bn,问你怎样搞才能让an最小 思路:让ai刚好大于ai-1弄出来的an最小.所以直接模拟贪心,如果当前位和前一个数的当前位一样并且后面还能生 ...
- [CF752D]Santa Claus and a Palindrome(优先队列,贪心乱搞)
题目链接:http://codeforces.com/contest/752/problem/D 题意:给长度为k的n个字符串,每一个字符串有权值,求构造一个大回文串.使得权值最大. 因为字符串长度都 ...
- [luoguP1053] 篝火晚会(贪心 + 乱搞)
传送门 假设第一个位置是1,那么枚举它的左右两边是谁,有两种情况,然后可以递推求出序列. 然后可以贪心,两个序列有多少个不同的数,答案就是多少,具体为啥,yy一下即可 然后就是判断递推求出的序列和目标 ...
- Codeforces 724C [坐标][乱搞][模拟]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 从(0,0)出发与x轴正方向呈45度角的射线,在给定的矩形区域内不断发射,直到射入矩形的某个角停止. 给出多个坐标,问光线最早经过某坐标的时间. ...
- FJNU2018低程F jq解救fuls (贪心乱搞)题解
题目描述 一天fuls被邪恶的"咕咕咕"抓走了,jq为了救fuls可谓是赴汤蹈火,费了九牛二虎之力才找到了"咕咕咕"关押fuls的地方. fuls被关在一个机关 ...
- hdu4714树形DP+贪心(乱搞)
Tree2cycle A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...
- codeforces 1041 c 乱搞
#include <bits/stdc++.h> using namespace std; struct po { int val; int id; }; po a[]; vector&l ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)
A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
随机推荐
- 常用排序算法的Java实现 - 1
学习编程语言时, 我们会接触到许多排序算法, 这里总结了一下常见的排序算法. 不定期更新. * 其实在Java中存在如Collections.sort()这样的方法来自动为我们排序, 不过学习排序算法 ...
- 使用函数库(JAVA API)
/*使用函数库(JAVA API) * 在JAVA的API里类被封装在一个个的package,要使用package的类之前必须 * 要知道这个类属于哪个package * 引用类方式: * 1.通过i ...
- 字符串中带有emoji表情处理
1:先删除字符然后解析当前字符再显示 edit.addTextChangedListener(new TextWatcher() { @Override public void beforeTextC ...
- sqoop的merge和eval 工具
1.sqoop的merge的工具 sqoop merge 可以将hdfs上的两个文件进行合并,在increment import的过程中经常会用到,如incremenet import将数据导入到hd ...
- javascript笔记8-表单脚本、JSON、AJAX
通过表单提交,很方便的可以从界面把参数传递给后台. 如果前后台我们有大量数据需要交互,JSON方便我们传递和读取. 如果需要更新一个界面的某一部分数据,并不想刷新界面,就要用到Ajax. 1. 表单脚 ...
- php大力力 [039节] 修改一下后台项目,同时启用印象笔记,要做的事情todo列表,记录在印象笔记,速度快一些
php大力力 [039节] 修改一下后台项目,同时启用印象笔记,要做的事情todo列表,记录在印象笔记,速度快一些
- HDU 2089 不要62
也是简单的数位dp. #include<iostream> #include<cstdio> #include<cstring> #include<algor ...
- 第三个Sprint冲刺第五天
讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:继续昨天的工作
- 巧用TexturePacker命令行
游戏开发使用TexturePacker来生成图片的atlas sheet, 工具非常好用. 一般GUI的方法, 新建一个tps文件, 将要图片加载进来,调整参数和输出路径, 最后点publish. 在 ...
- Linux文件操作 笔记
fstat stat lstat 原型 #include <unistd.h> #include <sys/stat.h> #include <sys/types.h&g ...