首先抽自己一巴掌,A题自信提交直接WA,故写此题解警示一下(顺便水一水)。
翻译
思路
显然,若搅拌机单位时间能处理的水果数
x
x
x小于人每次丢进去的数量
y
y
y,那人只需要一直扔进去就好了,而搅拌机要考虑的可就多了 。所以直接每次处理
x
x
x个就行了,不用管
y
y
y。反之,若
x
>
y
x > y
x>y,则每次处理
y
y
y个就行了。
整理一下,需要的时间为: t = ⌈ n m i n ( x , y ) ⌉ t=\left \lceil \frac{n}{min(x, y)} \right \rceil t=⌈min(x,y)n⌉,此处为向上取整。
那我是怎么错的呢——为了方便,我没有用 c e i l ceil ceil方法,而是把式子变成了:
t = ( n − 1 ) / m i n ( x , y ) + 1 t=(n-1) / min(x, y) + 1 t=(n−1)/min(x,y)+1
解释一下,这里利用了C++的整数类型作除法自动向下取整的特点,检查一下 n n n整除或不整除 m i n ( x , y ) min(x,y) min(x,y)两种情况,,就会发现和原式等价。
但是,关键的地方来了,再读题发现 n n n可以等于 0 0 0,然后这个式子就出问题了……
解决方法就是加个特判。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int t; cin>>t;
while(t--) {
int n, x, y; cin>>n>>x>>y;
if(n == 0) cout<<0<<endl;
else cout<<(n-1) / min(x, y) + 1<<endl;
}
}