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 ...
随机推荐
- BestCoder Round #40
T1:Tom and pape (hdu 5224) 题目大意: 给出一个矩形面积N,求周长的最小值.(长&&宽&&面积都是正整数) N<=109 题解: 没啥好 ...
- 超链接<a></a>
1.<a href="#" target="_self原窗口-默/_blank新窗口/_top/_parent"></a> 绝对路径:f ...
- Dooioo Deal
using AnfleCrawler.Common; using System; using System.Collections.Generic; using System.Linq; using ...
- Android 计算器UI-TableLayout
表格布局(TableLayout) <?xml version="1.0" encoding="utf-8"?> <TableLayout x ...
- iOS去除导航栏和tabbar的横线
导航[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetri ...
- 对弈类游戏的人工智能(5)--2048游戏AI的解读
前言: 闲得没事, 网上搜"游戏AI", 看到一篇<<2048游戏的最佳算法是?来看看AI版作者的回答>>的文章. 而这篇文章刚好和之前讲的对弈类游戏AI对 ...
- Spring将多个配置文件引入一个配置文件中
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- C++ Primer 第5版
说起Lippman的C++ Primer,我总是有种特殊感情.这本书既是我进入C++领域的敲门砖,也是我第一次在网络上发表技术文章的对象.当年读书笔记中的青涩迷惘和年少轻狂都还历历在目,转眼已经从第三 ...
- 递归输出文件夹下的所有文件的名称(转自 MSDN)
问题:如何输出给定文件夹目录下面的所有文件的名称? C#代码: using System; using System.IO; namespace MyTest { public class Progr ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...