Gym 100187A-Potion of Immortality

题意:有n个药瓶,里面有一个有毒,然后每次拿兔子去试吃k瓶并且只能是k瓶,如果兔子死了就知道那瓶是毒药了,现在问你最少兔子要试吃几次。

分析:这题卡了好久,其实很简单。先考虑肯定要吃n/k次,那么剩下的如果只有一瓶或没有,则答案就是n/k,如果有两瓶以上,则只需再吃一次就行了。因为兔子只需在剩下的m瓶里吃m-1瓶,然后在之前的n-m瓶中吃(k-m+1)瓶,就可以知道剩下的那个是毒药了。

 

 1 #include 
 2 #include 
 3 #include 
 4 #include 
 5 #include 
 6 #include 
 7 #include <set>
 8 #include 
 9 #include 
10 #include 
11 #include 
12 #include 
13 #include 
14 #include 
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\n");
23     else{
24         if(k==1) printf("%d\n",n-1);
25         else{
26             if(r==0||r==1) printf("%I64d\n",ans);
27             else printf("%I64d\n",ans+1);
28         }
29     }
30     return 0;
31 }

 

转载于:https://www.cnblogs.com/RRirring/p/4665985.html

你可能感兴趣的:(Gym 100187A-Potion of Immortality)