BZOJ2428_均分数据_KEY
这道题可以用C++的random_shuffle屮过去。
random数列插入顺序,每次都插入数值和最小的那一组。
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int N,M,a[];
double ave,ans=2e9,t[]; double get()
{
double tot=;
memset(t,,sizeof t);
for(int i=;i<=N;i++){
int d,mx=2e9;
for(int j=;j<=M;j++)if(t[j]<mx)mx=t[j],d=j;
t[d]+=a[i];
}
for(int i=;i<=M;i++)
tot+=(ave-t[i])*(ave-t[i]);
return tot;
} int main()
{
srand();
scanf("%d%d",&N,&M);
for(int i=;i<=N;i++)scanf("%d",&a[i]),ave+=a[i];ave/=M;
for(int i=;i<=;i++){
random_shuffle(a+,a+N+);
ans=min(ans,get());
}
printf("%.2lf",sqrt(ans/M));
return ;
}
random_shuffle
这道题也可以用模拟退火。
设定一个初始温度,然后降温,降温的同时如果大于某个你设定的温度,即当前状态不稳定,进行贪心。
反之为稳定可以随机一个放到随机一个组里。
code:
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std; int N,M,w[],S=;
double ans,res=2e9,t[],ave,a[]; void work(int x,int y)
{
t[w[x]]-=a[x];
t[y]+=a[x];
w[x]=y;
} double get()
{
double tot=;
for(int i=;i<=M;i++)
tot+=(ave-t[i])*(ave-t[i]);
return tot;
} int main()
{
scanf("%d%d",&N,&M);
for(int i=;i<=N;i++)
scanf("%lf",&a[i]),ave+=a[i];
ave/=M;
srand();
while(S--){
memset(t,,sizeof t);
memset(w,,sizeof w);
for(int i=;i<=N;i++)
t[w[i]=rand()%M+]+=a[i];
ans=get();
for(double Tempr=;Tempr>;Tempr*=0.812){
int x=rand()%N+,y=,bef;
if(Tempr<)y=rand()%M+;
else for(int i=;i<=M;i++)if(t[y]>t[i])y=i;
bef=w[x];
work(x,y);
double now=get();
if(now<ans||Tempr>rand()%)ans=now;
else work(x,bef);
}
res=min(res,ans);
}
printf("%.2lf",sqrt(res/M));
return ;
}
BZOJ2428_均分数据_KEY的更多相关文章
- bzoj2428: [HAOI2006]均分数据
模拟退火.挺好理解的.然后res打成了ans一直WA一直WA...!!!一定要注意嗷嗷嗷一定要注意嗷嗷嗷一定要注意嗷嗷嗷. 然后我就一直卡一直卡...发现最少1800次的时候就可以出解了.然后我就去调 ...
- 【BZOJ2428】均分数据(模拟退火)
[BZOJ2428]均分数据(模拟退火) 题面 BZOJ 题解 先说说黄学长的做法: 当温度比较高的时候,贪心 每次随机一个数,把他放进当前和最少的那一组里面 温度足够低的时候就完全随机然后转移 这样 ...
- BZOJ2428 均分数据
2428: [HAOI2006]均分数据 Time Limit: 5 Sec Memory Limit: 128 MB Description 已知N个正整数:A1.A2.…….An .今要将它们分 ...
- P2503 [HAOI2006]均分数据
P2503 [HAOI2006]均分数据 模拟退火+dp (不得不说,我今天欧气爆棚) 随机出1个数列,然后跑一遍dp统计 #include<iostream> #include<c ...
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj2428 [HAOI2006]均分数据 模拟退火
[HAOI2006]均分数据 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3434 Solved: 1091[Submit][Status][Dis ...
- 洛谷 P2503 [HAOI2006]均分数据 随机化贪心
洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ...
- 【BZOJ2428】[HAOI2006]均分数据
Description 已知N个正整数:A1.A2.…….An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: ,其中σ为均方差,是各组数据和的平均值,xi为第 ...
- mycat使用之MySQL单库分表及均分数据
转载自 https://blog.csdn.net/smilefyx/article/details/72810531 1.首先在Mycat官网下载安装包,这里就以最新的1.6版本为例,下载地址为: ...
随机推荐
- bug管理工具
1..禅道 禅道项目管理软件(简称:禅道)集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程. 禅道的主要管理思想基于国际 ...
- C++ 类 、构造、 析构、 重载 、单例模式 学习笔记及练习
一.拷贝构造函数 1.是一种特殊的构造函数,就是用一个已有的对象去构造其同类的副本对象,即对象克隆. class 类名 { 类名(类名& that) { 对类成员挨个赋值 ... } } 练习 ...
- FileStream对文本进行读写操作
class FileHelper { /// <summary> /// 检验文件路径是否合法 /// </summary> /// <param name=" ...
- GONMarkupParser的使用
GONMarkupParser的使用 说明 这是一个写得非常好的富文本工具类,便于你进行简易的封装.本人抛砖引玉,只进行了少量的简化使用封装. 效果 源码 https://github.com/nic ...
- AC自动机, 字符串匹配算法
package utils import java.util.HashMapimport java.util.LinkedListimport util.control.Breaks._import ...
- 一键安装lnmp1.5
系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Aliyun/Amazon/Mint Linux发行版 需要5GB以上硬盘剩余空间,MyS ...
- SDN 第一次作业
你会选择作 网络编程 方向的程序员吗?为什么? 答: 可能会选择吧.看了那篇文章感觉网络编程的程序员和其他的程序员都并不简单,网络编程的程序员可能更要对网络的知识更加了解.我现在也有机会能接触网络方向 ...
- Mysql 漏洞利用(越权读取文件,实战怎么从低权限拿到root密码)[转]
cnrstar (Be My Personal Best!) | 2014-05-20 21:58 众所周知,Mysql的用户在没有File权限情况下是无法通过Load_file读文件或者通过into ...
- RSA算法知识
摘自http://www.cfca.com.cn/zhishi/wz-012.htm RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新来的同事对它不太了解,恰好看到一 ...
- Hadoop学习之路(十三)MapReduce的初识
MapReduce是什么 首先让我们来重温一下 hadoop 的四大组件: HDFS:分布式存储系统 MapReduce:分布式计算系统 YARN:hadoop 的资源调度系统 Common:以上三大 ...