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. pom阿里加速镜像地址

    <repositories> <repository> <id>alimaven</id> <name>aliyun maven</n ...

  2. 使用 SpanMetrics Connector 将 OpenTelemetry 跟踪转换为指标

    原文:https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/ 如果您已经实施了跟踪但缺乏强 ...

  3. Element-UI 中使用rules验证 金额 数字

    data中定义验证规则:var checkCount = function (rule, val, callback) { if (!val) { return callback(new Error( ...

  4. 运行 Java 程序

    Java 程序实际上就是我们编译好的 Java 类文件.运行 Java 程序就是运行 Java 类的 main 函数. 编译并运行 Java 文件 源文件: package com.example; ...

  5. 搜索引擎用法 cheatsheet

    逻辑 写法 与 keyword1 keyword2 或 keyword1 OR keyword2 限定关键词的排列 "keyword" 限定搜索的网站 site:cnblogs.c ...

  6. 工程化Vue使用

    目录 环境准备 Vue项目-创建 Vue项目开发流程 API风格 案例 推荐阅读: VUE-局部使用 环境准备 介绍:create-vue是Vue官方提供的最新的脚手架工具,用于快速生成一个工程化的V ...

  7. MyBatis分页实现

    目录 分页实现 limit实现分页 RowBounds分页 分页实现 limit实现分页 为什么需要分页? 在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进 ...

  8. C#自定义控件—仪表盘

    C#用户控件之仪表盘 如何让温度.湿度.压力等有量程的监控值如仪表盘(DashBoard)一样显示? 思路(GDI绘图): 定义属性:(仪表盘的半径.颜色.间隙:刻度圆的半径.颜色.字体:指针的颜色. ...

  9. Failed to convert value of type 'java.lang.String' to required type

    DEBUG 微信小程序Java后台 Failed to convert value of type 'java.lang.String' to required type 产生这种条件的原因一般是使用 ...

  10. 心得小结,关于注重加强MCU下调试能力的意识

    这两个月没有怎么更新博文,最近换工作了,根据新工作安排,大半年内都做MCU开发(就不要叫单片机了,太老土了). 入职新工作了,需重构拳头产品的软件,所以每天加班加点. 单片机与linux应用开发,开发 ...