[bzoj1110][POI2007]砝码Odw_贪心
bzoj-1110 POI-2007 砝码Odw
参考博客:http://hzwer.com/4761.html
题目大意:在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作。公司有一些固定容量的容器可以装这些砝码。他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码。每个容器可以装的砝码数量有限制,但是他们能够装的总重量不能超过每个容器的限制。一个容器也可以不装任何东西。任何两个砝码都有一个特征,他们的中总有一个的重量是另外一个的整数倍,当然他们也可能相等。
数据范围:$1\le n,m\le 10^5$,$1\le w_i\le 10^9$,$1\le m_i\le 10^9$。
想法:
题目的意思就是把所有砝码从小到大排序之后,后一个是前一个的倍数。
那么对于一个容量来讲,如果是最小的数的倍数,就一定可以被像进制一样被这$n$个数表示出来。
那么我们就从低往高了添就好了。
如果当前位没有了就向上一位借即可。

代码:
#include <bits/stdc++.h>
#define N 100010
using namespace std;
int a[N],b[N],c[N],s[N];
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd() {int x=0,f=1; char c=nc(); while(c<48) {if(c=='-') f=-1; c=nc();} while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x*f;}
int main()
{
int n=rd(),m=rd();
for(int i=1;i<=n;i++) a[i]=rd();
for(int i=1;i<=m;i++) b[i]=c[++c[0]]=rd();
sort(b+1,b+m+1); sort(c+1,c+c[0]+1);
c[0]=unique(c+1,c+c[0]+1)-c-1;
// cout << c[0] << endl ;
for(int i=1;i<=n;i++)
for(int j=c[0];j;j--)
s[j] += a[i]/c[j], a[i]%=c[j];
// for(int i=1;i<=c[0];i++) printf("%d ",s[i]);
// cout << endl ;
int ans=0;
for(int i=1;i<=m;i++)
{
// cout << b[i] << endl ;
int l=lower_bound(c+1,c+c[0]+1,b[i])-c,r=l;
// cout << l << ' ' << r << endl ;
while(r<c[0] && !s[r]) r++;
// cout << r << endl ;
if(!s[r]) break;
for(int j=l;j<r;j++) s[j] ++ ;
s[r] -- ;
ans ++ ;
}
cout << ans << endl ;
return 0;
}
小结:贪心不难想到,怎么贪心就比较神奇。
看见这种序列往进制上想。
[bzoj1110][POI2007]砝码Odw_贪心的更多相关文章
- 【BZOJ1110】[POI2007]砝码Odw 贪心
[BZOJ1110][POI2007]砝码Odw Description 在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作.公司有一些固定容量的容器可以装这些砝码 ...
- bzoj 1110 [POI2007]砝码Odw 贪心+进制转化
[POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 661 Solved: 366[Submit][Status][Disc ...
- BZOJ 1110: [POI2007]砝码Odw( 贪心 )
ORZjcvb... #include<bits/stdc++.h> using namespace std; ; int N, M, item[maxn], V[maxn]; vecto ...
- BZOJ1110: [POI2007]砝码Odw
Description 在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作.公司有一些固定容量的容器可以装这些砝码.他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码 ...
- BZOJ 1110: [POI2007]砝码Odw
1110: [POI2007]砝码Odw Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 547 Solved: 296[Submit][Status ...
- 【BZOJ】1110: [POI2007]砝码Odw
题意 给定\(n\)个砝码和\(m(1 \le n, m \le 100000)\)个背包\((1 \le n_i, m_i \le 1000000000)\),保证对于任意两个砝码都有一个是另一个的 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 51nod 1449 砝码称重(贪心算法)
题目:传送门. 题意:中文题. 题解:左物右码,w进制.m%w==0||m%w==1||m%w==w-1都是可以的,否则是NO. #include <iostream> #include ...
- [POI2007]ODW-Weights(贪心)
在byteotian公司搬家的时候,他们发现他们的大量的精密砝码的搬运是一件恼人的工作.公司有一些固定容量的容器可以装这些砝码.他们想装尽量多的砝码以便搬运,并且丢弃剩下的砝码.每个容器可以装的砝码数 ...
随机推荐
- strchr函数
函数原型:extern char *strchr(char *str,char character) 参数说明:str为一个字符串的指针,character为一个待查找字符. 所在库名 ...
- 洛谷 P3958 奶酪
谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...
- bootstrap历练实例:标签式的导航菜单
本章将讲解bootstrap提供的用于定义导航元素的一些选项,它使用相同的标签和基类.nav.Bootsrtap也提供了一个用于共享标记和状态的帮助器类.改变修饰的class,可以在不同的样式间进行切 ...
- Bootstrap历练实例:块级按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- ios之UIActionSheet
UIActionSheet是在IOS弹出的选择按钮项,可以添加多项,并为每项添加点击事件. 为了快速完成这例子,我们打开Xcode 4.3.2, 先建立一个single view applicatio ...
- 洛谷 P1663 山
https://www.luogu.org/problemnew/show/P1663 可能在这里看会好一点:[题解]
- Linux用户身份(命令详解与补正)
基于Red Hat Enterprise Linux 7.5 Linux中的root就是存在于所有类UNIX系统中的超级用户,持有最高管理权限,能添加/删除用户.开关机.关闭或开启硬件或者系统服务等, ...
- jsDate()
var myTime=new Date();//myTime的数据类型为(typeof) object //下面得到的都为number 类型 getFullYear();年 四位数字返回年份. get ...
- sublime text 3搭建python 的ide
感谢大佬-->原文链接 1. 打开Sublime text 3 安装package control Sublime Text 3 安装Package Control 2. 安装 SublimeR ...
- js的setInterval和setTimeout的那些浅坑
setInterval和setTimeout的区别简单提一下 setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函数,直到 clearInterval() ...