令$f(x)=\frac{x^{2}+c}{x}$,换言之即$x$物品的性价比的倒数

对其求导即$f'(x)=1-\frac{c}{x^{2}}$,其导数严格递增,换言之即是一个严格下凸函数,记$x_{0}$为其最小值的位置,那么不难证明$x_{0}=\lfloor\sqrt{c}\rfloor$或$\lceil\sqrt{c}\rceil$

性质1:存在最优解,使得其不存在一个$x\ge 2x_{0}$的物品

对于$x\ge 2x_{0}$的物品,考虑拆分为$x_{0}+(x-x_{0})$,代入化简即求证$2x_{0}(x-x_{0})\ge c$,由于$x\ge 2x_{0}$,即要求$2x_{0}^{2}\ge c$,显然成立

性质2:存在最优解,使得不存在若干个体积非$x_{0}$的物品,且体积和为$x_{0}$的倍数

将这些物品用若干个$x_{0}$来代替是不劣的——

从性价比的角度来考虑,对于两个物品合并后的性价比显然在合并前两物品的性价比区间中

由于$x_{0}$的性价比最大(性价比倒数最小),因此其余物品合并后性价比一定不超过$x_{0}$,而仅含有$x_{0}$的话一定恰好为$x_{0}$的性价比,即不劣

推论1:存在最优解,使得不存在$x_{0}$个体积非$x_{0}$的物品

对于$x_{0}$个物品,必然会存在一个子集使得其体积和为$x_{0}$的倍数

推论2:存在最优解,使得体积非$x_{0}$的物品和不超过$3c$

根据推论1,至多$x_{0}-1$个物品,根据性质1,每一个物品体积不超过$2x_{0}-1$,显然$(x_{0}-1)(2x_{0}-1)\le 3c$,即成立

设$V$是需要填充的体积($\max(k-a_{i},0)$),对$V\le 3c$用背包预处理,复杂度为$o(c\sqrt{c})$(物品体积小于$2x_{0}$),接下来考虑$V>3c$的问题:

性质3:存在一组最优解,使得其至多选择两种体积的物品,且为$x$和$x+1$

当我们同时选择了$x$和$y$两个物品,且满足$x+1\le y-1$,根据凸性(或代入展开),不难得到选择$x+1$和$y-1$一定不劣,即可以使得其不存在

推论3:当$V>3c$,$x=x_{0}$或$x_{0}-1$

若$x\ne x_{0}$或$x_{0}-1$,即$x_{0}\notin \{x,x+1\}$,那么即不为$x_{0}$的物品体积和大于了$3c$,矛盾

以$x=x_{0}$为例,先选择$s$个$x_{0}$,再将其中$V-sx_{0}$个个物品变为$x_{0}+1$,由于$x_{0}+1$的物品个数要小于$x_{0}$(根据推论1),因此是$s$是唯一的

通过上述,我们填充$V$体积的最优解可以$o(1)$得到,复杂度为$o(c\sqrt{c}+nq)$,无法通过

接下来,由于$k$和$a_{i}$是随机的,因此$V\le 3c$的概率为$o(\frac{c}{1e9})$,对于这一类暴力统计,复杂度为$o(c\sqrt{c}+\frac{nqc}{1e9})$(具体可以将$k$排序后利用单调性来找)

对于$V>3c$的情况,继续分析不难发现答案即
$$
(x_{0}^{2}+c)\frac{V-r}{x_{0}}+\min((2x_{0}+1)r,(x_{0}^{2}+c)+(x_{0}-r)(2x_{0}-1))
$$
(其中$V\equiv r(mod\ x_{0})$且$0\le r<x_{0}$)

后者仅与$r$有关,利用单调性,维护出$a_{i}$模$x_{0}$的每一类中的个数以及$V$的和,即可做到$o(q\sqrt{c})$的复杂度

最终总复杂度为$o(c\sqrt{c}+\frac{nqc}{1e9}+q\sqrt{c})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define C 10005
5 #define X0 105
6 #define ll long long
7 #define fi first
8 #define se second
9 pair<int,int>q[N];
10 int t,n,c,m,x0,a[N],f[C*3],sum1[X0];
11 ll sum2[X0],ans[N];
12 int cost(int k){
13 return 1LL*k*k+c;
14 }
15 int calc(int k){
16 return min((2*x0+1)*k,cost(x0)-(x0-k)*(2*x0-1));
17 }
18 int main(){
19 scanf("%d",&t);
20 for(int ii=1;ii<=t;ii++){
21 scanf("%d%d%d",&n,&c,&m);
22 x0=(int)sqrt(c);
23 if (cost(x0)*(x0+1)>cost(x0+1)*x0)x0++;
24 memset(f,0x3f,sizeof(f));
25 f[0]=0;
26 for(int i=1;i<2*x0;i++)
27 for(int j=i;j<=3*c;j++)f[j]=min(f[j],f[j-i]+cost(i));
28 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
29 sort(a+1,a+n+1);
30 for(int i=1;i<=m;i++){
31 scanf("%d",&q[i].fi);
32 q[i].se=i;
33 }
34 sort(q+1,q+m+1);
35 memset(sum1,0,sizeof(sum1));
36 memset(sum2,0,sizeof(sum2));
37 memset(ans,0,sizeof(ans));
38 for(int i=1,l=1,r=1;i<=m;i++){
39 while ((l<=n)&&(a[l]<q[i].fi-3*c)){
40 sum1[a[l]%x0]++;
41 sum2[a[l]%x0]+=a[l];
42 l++;
43 }
44 while ((r<=n)&&(a[r]<=q[i].fi))r++;
45 for(int j=l;j<r;j++)ans[q[i].se]+=f[q[i].fi-a[j]];
46 for(int j=0;j<x0;j++){
47 int jj=(q[i].fi-j)%x0;
48 ans[q[i].se]+=1LL*sum1[j]*calc(jj)+(1LL*sum1[j]*(q[i].fi-jj)-sum2[j])/x0*cost(x0);
49 }
50 }
51 printf("Case #%d:\n",ii);
52 for(int i=1;i<=m;i++)printf("%lld\n",ans[i]);
53 }
54 }

[gym102822I]Invaluable Assets的更多相关文章

  1. Yii2 assets注册的css样式文件没有加载

    准备引入layui.css文件的,在LayuiAssets类中已经配置了资源属性 <?php namespace frontend\assets; use yii\web\AssetBundle ...

  2. Liquid Exception: Included file '_includes/customizer-variables.html' not found in assets/bootstrap/docs/customize.html 解决方案

    执行下面这句话即可 rm -rf source/assets/bootstrap/docs/

  3. com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK assets/com.xx.xx

    完整的Error 信息(关键部分) Error:Execution failed for task ':fanwe_o2o_47_mgxz_dingzhi:transformResourcesWith ...

  4. Android之assets资源

    assets目录下存放的原生资源文件,通过getAssets()方法获取. 使用: InputStream inputStream; try { inputStream = getAssets().o ...

  5. android raw和assets的区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1**.res/raw中的文件会被映 ...

  6. iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)

    从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示. 并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效. 出现以下情况: Failed to locate or generat ...

  7. ERROR ITMS-90682: Invalid Bundle - The asset catalog at 'Payload/XXXXX/Assets.car' can't contain 16-bit or P3 assets if the app supports iOS 9.3 or earlier.

    刚升级Xcode 8, 幺蛾子又出现了.提交的时候出了这个问题. BTW,感谢google.以下为解决方案:‘ 在 Xcode 8 中,当你资源文件中[含有16位图]或者[图片显示模式γ值为'P3'] ...

  8. [iOS]坑爹的ALAsset(Assets Library Framework)

    Assets Library Framework 可以用来做iOS上的多选器,选照片视频啥的啦就不介绍了. 目前的项目有点类似dropbox,可以选择设备内的照片然后帮你上传文件,使用了Assets ...

  9. assets 加载资源文件

    引用:http://abc20899.iteye.com/blog/1096620 1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以 ...

随机推荐

  1. Go语言核心36讲(Go语言基础知识一)--学习笔记

    01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...

  2. 定制input元素

    定制input元素 input元素可以用来生成一个供用户输入数据的简单文本框.其缺点在于用户在其中输入什么值都可以.有时这还不错,但是有时设计者可能希望让用户输入特定类型的数据.在后一种情况下,可以对 ...

  3. SpringBoot-集成SpringSecurity

    在 Web 开发中,安全一直是非常重要的一个方面. 安全虽然属于应用的非功能性需求,但是从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中. Spring Security官网 ...

  4. docker初探和基础搭建

    个人博客 docker中文手册 Docker 是什么? docker是一个开源的软件部署解决方案: docker也是轻量级的应用容器框架: docker可以打包.发布.运行任何的应用. 在我的粗浅理解 ...

  5. NX开发库版本问题

    有做NX二次开发的朋友经常问我这样的问题:我在NX8.0上开发的程序,可以在NX9.0上运行吗? 由于NX的开发库随着版本的更新也会不断更新,会增加新的方法,同时有些也会过时或者消失. 如下图:NX8 ...

  6. CentOS 压缩解压

    目录 命令 tar gzip.gunzip bzip2.bunzip2 zip.unzip 命令组合 打包:将多个文件合成一个总的文件,这个总的文件通常称为"归档". 压缩:将一个 ...

  7. 【UE4 C++ 基础知识】<5> 容器——TArray

    概述 TArray 是UE4中最常用的容器类.其速度快.内存消耗小.安全性高. 其设计时未考虑扩展问题,因此建议在实际操作中勿使用 新建(new) 和 删除(delete) 创建或销毁 TArray ...

  8. TDengine在数益工联工业物联采集平台建设中的初步实践

    作者:易永耀 夏杭泰 邓炜兴 公司介绍 数益工联致力于打造基于数据流+价值流的离散制造业数字化软件:应用新一代的物联网技术与丰富的现场交互手段,融合工业工程精益思想,为离散制造业客户的数字化升级提供从 ...

  9. redis中lua脚本的简单使用

    一.背景 在使用redis的过程中,发现有些时候需要原子性去操作redis命令,而redis的lua脚本正好可以实现这一功能.比如: 扣减库存操作.限流操作等等. redis的pipelining虽然 ...

  10. 小白自制Linux开发板 九. 修改开机Logo

    许久不见啊,今天我们继续来修改我们的系统. 通过前面的几篇文章我们已经能轻松驾驭我们的开发板了,但是现在都是追求个性化的时代,我们在开发板上打上了自己的Logo,那我们是否可以改变开机启动的Logo呢 ...