兰州烧饼 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热。当然,一次只能弄一个的话,效率就太低了。有这么一个大平底锅,一次可以同时放入k个兰州烧饼,一分钟能做好一面。而现在有n个兰州烧饼,至少需要多少分钟才能全部做好呢? 输入 依次输入n和k,中间以空格分隔,其中1 <= k,n <= 100000 输出 输出全部做好至少需要的分钟数 样例输入 3 2 样例输出 3 提示 如样例,三个兰州烧饼编号a,b,c,首先a和b,然后a和c,最后b和c,3分钟完成
被这道题吓到了,看起来很复杂
这道题的思路就是要充分利用锅子,尽量不让它空
每个烧饼有两个面,暂时把一个烧饼看成两个烧饼编号相同
假设2*n%k=0,则n个烧饼可以刚好用完2*n/k个锅子没有空。
否则最后还有剩余,在刚才的结果上要再加上一个锅子
好了,还有一个条件没有考虑,就是编号一样的饼不能在同一个锅子里。
首先要是饼的个数大于锅子的取值范围,能不能保证上面假设的正确性呢?要保证每一次饼的编号不一致,虽然代码AC了,但这个地方并没有能证明。
要是饼的个数小于等于锅子的取值范围,必定要煎两次,饼有两面,最少也是两次。
#include <iostream>
using namespace std;
int main()
{
int n,k;
while(cin >> n >> k)
{
if(n <= k)
cout << 2 << endl;
else
if((2*n)%k>0)
cout << (2*n/k) +1 << endl;
else
if((2*n)%k == 0)
cout << n*2/k << endl;
}
return 0;
}