ZJNU 2212

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给予最后一击

#include<stdio.h>
int main(){
    long long n,x,y,k,l,r,m,d1,d2;
    scanf("%lld%lld%lld",&n,&x,&y);
    while(n--){
        scanf("%lld",&k);
        l=1;
        r=1e15;
        while(l<r){
            m=(l+r)>>1;
            if(m/x+m/y>=k)
                r=m;
            else
                l=m+1;
        }
        d1=r%x;
        d2=r%y;
        if(!d1&&!d2)
            puts("Obviously Ruddy Eye is the first!");
        else if(d1&&!d2)
            puts("I like Ruddy Eye forever!");
        else if(!d1&&d2)
            puts("Spicy chicken computer!");
    }
    
    return 0;
}
原文地址:https://www.cnblogs.com/stelayuri/p/12238682.html