[gym102822I]Invaluable Assets
令$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的更多相关文章
- Yii2 assets注册的css样式文件没有加载
准备引入layui.css文件的,在LayuiAssets类中已经配置了资源属性 <?php namespace frontend\assets; use yii\web\AssetBundle ...
- Liquid Exception: Included file '_includes/customizer-variables.html' not found in assets/bootstrap/docs/customize.html 解决方案
执行下面这句话即可 rm -rf source/assets/bootstrap/docs/
- 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 ...
- Android之assets资源
assets目录下存放的原生资源文件,通过getAssets()方法获取. 使用: InputStream inputStream; try { inputStream = getAssets().o ...
- android raw和assets的区别
*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1**.res/raw中的文件会被映 ...
- iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示. 并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效. 出现以下情况: Failed to locate or generat ...
- 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'] ...
- [iOS]坑爹的ALAsset(Assets Library Framework)
Assets Library Framework 可以用来做iOS上的多选器,选照片视频啥的啦就不介绍了. 目前的项目有点类似dropbox,可以选择设备内的照片然后帮你上传文件,使用了Assets ...
- assets 加载资源文件
引用:http://abc20899.iteye.com/blog/1096620 1.获取资源的输入流 资源文件 sample.txt 位于 $PROJECT_HOME/assets/ 目录下,可以 ...
随机推荐
- python函数参数类型:位置参数、默认参数、动态参数、关键字参数
1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...
- GAN实战笔记——第二章自编码器生成模型入门
自编码器生成模型入门 之所以讲解本章内容,原因有三. 生成模型对大多数人来说是一个全新的领域.大多数人一开始接触到的往往都是机器学习中的分类任务--也许因为它们更为直观:而生成模型试图生成看起来很逼真 ...
- 【数据结构与算法Python版学习笔记】图——拓扑排序 Topological Sort
概念 很多问题都可转化为图, 利用图算法解决 例如早餐吃薄煎饼的过程 制作松饼的难点在于知道先做哪一步.从图7-18可知,可以首先加热平底锅或者混合原材料.我们借助拓扑排序这种图算法来确定制作松饼的步 ...
- airtest常用指令
airtest 操作adb命令 常用adb 1)对特定设备执行adb指令 dev = connect_device("Android:///device1") dev.shel ...
- 自动化键盘,python
国际惯例先上源https://github.com/boppreh/keyboard#键盘输入 from pynput.keyboard import Key,Controller,Listener ...
- the Agiles Scrum Meeting 4
会议时间:2020.4.12 20:00 1.每个人的工作 今天已完成的工作 yjy:基本完成广播功能,修复bug issues:小组任务1-增量开发组 Bug:冲刺 wjx:继续实现注销功能的后端 ...
- springcloud整合seata
springcloud整合seata 一.背景 二.项目结构 三.实现功能: 四.项目使用到的技术 五.整合步骤 1.引入spring-cloud-starter-alibaba-seata jar包 ...
- spring cache整合redis
在项目中,我们经常需要将一些常用的数据使用缓存起来,避免频繁的查询数据库造成效率低下.spring 为我们提供了一套基于注解的缓存实现,方便我们实际的开发.我们可以扩展spring的cache接口以达 ...
- 『学了就忘』Linux基础命令 — 24、文件基本权限的相关命令
目录 1.chmod命令 2.权限模式 (1)用户身份. (2)赋予方式. (3)权限. 3.数字权限 4.文件常用权限 5.chown命令 6.chgrp命令 7.总结 常用基本权限操作命令: ch ...
- APP 自动化之系统按键事件(五)
转载记录方便后续自己使用: 代码就一句driver.keyevent()括号内填入的是物理按键的数字代号 代号表: 电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 ...