ZJNU 2212 - Turn-based game

Mr.Lee每隔1/x s攻击一次,cpu每隔1/y s攻击一次

因为时间与答案无关,最后只看boss受到了多少次攻击

所以可以在每个人的频率上同时乘以xy

即Mr.Lee每隔y s攻击一次,cpu每隔x s攻击一次

这样看虽然时间延长但是结果不变

就可以二分查找出打败boss用时,最后再根据时间判断谁给予的最后一击

二分出用时t,则t%x==0表示cpu给予最后一击

t%y==0表示Mr.Lee给予最后一击

 1 #include<stdio.h>
 2 int main(){
 3     long long n,x,y,k,l,r,m,d1,d2;
 4     scanf("%lld%lld%lld",&n,&x,&y);
 5     while(n--){
 6         scanf("%lld",&k);
 7         l=1;
 8         r=1e15;
 9         while(l<r){
10             m=(l+r)>>1;
11             if(m/x+m/y>=k)
12                 r=m;
13             else
14                 l=m+1;
15         }
16         d1=r%x;
17         d2=r%y;
18         if(!d1&&!d2)
19             puts("Obviously Ruddy Eye is the first!");
20         else if(d1&&!d2)
21             puts("I like Ruddy Eye forever!");
22         else if(!d1&&d2)
23             puts("Spicy chicken computer!");
24     }
25     
26     return 0;
27 }

 

上一篇:1249. Minimum Remove to Make Valid Parentheses


下一篇:吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:使用Struts2的标签库(2)