2023NOIP A层联测28 T3 大眼鸹猫

比赛做出来了,但是文抄……

思路

分析每一个 \(i\),发现其一定需要上升或下降 \(|a_i-b_i|\)。

如果求出最小操作次数,然后在此基础上,将上升或下降操作分成多次,减小对答案的贡献即可。

最小操作次数

从后向前考虑,若 \(a_i\) 需要下降,那么先不管它;若 \(a_i\) 要上升,那么立刻上升。

如果 \(i\) 要上升,此时对于 \(i+1\) 而言,要么等待下降,要么已经上升完毕,这两种情况都可以保证操作后的 \(a_i \leq a_{i+1}\)。

执行完上升后,从前向后考虑,此时要上升的 \(a_i\) 已经不存在,若 \(a_i\) 要下降,直接下降即可。

这里可以发现,最多只需要 \(n\) 次操作即可使 \(a_i=b_i\),且发现,对于每一个操作都是独立的

Ps:独立性对减小贡献有很大帮助。

最小答案

考虑对于 \(a_i\) 使用 \(x\) 次操作的最小贡献。易得,把 \(a_i\) 等分成 \(x\) 份后,再进行 \(x\) 次上升,可以得到最小贡献。

一开始每一个 \(a_i\) 都分了 \(1\) 次操作。

可以记录一下,如果给 \(a_i\) 多一次操作会减少多少贡献,每次取最大者即可。

具体实现就是,开一个优先队列,以 \(a_i\) 多一次操作减少的贡献为关键字,每次取队头。取出后将分配次数加一,然后再入队多一次操作减少的贡献,直到 \(m\) 次操作用完。

注意对于 \(a_i=b_i\) 的情况,不算操作次数。

CODE

#include<bits/stdc++.h>
using namespace std; #define mod 998244353
#define ll long long
#define S second
#define F first const int maxn=3e5+5; int n,m;
int a[maxn],b[maxn],cd[maxn]; ll now[maxn],t[maxn]; priority_queue< pair<ll,int> >que; ll sqr(ll x){return x*x;} int main()
{
freopen("attend.in","r",stdin);
freopen("attend.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]); for(int i=1;i<=n;i++)
{
cd[i]++;
t[i]=abs(a[i]-b[i]);
if(t[i]==0) {m++,cd[i]=0;continue;}
now[i]=sqr(t[i]);
que.push( make_pair(now[i]-
(sqr((t[i])/(cd[i]+1))*((cd[i]+1)-t[i]%(cd[i]+1))+
sqr(t[i]/(cd[i]+1)+1)*(t[i]%(cd[i]+1))),i) );
}
m-=n;
if(m<0) printf("-1"),exit(0); while(m&&!que.empty())
{
m--;
pair<ll,int>x=que.top();
if(x.first==0) break;
que.pop();
now[x.S]-=x.F;
cd[x.S]++;
int i=x.S;
que.push( make_pair(now[i]-
(sqr((t[i])/(cd[i]+1))*((cd[i]+1)-t[i]%(cd[i]+1))+
sqr(t[i]/(cd[i]+1)+1)*(t[i]%(cd[i]+1))),i) );
}
ll ans=0;
for(int i=1;i<=n;i++) ans=(ans+now[i])%mod;
printf("%lld",ans);
}

麻麻的,文抄写错哩。

2023NOIP A层联测28 T3 大眼鸹猫的更多相关文章

  1. [2018湖南省队集训] 6.28 T3 simulate

    这道模拟题出的我毫无脾气2333 最重要的是先要发现操作顺序不影响最后的答案,也就是每次随便挑一个>=2的数进行操作最后总是可以得到同样的数列. (这个还不太难想qwq) 但是最骚的是接下来的模 ...

  2. MySQL Nested-Loop Join算法学习

    不知不觉的玩了两年多的MySQL,发现很多人都说MySQL对比Oracle来说,优化器做的比较差,其实某种程度上来说确实是这样,但是毕竟MySQL才到5.7版本,Oracle都已经发展到12c了,今天 ...

  3. 数据挖掘系列(9)——BP神经网络算法与实践

    神经网络曾经很火,有过一段低迷期,现在因为深度学习的原因继续火起来了.神经网络有很多种:前向传输网络.反向传输网络.递归神经网络.卷积神经网络等.本文介绍基本的反向传输神经网络(Backpropaga ...

  4. 利用no_merge优化

    SQL> select a.unit3_code 机构编码, 2 a.unit3_name 机构名称, 3 a.dept1_code 部门编码, 4 a.dept1_name 部门名称, 5 a ...

  5. Tensorflow实践:CNN实现MNIST手写识别模型

    前言 本文假设大家对CNN.softmax原理已经比较熟悉,着重点在于使用Tensorflow对CNN的简单实践上.所以不会对算法进行详细介绍,主要针对代码中所使用的一些函数定义与用法进行解释,并给出 ...

  6. 深度学习:Keras入门(一)之基础篇

    1.关于Keras 1)简介 Keras是由纯python编写的基于theano/tensorflow的深度学习框架. Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结 ...

  7. Tensorflow卷积神经网络

    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络, 在计算机视觉等领域被广泛应用. 本文将简单介绍其原理并分析Tensorflow官方提供的示例. ...

  8. 使用TensorFlow实现DNN

    这一节使用TF实现一个多层神经网络模型来对MNIST数据集进行分类,这里我们设计一个含有两个隐藏层的神经网络,在输出部分使用softmax对结果进行预测. 使用高级API实现多层神经网络 这里我们使用 ...

  9. Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

  10. 学习笔记TF057:TensorFlow MNIST,卷积神经网络、循环神经网络、无监督学习

    MNIST 卷积神经网络.https://github.com/nlintz/TensorFlow-Tutorials/blob/master/05_convolutional_net.py .Ten ...

随机推荐

  1. Zabbix创建模板(templates)及监控项(item)

    Zabbix监控--Zabbix创建模板(templates)及监控项(item) 生产环境中,有一个简单的原则,那就是无监控不上线,监控系统开源方案中,zabbix也算不错的选择.由于其系统接口的开 ...

  2. 关于对 Tomcat 进行小版本升级的快速解决方案

    1.背景描述 原来的 Tomcat 在部署时,使用的是最新的版本 9.0.40 . 经过一段时间后,在原来的 Tomcat 版本中,发现存在漏洞. 因此,需要将旧版本(9.0.40)升级到没有漏洞的新 ...

  3. 组合逻辑环(Combinational Logic Loop)

    组合逻辑电路 组合逻辑电路是数字电子学中一类基本的电路类型,它由一系列逻辑门组成,用于实现特定的逻辑功能.与时序逻辑电路不同,组合逻辑电路的输出完全取决于当前的输入信号,而不受之前输入的影响.换句话说 ...

  4. NYX靶机笔记

    NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址:https://download.vulnhub.com/nyx/nyxvm.zip 1.nmap扫描 1)主机发现 # -sn 只做pin ...

  5. Drools与动态加载规则文件

    Drools与动态加载规则文件 Drools简介 对系统使用人员来说: 对开发人员来说: Drools架构图 快速开始 Drools简介 Drools是一款基于Java的开源规则引擎,将规则与业务代码 ...

  6. sicp每日一题[1.41]

    Exercise 1.41 Define a procedure double that takes a procedure of one argument as argument and retur ...

  7. docker 修改容器内容后更新镜像的流程

    在 Docker 中,如果你修改了一个容器的内容并希望将这些更改保存为一个新的镜像,可以按照以下步骤进行: docker version: 26.1 1. 确保容器运行 首先,确保你正在修改的容器是运 ...

  8. CPP在内网穿透技术的思考

    概述 内网穿透是一种技术,用于在私有局域网(LAN)中的设备与外部网络(如互联网)之间建立通信通道,使得外部设备可以访问内网中的服务.由于内网设备通常位于防火墙或 NAT(网络地址转换)设备之后,外部 ...

  9. EF Core – 7.0 New Features

    前言 这篇不会细谈功能, 只是一个总链接. 参考 Docs – What's New in EF Core 7.0 Breaking Change 参考: Docs – Breaking change ...

  10. 实用技巧:根据menuconfig定位一个驱动涉及到的源文件

    根据menuconfig定位一个驱动涉及到的源文件,这个是很常用的,因为有时候你需要参考别人的驱动代码.新手不知道如何定位驱动相关源码,这篇文章将告之. 假设我手头有一块开发板,现在我想要获取板载ov ...