题意:有n个药瓶,里面有一个有毒,然后每次拿兔子去试吃k瓶并且只能是k瓶,如果兔子死了就知道那瓶是毒药了,现在问你最少兔子要试吃几次。
分析:这题卡了好久,其实很简单。先考虑肯定要吃n/k次,那么剩下的如果只有一瓶或没有,则答案就是n/k,如果有两瓶以上,则只需再吃一次就行了。因为兔子只需在剩下的m瓶里吃m-1瓶,然后在之前的n-m瓶中吃(k-m+1)瓶,就可以知道剩下的那个是毒药了。
1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <ctime> 5 #include <iostream> 6 #include <algorithm> 7 #include <set> 8 #include <vector> 9 #include <sstream> 10 #include <queue> 11 #include <typeinfo> 12 #include <fstream> 13 #include <map> 14 #include <stack> 15 using namespace std; 16 typedef long long ll; 17 int main() 18 { 19 ll n,k; 20 scanf("%I64d%I64d",&n,&k); 21 ll ans=n/k,r=n%k; 22 if(n==k&&n!=1) printf("-1 "); 23 else{ 24 if(k==1) printf("%d ",n-1); 25 else{ 26 if(r==0||r==1) printf("%I64d ",ans); 27 else printf("%I64d ",ans+1); 28 } 29 } 30 return 0; 31 }