记录编号 |
131510 |
评测结果 |
A |
题目名称 |
[POJ1017] 装箱问题 |
最终得分 |
100 |
用户昵称 |
奶猹 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.001 s |
提交时间 |
2014-10-24 16:40:46 |
内存使用 |
0.29 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<cmath>
#define min(a,b) ((a)<(b)?(a):(b))
int num[7];
int ans=0;
void work();
void outit();
int main()
{
freopen("packets.in","r",stdin);
freopen("packets.out","w",stdout);
while(scanf("%d%d%d%d%d%d",&num[1],&num[2],&num[3],&num[4],&num[5],&num[6])==6)
{
if(!num[1]&&!num[2]&&!num[3]&&!num[4]&&!num[5]&&!num[6])break;
work();
outit();
}
return 0;
}
void work()
{
ans=0;
ans+=num[6];
ans+=num[5];
num[1]-=11*num[5];
if(num[4])
{
ans+=num[4];
if(num[2]>=num[4]*5)num[2]-=num[4]*5;
else
{
num[1]-=36*num[4]-16*num[4]-4*num[2];
num[2]=0;
}
}
if(num[3])
{
ans+=num[3]/4;
num[3]%=4;
switch(num[3])
{
case 3:
{
ans++;
if(num[2]>=1) num[2]-=1,num[1]-=5;
else num[1]-=9;
break;
}
case 2:
{
ans++;
if(num[2]>=3) num[2]-=3,num[1]-=6;
else
{
num[1]-=18-num[2]*4;
num[2]=0;
}
break;
}
case 1:
{
ans++;
if(num[2]>=5) num[2]-=5,num[1]-=7;
else
{
num[1]-=27-num[2]*4;
num[2]=0;
}
break;
}
case 0:break;
}
}
ans+=num[2]/9;
num[2]%=9;
if(num[1]<0) num[1]=0;
int s=num[1]+num[2]*4;
if(s%36)
{
ans+=s/36+1;
}
else ans+=s/36;
}
void outit()
{
printf("%d\n",ans);
}