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 ...
随机推荐
- python 程序构架
http://blog.csdn.net/heyabo/article/details/8806176
- C语言编译链接
转载请标明: 编译链接是使用高级语言编程所必须的操作,一个源程序只有经过编译.链接操作以后才可以变成计算机可以理解并执行的二进制可执行文件. 编译是指根据用户写的源程序代码,经过词法和语法分析,将高级 ...
- github的注册过程
带着疑问打开了github.这是一个神奇的网站,因为它到处都是英语,对于我这种英语盲这简直太痛苦了.借助了百度翻译,我还是马马虎虎的完成了github的制作. 首先在它的登录界面下面有一个sign u ...
- The Layout Process on Mac OSX and iOS
First we will recap the steps it takes to bring views on screen with Auto Layout enabled. When you’r ...
- javascript的异步编程方法
一,callback 回调函数 即函数f1和函数f2的关系是f1(f2()); f2作为f1()的回调函数,在f1执行过程中就开始执行f2,先执行线程的主要逻辑,将比较耗时的任务放在后面执行. 回调函 ...
- mysql表分区(摘自 MySQL表的四种分区类型)
一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...
- LR接口测试手工脚本与验证脚本
Action(){ char URL[250]; char mars_cid[30]; memset(URL,0,sizeof(URL)); memset(mars_cid,0,sizeof(mars ...
- Python 入门指南
Release: 3.4 Date: March 29, 2014 Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程. Pyt ...
- php实现文件下载
<?php $filename = '路径+实际文件名'; //文件的类型 header('Content-type: application/octstream'); //下载显示的名字 he ...
- iOS-硬件声音 ,振动,提示警告
为了引起用户注意发出警告的时候,常常伴随有提示音震动等.系统声音服务提供了一个接口,用于播放不超过30秒的声音文件,他支持的格式有CAF,AIF,WAV. iOS使用该API支持3种不同的通知: 声音 ...