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. 关于捣鼓Gentoo的一些见解

    现在很少有人使用gentoo,大家对它的印象都是一个很难用的系统,我想给大家讲讲折腾Gentoo一年的心得,仅供参考 使用archlinux安装盘,genfstab生成fstab 使用gentoo-k ...

  2. idea关闭窗口快捷键

    File->settings->keymap->main menu->window->editor tabs->close 根据自己的使用习惯将想要关闭的标签设置快 ...

  3. Redis实战11-实现优惠券秒杀下单

    本篇,咱们来实现优惠券秒杀下单功能.通过本篇学习,我们将会有如下收获: 1:优惠券领券业务逻辑: 2:分析在高并发情况下,出现超卖问题产生的原因: 3:解决超卖问题两种方案:版本号法及CAS法 4:乐 ...

  4. 查看tensorflow pb模型文件

    """ @Author: Qiangz @Date: 2019/7/5 @Description: """ import tensorflo ...

  5. MDC – Checkbox

    前言 Checkbox 不是搭配 TextField 使用, 而是搭配 FormField. 所以独立一篇来写. 参考 Docs – Selection controls: checkboxes 效果 ...

  6. JavaScript – Set and Map

    参考 Set 和 Map 数据结构 Set 介绍和使用 Set 很像 Array, 但其实它是一个 Iteralbe 对象. 用于保存多个值, 而且具有 unique 特性 (1 个 set 里面不会 ...

  7. TypeScript – tsconfig

    前言 上一篇 TypeScript – Get Started 使用了命令 tsc index.ts --module es2015 很少人会在命令时给写 config, 更正规的做法是创建一个 ts ...

  8. Kubernetes StatefulSet 控制器(二十一)

    前面我们学习了 Deployment 和 ReplicaSet 两种资源对象得使用,在实际使用的过程中,Deployment 并不能编排所有类型的应用,对无状态服务编排是非常容易的,但是对于有状态服务 ...

  9. 《HelloGitHub》第 102 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...

  10. 【赵渝强老师】在MongoDB中使用MapReduce方式计算聚合

    MapReduce 能够计算非常复杂的聚合逻辑,非常灵活,但是,MapReduce非常慢,不应该用于实时的数据分析中.MapReduce能够在多台Server上并行执行,每台Server只负责完成一部 ...