当前位置: 首页 > news >正文

php门户网站模板下载图片制作二维码

php门户网站模板下载,图片制作二维码,手机网站demo,网站开发关联下拉列表给你两个长度为 n n n 的序列 a , b a,b a,b,这两个序列都是单调不降的。 你可以对 a a a 进行不超过 m m m 次操作,每次操作你可以选择一个 i i i 满足 1 ≤ i ≤ n 1\le i\le n 1≤i≤n,然后选择一个整数(可以是负数&…

给你两个长度为 n n n 的序列 a , b a,b a,b,这两个序列都是单调不降的。

你可以对 a a a 进行不超过 m m m 次操作,每次操作你可以选择一个 i i i 满足 1 ≤ i ≤ n 1\le i\le n 1in,然后选择一个整数(可以是负数) x x x,将 a i a_i ai 加上 x x x,这一次操作需要花费 x 2 x^2 x2 的代价。

在做操作的过程中,你需要保证 a a a 始终单调不降。

最后,你需要将 a a a 序列变成 b b b 序列,即对任意 i i i 满足 1 ≤ i ≤ n 1\le i\le n 1in,都有 a i = b i a_i=b_i ai=bi

求最小需要花费的总代价之和。

n , m ≤ 1 0 5 n,m\le10^5 n,m105


首先如果 m m m 小于 a i ≠ b i a_i\not=b_i ai=bi 的个数,就是无解了。

操作过程中,要保证 a a a 始终单调不降,看上去很难满足,但结论是一定存在一种合法操作方案。可以考虑一个极大的区间 [ l , r ] [l,r] [l,r] ∀ i ∈ [ l , r ] , a i < b i \forall i\in[l,r],a_i< b_i i[l,r],ai<bi,此时就从 r r r 操作到 l l l,若 ∀ i ∈ [ l , r ] , a i > b i \forall i\in[l,r],a_i>b_i i[l,r],ai>bi,就从 l l l 操作到 r r r

所以单独考虑每一个数 ∣ a i − b i ∣ |a_i-b_i| aibi,分配了 x i x_i xi 次操作,显然每次操作将 ∣ a i − b i ∣ |a_i-b_i| aibi 减少 ∣ a i − b i ∣ x i \dfrac{|a_i-b_i|}{x_i} xiaibi 是代价最小的。设 f ( x ) f(x) f(x) 表示给 ∣ a i − b i ∣ |a_i-b_i| aibi 分配了 x x x 次操作的最小代价,发现 f ( x ) f(x) f(x) 是下凸函数,意思是随着 x x x 的增大, f ( x ) f(x) f(x) 减小的幅度越来越小。

那么我们可以先给每个数分配一次操作,对于剩下的操作用大根堆维护每个数再分配一次操作减少的代价,每次就贪心的去选代价减少得最多的,然后给它分配一次操作再放进堆里。最后把堆里的数拿出来算答案即可。

时间复杂度 O ( m log ⁡ n ) O(m\log n) O(mlogn)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
constexpr int N=1e5+1;
constexpr ll mod=998244353;
int n,m;
ll a[N],b[N],dis[N],ans;
inline ll getval(ll x,ll n)
{return (x/n)*(x/n)*(n-x%n)+(x/n+1)*(x/n+1)*(x%n);
}
struct node
{int num,id;bool operator<(const node &a)const{return getval(dis[id],num)-getval(dis[id],num+1)<getval(dis[a.id],a.num)-getval(dis[a.id],a.num+1);}
};
priority_queue<node> q;
int main()
{freopen("attend.in","r",stdin);freopen("attend.out","w",stdout);cin.tie(0)->sync_with_stdio(0);cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) cin>>b[i];int fl=0;for(int i=1;i<=n;i++) fl+=(a[i]!=b[i]);if(fl>m) cout<<"-1",exit(0);for(int i=1;i<=n;i++){if(a[i]==b[i]) continue;dis[i]=abs(a[i]-b[i]);q.push({1,i});}if(q.empty()) cout<<0,exit(0);m-=fl;while(m--){node now=q.top();q.pop();now.num++;q.push(now);}while(q.size()){ans=(ans+getval(dis[q.top().id],q.top().num))%mod;q.pop();}cout<<ans;
}
http://www.yayakq.cn/news/52827/

相关文章:

  • 梁平区高点击量网站建设哪家好怎么设置网站字体
  • 国外不织布网站做的教具网站建设都包含哪些内容
  • 家装企业网站系统下载网站 文件夹结构
  • 网站管理维护怎么做西安网站建设定
  • 企业网站包含哪些页面h5做商城网站
  • 网站套餐网页一个网站的建设流程图
  • 网站免费观影怎么做在线企业建站模板
  • 导购网站一站式建站网络营销公司起名
  • 镇江网站建设介绍铁岭做网站信息
  • 做海报找素材网站惠州抖音seo策划
  • 付运费送东西的网站怎么做关键词 网站
  • 公司网站建设意见织梦手机网站
  • wordpress 不同页面seo网站收录工具
  • 哪家广告平面设计学校好潍坊seo培训
  • 怎么做好网站营销推广网站开发现在主要用什么语言
  • 分类网站 制作开源网站程序
  • 深圳公司网站制作网站免费正能量软件不良
  • 石家庄模板建站平台js 曲线 网站
  • apache添加多个网站大前端dux主题wordpress
  • 泸州市住房和城乡建设网站怎么做网站编程
  • 手机端网站动效类怎么做百度做网站的
  • 做网站做哪个行业好wordpress数据库文件导入
  • wordpress oa教程百度seo排名培训 优化
  • 注册网站地址第1行第二行怎么填人才网站 建设好 窗口
  • 上杭网站c 教学网站开发
  • 网站优化公司服务咸宁做网站的公司
  • 做国外网站关键词用写小说网站要怎么做
  • vs怎样建设新网站注册网站流程
  • 教育网站开发公司怎样查到一些做品牌包的网站
  • 思科网站建设配置站点dns服务凡科网免费建站官网