砝码从小到大放最优,二分答案mid,转化为判定前mid小的砝码能否放完。

从大到小考虑砝码,依次扫描每个容器,能放就放。

由于砝码重量都成倍数关系,所以最多只有$O(\log n)$种不同的数字,所以总复杂度为$O(n\log^2n)$。

#include<cstdio>
#include<algorithm>
#define N 100010
int n,m,i,j,k,t,a[N],b[N],c[N],l,r,mid,ans;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
bool check(int x){for(i=1;i<=n;i++)c[i]=a[i];for(;x;x=j){for(j=x-1;b[x]==b[j];j--);for(t=x-j,i=1;i<=n&&t;i++){k=c[i]/b[x];if(k>t)k=t;c[i]-=k*b[x],t-=k;}if(t)return 0;}return 1;
}
int main(){read(n),read(m);for(i=1;i<=n;i++)read(a[i]);for(i=1;i<=m;i++)read(b[i]);std::sort(b+1,b+m+1),l=1,r=m;while(l<=r)if(check(mid=(l+r)>>1))l=(ans=mid)+1;else r=mid-1;return printf("%d",ans),0;
}

  

转载于:https://www.cnblogs.com/clrs97/p/4614599.html

BZOJ1110 : [POI2007]砝码Odw相关推荐

  1. bzoj1110: [POI2007]砝码Odw

    神题 考虑到有倍数关系这个条件,所以可以运用进制的思想,比如当有3,9,18,54这些种类的砝码时,133的容量可以写成2*54+1*18+0*9+2*3+1,末尾的+1永远用不上,可以舍弃,那么各位 ...

  2. bzoj1108[POI2007]天然气管道Gaz*

    bzoj1108[POI2007]天然气管道Gaz 题意: n个钻井,n个站,要求两两配对,但站必须在钻井的右下方.配一对的费用为两点的曼哈顿距离,求最小总费用.n≤50000. 题解: 发现满足条件 ...

  3. 【算法题】天平砝码称重

    总结:天平有三种状态.左边,右边,平衡,因此天平问题一般是三进制 1.用最少的砝码称出1到100克的物品 给定一个天平,用最少的砝码称出1到100克的物品,砝码重量任选 假设物品放在右边,砝码可以放在 ...

  4. C程序设计的抽象思维-递归过程-砝码称重

    [问题] 在狄更斯时代,商人们用砝码和天平来称量商品的重量,假设你仅仅有几个砝码,就仅仅能精确地称出一定的重量.比如,假定仅仅有两个砝码:各自是1kg和3kg. 仅仅用1kg的砝码能够称出1kg重量的 ...

  5. 由于应用universal link校验不通过_垃圾吊称重校验砝码2000kg市场行情分析

    垃圾吊称重校验砝码2000kg市场行情分析 说明:近期,有很多朋友反映垃圾吊称重校验砝码价格上涨幅度较大,已经达到了今年的高峰期.其实不然,因为砝码的主要成分是铁,而今年国内的铁价大幅上涨,原材料的涨 ...

  6. 智力题:砝码称重问题

    第一题 假设有280g食盐,有一架天平,有两个砝码,分别是14g,4g.请问能否在3次内将280g食盐分为100g和180g两堆,请详细描述你的解决方法 解法一: 第一次:平分280g的食盐:140g ...

  7. BZOJ 1101: [POI2007]Zap

    题目 1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题: ...

  8. BZOJ1103: [POI2007]大都市meg

    题解:dfs序用树状数组维护即可 Problem: 1103User: c20161007Language: C++Result: AcceptedTime:4872 msMemory:23832 k ...

  9. [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演

    1,[POI2007]ZAP-Queries ---题面--- 题解: 首先列出式子:$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]$ ...

最新文章

  1. Python中怎么判定一个List里面的元素是不是全部一样
  2. DFS Codeforces Round #299 (Div. 2) B. Tavas and SaDDas
  3. WinForm编程细节
  4. Oracle procedure调用实例
  5. android如何使用xml资源文件,Android-使用xml文件资源定义菜单
  6. 我终于搞清楚了和String有关的那点事儿。
  7. Hibernate Session merge,update,save,saveOrUpdate,persist
  8. MFC开发IM-第八篇、调整各个控件的上下tab顺序
  9. 03 unix 设计哲学和流重定向
  10. nexus下载安装和创建maven私库
  11. 昆明冶金职业技术学院计算机,昆明冶金高等专科学校官网
  12. 2019年技术盘点容器篇(三):阿里专家谈容器:既叫好又叫座? | 程序员硬核评测...
  13. Android 图片文字识别
  14. java 其他文件转pdf_java 其他文件转成pdf java生成pdf
  15. 杜兰特全部比赛录像合集【百度网盘高清分享】
  16. 记第一次使用CDSN进行学习记录
  17. 超星浏览器4.0漏洞0day Exp
  18. java算数题--剪子包袱锤、完数、年月
  19. mysql disable keys_MySQL DISABLE/ENABLE KEYS的作用
  20. 可转债新规内容及影响

热门文章

  1. java 启动jar包JVM参数
  2. Material Design组件之NavigationView
  3. Java10的新特性
  4. 项目开发周期与数据库设计对比
  5. PostgreSQL数值类型--浮点类型和序列
  6. SDWebImage之工具类
  7. 10 个实用技巧,让 Finder 带你飞
  8. 在Ubuntu下安装qq
  9. jboss6启动报错
  10. BlockingQueue - LinkedBlockingQueue常用API