有n 座山,每座山有南北两面。
每一天,一些山的某一面(不一定相同) 会受到山魔的袭击。
但是山魔一天最多只会袭击k 座山。
当每座山的每一面都被袭击过后,山魔就会离开。
那么至少要经过多少天,山魔会消失?
Input
一行两个正整数n, k。
Output
一个整数,表示答案。
Examples
devil.in devil.out
3 2 3
Notes
对于所有数据,满足1 ≤ n, k ≤ 10。
Task1[10%]
k = 1
Task2[50%]
k ≤ 4
Task3[100%]
无特殊限制
思路:
这个问题其实就相当于我们小学学的“锅煎蛋”问题,给你蛋的数量n和锅的数量k,一个锅煎一面蛋要1分钟,求要几分钟可把每个蛋的两面煎完。
此题目很简单,代码如下。
代码:
#include<bits/stdc++.h> using namespace std; int n,k; int main() { freopen("devil.in","r",stdin); freopen("devil.out","w",stdout); cin>>n>>k; if(k>=n) cout<<2<<endl;//若锅比蛋多,则可以花1min去煎每个蛋的一面,所以要用2min。 else cout<<ceil(n*2/k*1.0)<<endl; return 0; }
证明:
若n为k的倍数,则毋庸置疑,ans=n*2/k;
若n>2*k,则可以把n减去s倍的k,使n<2*k(n=2*k时就变成上面的式子了)然后ans+=s*2;
这时候我们定义x=n-s*k。
再花1min煎x个蛋,花1min煎后x个蛋的另一面,ans+=2,所以剩下(n-x)*2个面。
又因为n<2*k,所以剩下的面<2k,ans+=2
所以ans=(s+2)*2,正好满足。证毕。