zcmu-1951
1951: ly和wjw的無聊游戲
Time Limit:?1 Sec??Memory Limit:?128 MB
Submit:?60??Solved:?20
[Submit][Status][Web Board]
Description
?眾所周知,ly和wjw是好朋友,某天特別無聊,他們想自己編一個游戲代碼,無奈水平有限,只會寫個random每次輸出一個隨機數,于是他們自己制定了一個游戲規則
游戲由多輪組成,每一輪中由計算機輸出一個自然數$k_i$,然后ly和wjw會同時喊出一個數字,誰喊出的數字更靠近這個$k_i$就獲勝,獲勝的人的得分會乘上$k_i^2$,失敗者的得分乘上$k_i$.
雖然這個游戲很無聊,但是為了打發時間,ly和wjw居然玩了一下午,但是由于記錄游戲步驟的ly弄丟了他們記錄T場游戲的筆記本,但是好在wjw還依稀記得每場比賽最終的結局是ly獲得了$a_i$分,wjw獲得了$b_i$分。但是他的記憶是模糊的,他希望能夠驗證沒對$a_i$和$b_i$是否正確。
每場游戲一開始ly和wjw的積分都是$1$.
wjw和ly不想太麻煩你,他們只想知道對于每組ai和bi的結局是否是一個正確的最終得分。
Input
?第一行輸入一個T,表示總共進行了$T$組游戲$\left(T \leq 500000\right)$
接下來的$T$行,每行兩個整數$a_i$和$b_i$表示wjw記得的每一場比賽兩人的最終得分$(1<=a_i,b_i<=10^9)$
Output
?對于每一對$a_i$和$b_i$,如果這對最終得分是正確的,那么輸出"$Ok$",否則輸出"$Error$".
Sample Input
4
16 16
2 4
1 1
18 19
Sample Output
Error
Ok
Ok
Error
?
哎!!!wjw和ly的好無聊(滑稽表情)玩這個游戲。想知道wjw和ly是誰嗎?快來問問我吧!!可以下面評論哦
——————————————————————————————————————————————————
解析:因為都是1開始的,而且每次*k^2,或者*k,我們可以發現,要是比分符合題意,肯定兩個數的乘積一定是k的3次
也就是n*m開3次方,在自然數里面肯定可以找到這個k,所以我們就可以二分去找了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() {int t;scanf("%d",&t);while(t--){int f=0;ll n,m;scanf("%lld%lld",&n,&m);if(n*n%m==0&&m*m%n==0){ll l=1,r=1000005,mid; while(l<=r){mid=(l+r)/2; if(mid*mid*mid==n*m){f=1;break;}if(mid*mid*mid<n*m)l=mid+1;elser=mid-1;}if(f)puts("Ok");else puts("Error");}else{puts("Error");}}return 0; }?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: zcmu-1934(卡特兰数大数取模(逆
- 下一篇: springcloud hystrix实