1. 程式人生 > >第13屆廣東工業大學ACM校賽L-用來作弊的藥水

第13屆廣東工業大學ACM校賽L-用來作弊的藥水

連結:https://www.nowcoder.com/acm/contest/90/L
來源:牛客網

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld

題目描述

    在一個風雨交加的夜晚,來自異世界的不願透露姓名的TMK同學獲得了兩種超強藥水A、B。根據說明書,TMK知道了這兩種藥水的作用:
    (1)藥水A能使人的生命值提高,每飲用1個單位能使他生命值變成原來的x倍,即每飲用p個單位能使他的生命值變成原來的x^p(x的p次方)倍。
    (2)藥水B能使人的能量值提高,每飲用1個單位能使他能量值變成原來的y倍,即每飲用q個單位能使他的能量值變成原來的y^q(y的q次方)倍。
    於是TMK迫不及待地喝下了所有的a個單位的藥水A和b個單位的藥水B,他立馬體會到了自己能力的超強變化,然後他看了接下來的說明書:
    藥水A和藥水B能互相抑制對方的負面效果,一旦生命值提升的倍數和能量值提升的倍數不相等,那麼在五個小時後將會發生非常嚴重的後果。
    於是TMK同學慌了,他想知道自己提升的生命值和能量值的倍數是否相等,由於他非常慌張,所以他把計算的重任交給你了。

作為埃森哲公司的一員,你覺得這個問題很簡單,這得益於埃森哲公司分享知識的文化。

   分享知識已成為埃森哲源遠流長的文化。
   埃森哲公司在幫助客戶進行行之有效的知識管理的同時,它的管理層在其內部也進行了成功的知識管理的實踐。如今,在埃森哲,分享知識已成為其源遠流長的文化。在很大程度上,埃森哲公司的成功得益於其強大的知識管理系統。


輸入描述:

第一行一個整數T,代表有T組資料。(1<=T<=5000)
每組資料僅一行,包含四個整數x,a,y,b,意義為題目描述。(1<=x,a,y,b<=10^9)

輸出描述:

每組資料輸出一行"Yes"或"No"(不包含雙引號),表示TMK提升的生命值和能量值的倍數是否相等,相等為"Yes",不相等為"No"。
示例1

輸入

4
2 20 4 10
20 20 20 20
20 21 21 20
32768 32768 1048576 24576

輸出

Yes
Yes
No
Yes

算是個數學知識吧,完全都不知道可以C++裡面可以直接用log函式,現在算是學到了,還有就是判斷浮點數是否相等要用判斷差值小於一個極小數,因為浮點數小數點後面會有極小的誤差。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

int main()
{
    int T;
    double x,a,y,b;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf%lf%lf%lf",&x,&a,&y,&b);
        if(fabs(a * log10(x) - b * log10(y)) < 1e-6)
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }

    return 0;

}