【Luogu P2503】均分数据

Mycat使用之MySQL单库分表及均分数据 Mycat安装部署之MySQL单库分表及写入数据均分 阅读详情

题目描述

已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下:

σ=∑mi=1(Si−x)2m‾‾‾‾‾‾‾‾‾‾‾‾‾‾√,x=∑mi=1ximσ=∑i=1m(Si−x)2m,x=∑i=1mxim

题解

胡乱代一遍式子发现答案只与∑S2i∑Si2有关。
于是要最小化它。又均值定理可知应使每个Si尽量相等。
于是构造新解的方法就出来了,每次从其他地方取一个加到当前最小组里。
我这里为了方便先分配了一个比较优的组。

但是单这样会全WA,你会发现你找出来的新解总是不比你当前这个解优,并且试一下发现自己总是接受不了比自己差的解,于是就找不到最优解了。

于是我把接受差解的不等式右边除以1000就AC了? (迷)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<ctime>
#define POW(a) ((a)*(a))
using namespace std;
int n,m;
typedef double db;
const int N=40;
int a[N];
int K[N];
int Sum[10];
const db INF=1e99;
const db eps=1e-10;
const db delta=0.99;
const db T=1000000;
db ax;
db Ans=0;
int ans;
//使sigma xi^2 最小
int S=0;
inline int Rand(int mod){return rand()%mod+1;}
int top=0;
int st[N];
inline void Get(int k){top=0;for(register int i=1;i<=n;++i) if(K[i]==k) st[++top]=i;}
inline db calc(){
    register db S=0;
    for(register int i=1;i<=m;++i) S+=POW(Sum[i]);
    return S;
}
inline void SA()
{
    db t=T;
    int nans=ans;
    while(t>eps){
        bool flag=1;
        while(flag){
            flag=0;register int min_pos=-1;register int max_pos=-1;
            for(register int i=1;i<=m;++i) if(min_pos==-1||(Sum[min_pos]>Sum[i])) min_pos=i;
            register int p=Rand(n);
            while(K[p]==min_pos) p=Rand(n);
            max_pos=K[p];
            K[p]=min_pos;Sum[min_pos]+=a[p];Sum[max_pos]-=a[p];
            register int new_ans=calc();
            if(new_ans<nans) {nans=new_ans;if(nans<ans) ans=nans;flag=1;}
            else if(rand()>exp((new_ans-nans)/t)*RAND_MAX/1000.0000) nans=new_ans,flag=1;//....
            else{
                K[p]=max_pos;Sum[max_pos]+=a[p];Sum[min_pos]-=a[p];
            }
        }
        t*=delta;
    }

}
int main()
{
    srand(19260817);
    scanf("%d %d",&n,&m);register int SS=0;
    for(register int i=1;i<=n;++i) scanf("%d",&a[i]),SS+=a[i];
    ax=(db)(SS)/(m*1.0000);
    sort(a+1,a+1+n);
    Ans=1.000*m*POW(ax)-(2*SS*1.0000)*ax;
    register int num=(n-1)/m+1;
    register int k=0;
    bool g=0;int l=1;int r=n;
    register int tot=0;
    for(register int i=1;i<=m;++i)
    {
        while(k<num&&r>=l){
            if(!g) g=1,K[l]=i,Sum[i]+=a[l++];
            else g=0,K[r]=i,Sum[i]+=a[r--];
            ++k;++tot;
        }
        k=0;
    }
    for(register int i=1;i<=m;++i) S+=POW(Sum[i]);
    ans=S;SA();
    printf("%.2lf\n",sqrt((1.000*ans+Ans)/(1.000*m)));
}
/*
6 2
1 2 3 4 5 6
 */
【BZOJ-2201】彩色圆环 题目描述 小 A 喜欢收集宝物。一天他得到了一个圆环,圆环上有 N 颗彩色宝石,闪闪 发光。小A很爱惜这个圆环,天天把它带在身边。 一天,小 A 突然发现圆环上宝石的颜色是会变化的。他十分惊讶,仔细观察这 个圆环后发现,圆环上宝石的颜色每天变化一次,而且每颗宝石的颜色都等概率地 为特定的M种颜色之一。小A发现了这个秘密后,对圆环更是爱不释手,时时刻刻都 在研究。 又经过了一段时间,小... 阅读详情

相关推荐

第五章 PCIe介绍 5.1-5.7

为什么SSD要用PCIe接口?因为它快,比SATA快。通道,PCIe最多可以有32个通道。两个设备之间的PCIe连接,叫做一个Link。如下图,设备A和设备B是个双向连接,两个PCIe设备之间,有专门的发送和接收通道,数据可以同时往两个方向传输,PCIe Spec称这种工作模式为,可以理解为。和PCIe一样,SATA有独立的发送和接收通道。但与PCIe工作模式不一样,同一时间,SATA只有一条通道可以进行数据传输。这种工作模式称为。与SATA单通道不同,PCIe连接可以通过增加通道数扩展带宽。

fengbaobaola的博客 2969

BZOJ2428——随机化贪心

Description 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下: ,其中σ为均方差,是各组数据和的平均值,xi为第i组数据的数值和。 Input 第一行是两个整数,表示N,M的值(N是整数个数,M是要分成的组数) 第二行有N个整数,表示A1、A2、……、An。整数的范围是1–50。 (同一行的整数...

stevensonson的博客 554

(详细教程)opencv+pycharm+笔记本摄像头 做一个人脸识别

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、安装opencv-python 这里推荐使用pycharm直接安装opencv-python 打开文件——设置——python解释器——点击+号 搜索opencv-python,点击安装包,等待片刻即可安装好 检查是否安装好,新建一个项目输入以下代码,若无报错则安装好 import cv2 二、准备分类器 咱们使用opencv官方提供的分类器,包括面部识别,侧...

qq_52852432的博客 1万+

洛谷P2503 [HAOI2006]【模拟退火】

题目链接 读题意读了一年。。 题意是将n个数分成m组,将每个组的求一个sum。 计算m个sum的方差。求最小的方差。 思路: 先考虑连续选m个分组求最小方差,很容易想到DP。 dp[i][j]表示前i个数分成j组最小的花费。 状态转移就是dp[i][j]=min(dp[i][j],dp[k][j−1]+(pre[i]−pre[k]−sum/n))(k&lt;i,j&lt;=m) d...

qq_39921637的博客 220

Cadence Spectre仿真保姆级教程:从DC/AC到PSS/PV,手把手教你搞定模拟电路分析

作为业界标准的Cadence Spectre仿真器,以其精确的算法和丰富的分析类型,成为每个模拟IC工程师必须掌握的利器。本文将带你从零开始,系统掌握Spectre仿真的核心技能,从最基础的DC工作点分析到复杂的PSS相位噪声仿真,每个步骤都配有详细的操作指导和实用技巧。记得我第一次使用Spectre仿真一个简单的两级运放时,花了整整三天时间才得到正确的AC响应曲线。过程中踩过的坑、浪费的时间,现在想来都是宝贵的学习资源。与传统的AC分析不同,STB分析可以在不破坏环路的情况下评估稳定性。

weixin_30898555的博客 335

行车记录仪 - 碰撞检测

功能需求 行车记录仪的核心功能是记录,大部分时候,行车记录仪都是在循环录制视频和音频,而设备的存储空间是有限的,因此录制机制一般是循环覆盖录制,如此一些重要的记录(例如:发生碰撞时的记录)就可能会被覆盖,为了避免这种情况的发生,行车记录仪设备就需要感知这些情况并做特殊处理(例如:备份相应时刻的录像数据)。 实现原理 碰撞检测是通过物理芯片G-sensor来实现的,加速度发生变化时G-sensor驱动会将加速度上报给应用层,应用层做相应处理。 G-sensor G-sensor(Gravity se

qazw9600的专栏 5217

BZOJ2428 ||洛谷P2503 [HAOI2006]均分数据【模拟退火+DP】

Time Limit: 5 Sec Memory Limit: 128 MB Description 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下: 其中σ为均方差,是各组数据和的平均值,xi为第i组数据的数值和。 Input 第一行是两个整数,表示N,M的值(N是整数个数,M是要分成的组数) 第二行有N个整数,表示...

niiick 295

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

weixin_46183247的博客 767

均分数据(模拟退火&贪心)

题目:https://www.acwing.com/problem/content/2682/ 题意:给n个数,分成m组,使得每一组的和的均值最小,2<=m<=,m<=n<=20 题解:模拟退火+贪心,直接模拟退火暴力所有情况,可能或超市,可以尝试一下用贪心优化一下模拟退火,就是一部分情况用模拟退火来做,一部分情况可以用贪心来做,某些题可以用dp等等(补充在下面),这个题外层可以用模拟退火来随机这个排列,check里面用一个贪心,在这个排列的情况下,从左往右依次将每一个数放到和最小的

Are_you_ready的博客 341

视觉Transformer实战 | Transformer详解与实现

本文系统介绍了 Transformer 架构的核心原理与实现。相比传统 RNN 和 CNN,Transformer 凭借自注意力机制有效捕捉序列中的长距离依赖关系,支持并行训练,显著提升效率。其核心创新在于通过查询、键、值向量计算注意力权重,理解单词间的语义关联。架构包含编码器-解码器结构:编码器通过多头自注意力和前馈网络提取输入特征;解码器利用掩码自注意力和交叉注意力生成输出。本文使用 PyTorch 实现了缩放点积注意力、位置编码、层归一化等关键模块,并构建了完整的 Transformer 模型。

盼小辉丶的博客 4万+

PyCharm高效配置Gitee全攻略

本文介绍了如何在PyCharm和VS Code中配置Gitee插件并管理代码。主要内容包括:1) PyCharm连接Gitee的配置步骤;2) 代码拉取与冲突解决方法;3) VS Code界面功能区域详解;4) 完整的代码提交流程(暂存→提交→推送)。特别说明了VS Code中Git面板的使用方法,以及推送代码到Gitee远程仓库的具体操作步骤。文章还提供了解决代码冲突的建议和注意事项,帮助开发者更好地进行版本控制。

ZhangJiqun&191cm&85kg 302

BZOJ 2428: [HAOI2006]均分数据

2428: [HAOI2006]均分数据 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 2183  Solved: 680 [Submit][Status][Discuss] Description 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下: ,其中

BlackJack 633

YOLO系列算法改进 | 自研篇 | C3k2融合Circulant Attention注意力模块 | 给局部特征提取器装上了全局动态卷积核,兼顾效率、精度与泛化能力!| AAAI 2026

YOLO系列算法改进 | 自研篇 | C3k2融合Circulant Attention注意力模块 | 给局部特征提取器装上了全局动态卷积核,兼顾效率、精度与泛化能力!| AAAI 2026 (以YOLO26最新目标检测模型为基础,融合C3k2_Circulant创新模块改进Backbone)

2502_91881744的博客 242

luogu P2503 [HAOI2006]均分数据

背景: 模拟退火大法好......... 题意: 给出nnn个数,将其分成mmm组,求每组和的均方差(标准差)的最小值。 思路: 先随机出每一个数属于哪一组。 模拟退火,每一次选择一个数将其放在权值和最小的一组。 代码: goto ...

zsyz_ZZY的博客 420

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[Luogu P2503] [HAOI2006] 均分数据

洛谷传送门 题目描述 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下: σ=∑Mi=1(xi−x¯¯¯)M−−−−−−−−−−−√σ=∑i=1M(xi−x¯)M\sigma= \sqrt{\frac{\sum_{i=1}^M(x_{i}-\overline{x})}{M}} x¯¯¯=∑Mi=1xiM...

LPA的博客 345

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

luogu P2503 [HAOI2006]均分数据(模拟退火)

思路:模拟退火随机交换两个数,暴力分组,稍微推一下公式 #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; const db down = 0.996; const db eps = 1e-15; const int N = 25; int n, m, a[N], b[N], c[N]; db ans, ave; db cal() { memset(c..

。 237

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[luogu2503][HAOI2006]均分数据【模拟退火】

题目描述 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下: 分析 模拟退火学习笔记:https://www.cnblogs.com/chhokmah/p/10529114.html 万物皆可颓火,我们首先将初始的答案当做一半一半的答案,然后我们随机化抽取两个部分的数据。根据题目中的描述,因为两个组别之间数据个...

weixin_30488313的博客 190

模拟退火——BZOJ2428/Luogu2503 [HAOI2006]均分数据

题面:Luogu2503 BZOJ2428 这题使用其他的常规算法不太现实,所以我们想一些奇怪的方法 模拟退火其实就可以(这题拿来入门了) 我们首先把每个数随机分组,然后随机地把一个数从原来的组里移到另一个组,计算答案,这个用退火搞一搞 也就是说如果新的答案比原来小,那就往新的答案去,否则随机地是否往新的答案去(当然随着时间推移往新的答案去概率越小,答案越稳定) 保证答案的话随个5000~

2333:jzqjzq的博客专栏 418

[HAOI2006] 均分数据

题目描述: N个元素分M组,总方差最小 题目分析: 不会啊 虽说大佬们都讲是个膜你退火 但我感觉是个带贪心的随机乱搞! 数据只有 20 我们每次就去搞随机分组。 当然 在初期温度很高的时候 我们需要找一组方差最小的去换 加入退火的可能去找更差解的随机,搞个10000-20000 基本上就可以A了 题目链接: BZOJ 2428 Luogu 2503 Ac 代码:...

HT008的Blog 382

[HAOI2006]均分数据

题目链接           经过了14次的提交,终于正大光明的把本题A掉了。。。。 算法:           主要思想是模拟退火,具体操作就是,我们对于每一个生成的排列,用连续分组DP处理此情况下的最小均方差。           dp[i][j]表示前i个数中分j组的最小均方差,dp[i][j]=min(dp[i][j],dp[k-1][j-1]+prefix[i]-prefix[j...

ZGS_WZY的博客 323

[bzoj2428]均分数据

[bzoj2428]均分数据 模拟退火 代码 #include&lt;bits/stdc++.h&gt; using namespace std; typedef double db; db a[100],ave; int id[100]; db sum[100]; int n,m; inline db solve(){ db T=10000; db ans=0,pst=...

jerome_wei的博客 192

2428: [HAOI2006]均分数据

2428: [HAOI2006]均分数据 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 1660  Solved: 500 [Submit][Status][Discuss] Description 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下: ,其中

CRZbulabula的博客 833

[BZOJ2428][HAOI2006]均分数据

模拟退火.具体实现的过程中有一些小技巧,题解见http://blog.youkuaiyun.com/qpswwww/article/details/44161053

Zvezda_的博客 1069

均分数字题解

均分数字 描述 你手上现在有1到5这5个整数 每种整数,你有无限个 现在希望你拿出尽可能少的数字个数 使这些数字的平均值为实数P 输入 一个实数P,可能有1到9个小数位 1<=P<=5 输出如题 样例 输入 5 输出 1 输入 4.5 输出 2 完整代码如下 #include <bits/stdc++.h> using namespace std; typedef long long l; l c(l a,l b){ l ans=0; while(a%b==0)ans++,a/.

wang_yi_ran的博客 650
上一篇: 【Luogu P1121】环状最大两段子段和
下一篇: 【BZOJ-P4337】BJOI2015 树的同构(附带树哈希讲解)
NeosKnight
博客等级 码龄9年 21粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值