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 }