出题人有两个数组A,B,请你把两个数组归并起来使得$cost=\sum i c_i$最小.

归并要求原数组的数的顺序在新数组中不改变.

贪心水题

对于一段序列$A_i,A_{i+1},...,A_r$, 我们考虑向$A_k,A_{k+1}$间中间插入一个$x$.

贡献为$iA_i+(i+1)A_{i+1}+...+kA_k+(k+1)x+(k+2)A_{k+1}+...+(r+1)A_r$.

由$x$插入到$A_i$左端更优可以得到$\frac{A_i+...+A_k}{k-i+1}<x$.

由$x$插入到$A_r$右端更优可以得到$\frac{A_{k+1}+...+A_r}{r-k}>x$.

也就是说若某段序列的前一部分平均值小于后一部分, 那么这段序列看做一个整体会更优.

所以先将$A,B$按平均值合并后, 再贪心归并, 归并的贪心证明同理.

要注意数组开两倍

  1. #include <iostream>
  2. #include <sstream>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #include <math.h>
  6. #include <set>
  7. #include <map>
  8. #include <queue>
  9. #include <string>
  10. #include <string.h>
  11. #include <bitset>
  12. #define REP(i,a,n) for(int i=a;i<=n;++i)
  13. #define PER(i,a,n) for(int i=n;i>=a;--i)
  14. #define hr putchar(10)
  15. #define pb push_back
  16. #define lc (o<<1)
  17. #define rc (lc|1)
  18. #define mid ((l+r)>>1)
  19. #define ls lc,l,mid
  20. #define rs rc,mid+1,r
  21. #define x first
  22. #define y second
  23. #define io std::ios::sync_with_stdio(false)
  24. #define endl '\n'
  25. #define DB(a) ({REP(__i,1,n) cout<<a[__i]<<' ';hr;})
  26. using namespace std;
  27. typedef long long ll;
  28. typedef pair<int,int> pii;
  29. const int P = 1e9+7, P2 = 998244353, INF = 0x3f3f3f3f;
  30. ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
  31. ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
  32. ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
  33. inline int rd() {int x=0;char p=getchar();while(p<'0'||p>'9')p=getchar();while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();return x;}
  34. //head
  35.  
  36. const int N = 2e5+10;
  37. int n, m, nn, mm, a[N], b[N], c[N];
  38. int c1[N], c2[N];
  39. ll w1[N], w2[N];
  40.  
  41. void solve(int *a, int *c, ll *w, int n, int &tot) {
  42. REP(i,1,n) {
  43. ++tot, c[tot]=1, w[tot]=a[i];
  44. while (tot>1&&w[tot-1]*c[tot]<w[tot]*c[tot-1]) {
  45. w[tot-1]+=w[tot],c[tot-1]+=c[tot];
  46. --tot;
  47. }
  48. }
  49. }
  50. void add(int *a, int l, int r) {
  51. REP(i,l,r) c[++*c]=a[i];
  52. }
  53. int main() {
  54. scanf("%d%d", &n, &m);
  55. REP(i,1,n) scanf("%d", a+i);
  56. REP(i,1,m) scanf("%d", b+i);
  57. solve(a,c1,w1,n,nn);
  58. solve(b,c2,w2,m,mm);
  59. int now = 1, la = 0, lb = 0;
  60. REP(i,1,nn) {
  61. while (now<=mm&&w1[i]*c2[now]<w2[now]*c1[i]) {
  62. add(b,lb+1,lb+c2[now]),lb+=c2[now];
  63. ++now;
  64. }
  65. add(a,la+1,la+c1[i]),la+=c1[i];
  66. }
  67. while (now<=mm) {
  68. add(b,lb+1,lb+c2[now]),lb+=c2[now];
  69. ++now;
  70. }
  71. ll ans = 0;
  72. REP(i,1,*c) ans+=(ll)i*c[i];
  73. printf("%lld\n", ans);
  74. }

牛客 545C 出题人的数组 (贪心)的更多相关文章

  1. 牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心

    https://ac.nowcoder.com/acm/contest/358/E 题意: 出题人有两个数组,A,B,请你把两个数组归并起来使得cost=∑i∗ci 最小,归并要求原数组的数的顺序在新 ...

  2. 牛客练习赛3 F - 监视任务——贪心&&树状数组

    题目 链接 $Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫..$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关.第 $i$ 份委托的内容为:对于 ...

  3. 牛客练习赛38 D 题 出题人的手环 (离散化+树状数组求逆序对+前缀和)

    链接:https://ac.nowcoder.com/acm/contest/358/D来源:牛客网 出题人的手环 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...

  4. 出题人的女装(牛客练习赛38题B) (概率+分式运算)

    链接:https://ac.nowcoder.com/acm/contest/358/B来源:牛客网 出题人的女装 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...

  5. 出题人的手环(牛客练习赛38D 离散化+树状数组)

    题目链接(https://ac.nowcoder.com/acm/contest/358/D) 题目描述 出题人的妹子送了出题人一个手环,这个手环上有 n 个珠子,每个珠子上有一个数. 有一天,出题人 ...

  6. 牛客练习赛38 D 出题人的手环

    链接 [https://ac.nowcoder.com/acm/contest/358/D] 题意 链接:https://ac.nowcoder.com/acm/contest/358/D 来源:牛客 ...

  7. 出题人的RP值(牛客练习赛38--A题)(排序)

    链接:https://ac.nowcoder.com/acm/contest/358/A来源:牛客网 题目描述 众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值. 然而 ...

  8. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  9. 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)

    链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...

随机推荐

  1. HDU 5858 Hard problem ——(计算几何)

    其实这题最多是个小学奥数题- -,,看到别人博客各显神通,也有用微积分做的(我也试了一下,结果到最后不会积...). 思路如下(这两张图是网上找来的): 然后就很简单了,算三角形面积可以用海伦公式,也 ...

  2. mysql统计前24小时数据没有补0

    SELECT t1. HOUR HOUR, COUNT(t2. HOUR) count FROM ( SELECT DATE_FORMAT( HOUR), '%y-%m-%d %H' ) HOUR F ...

  3. ROC和AUC————摘在网络

    ROC曲线 对于0,1两类分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络,得到诸如0.5,0,8这样的分类结果.这时,我们人为取一个阈值,比如0.4,那么小于0.4的为0类,大于等 ...

  4. [转]Cookie详解

    从事 Web 开发已有近17个月:在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感-差不多是了解一二,然而又非真切的明晰:这就使得再用的时候,总要去再搜索一番:如此颇为难受,倒不 ...

  5. ADS1.2与MDK4.7冲突问题的解决方法

    需要添加2个系统变量. 1.添加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib(实际Keil安装目录) 2.添加环境变量:ARMCC5INC变量值:C:\Keil ...

  6. shell案例(6):1、创建用户 2、创建目录 3、创建文件 4、退出

    脚本基本要求 1.创建用户2.创建目录3.创建文件4.退出 #!/bin/bash #author:zhiping.wang Check_error() { ] then echo "$1 ...

  7. 整型,长整型,无符号整型等 大端和小端(Big endian and Little endian)

    一.大端和小端的问题 对于整型.长整型.无符号整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian ...

  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_汇总

    第1节零基础快速入门SpringBoot2.0 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1.SpringBoot2.x课程介绍和高手系 ...

  9. DEDECMS 漏洞汇总

    日期:2019-08-08 10:20:28 更新: 作者:Bay0net 介绍: 0x01.组合拳拿 shell 漏洞版本:v5.5 - v5.7 前台任意用户密码重置 首先注册一个账户,账户名为 ...

  10. 使用gRPC打造服务间通信基础设施

    一.什么是RPC rpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制. 利用这种传输机制,不同进程(或服务)间像调用本地进程中 ...