best coder #56 div 2 A Clarke and minecraft(贪心)
2015-09-22 10:39
453 查看
Clarke and minecraft
Accepts: 304Submissions: 777
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
克拉克是一名人格分裂患者。某一天,克拉克分裂成了一个游戏玩家,玩起了minecraft。渐渐地,克拉克建起了一座城堡。 有一天,克拉克为了让更多的人分享自己的成果,开了局域网,并且选择创造模式。不幸的是,这一天有一个熊孩子进了克拉克的游戏,他在克拉克的城堡里放了很多个爬行者!当刚刚去外面打怪回、开着生存模式的克拉克回到城堡中的一瞬间,爬行者们突然自爆......(自行脑部画面)于是克拉克的城堡变成了一片废墟,圆石、木板、砖块等建筑材料撒落了一地。 无奈的克拉克只好拾起这些废墟,准备重建。克拉克建了足够的箱子后,想自己把这些散落的材料都搬运道箱子里。克拉克清楚的记得自己建的每一个东西当初用了多少材料以及材料的种类。现在克拉克想知道,克拉克至少需要搬运多少次,才能将所有的材料全部搬到箱子里。 注:材料可以堆叠,一个格子最多可以容纳64个相同材料。不同物品的材料可以在一次运输到箱子中。minecraft中背包栏一共有4*9=36个格子。
输入描述
第一行一个整数T(1 \le T \le 10)T(1≤T≤10),表示数据的组数。 每组数据第一行是一个正整数n(1 \le n \le 100)n(1≤n≤100),表示东西的数量。 接下来nn行,每一行有两个正整数a, b(1 \le a, b \le 500)a,b(1≤a,b≤500),aa表示这个东西的材料的种类,bb表示这种材料的数量。
输出描述
对于每组数据,输出一个整数,表示克拉克至少搬运的次数。
输入样例
2 3 2 33 3 33 2 33 10 5 467 6 378 7 309 8 499 5 320 3 480 2 444 8 391 5 333 100 499
输出样例
1 2
Hint
第一个样例,对于2号物品我们用2格来放,3号物品单独放,总共需要3个格子,运输1次。 贪心..尽量把一样的材料放在一起... 然后写蠢了..妈蛋... 详情见代码
/************************************************************************* > File Name: code/bc/#56/1001.cpp > Author: 111qqz > Email: rkz2013@126.com > Created Time: 2015年09月19日 星期六 18时55分49秒 ************************************************************************/ #include<iostream> #include<iomanip> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> #include<map> #include<set> #include<queue> #include<vector> #include<stack> #include<cctype> #define y1 hust111qqz #define yn hez111qqz #define j1 cute111qqz #define ms(a,x) memset(a,x,sizeof(a)) #define lr dying111qqz using namespace std; #define For(i, n) for (int i=0;i<int(n);++i) typedef long long LL; typedef double DB; const int inf = 0x3f3f3f3f; const int N=5E2+7; int a ,b ; int ans,cnt; int p ; int n; int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int T; cin>>T; while (T--) { ans = 0; cnt = 0; ms(p,0); scanf("%d",&n); for ( int i = 0 ; i < n ; i++ ) { scanf("%d %d",&a[i],&b[i]); p[a[i]]+=b[i]; } int kind = 0; for ( int i = 1 ;i <= 500 ; i++) { if (p[i]!=0) { // cnt = cnt + (p[i]-1)/64 + 1; cnt = cnt + (p[i]+63)/64; //这样写不知高到哪里去了. p[i] = 0; } } //ans = ans + (cnt-1)/36+1; ans = (cnt+35)/36; //不知高到哪里去了... printf("%d\n",ans); } #ifndef ONLINE_JUDGE fclose(stdin); #endif return 0; }
View Code
相关文章推荐
- vsftpd的安装和配置
- 我们是如何一步步沦为平庸的?
- logback和log4j配置
- 关注Parallels Desktop 10 for Mac破解版存在的危害
- WINDOWS SERVER 2012忘记开机密码
- iOS In-App Purchase 内购之使用产品元数据
- 四大类NoSQL数据库
- session实现购物系统的简例和application实现统计页面访问次数的简例
- 如何动态获取数据库表中的数据,数据库中的字段是在变化的
- java.lang.NullPointerException的问题与解决
- linux之inode详解
- Spring MVC form handling example
- 简简单单谈原理---web容器
- java knowledge record
- 扫描pdf转换成其他格式的方法
- 如何坚持每天学习
- 9-17 linux进程查看和管理
- CUDA SURF优化思路
- Error:CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temp
- java自学日记10