这道题,属于模拟题。要注意,divisors是变化的。假设divisors有n个,如果第一个box用了1个,那么第二个box能用的divisors为n-1个。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int k,a,b,v,sec,Count;
int main()
{
while(scanf("%d %d %d %d",&k,&a,&b,&v) != EOF)
{
Count = 0;
while(a > 0)
{
if(b >= k)
{
sec = k;
b -= (k - 1);
}
else
if(b != 0)
{
sec = b + 1;
b = 0;
}
else
sec = 1;
a -= sec * v;
Count++;
//printf("%d %d %d %d\n",k,a,b,v);
}
printf("%d\n",Count);
}
return 0;
}
模拟题:箱子与除数
本文介绍了一道关于模拟算法的问题,通过不断减少可用除数(divisors)的数量来计算可以填充多少个箱子(box),每次填充都尽可能使用最多的除数。代码使用C++实现,并考虑了边界情况。
1298

被折叠的 条评论
为什么被折叠?



