codeforces 834 C The Meaningless Game

来源:互联网 发布:单身狗的嘲讽知乎 编辑:程序博客网 时间:2024/06/10 10:32

Problem

codeforces.com/contest/834/problem/C

Meaning

两人分数一开始都是 1,每一场比赛都选定一个数字 k,赢的人分数乘上k2,输的人乘上 k。现给出两个分数 a 和 b,问有没有可能经过若干场比赛后,两人的分数分别是 a 和 b。

Analysis

从得分算法来看,最终结果可以拆成:a=pq2,b=p2q,所以 ab 是个立方数,有:ab=(pq)3,而且 a 和 b 都能整除 pq。
二分找出 pq,判断(pq)3是不是等于 ab、a 是否整除 pq、b是否整除 pq。

Code

#include <iostream>using namespace std;int find(long long x){    int l = 0, r = 1000000;    for(long long m; l + 1 < r; )    {        m = l + r >> 1;        if(m * m * m < x)            l = m;        else            r = m;    }    return r;}int main(){    ios::sync_with_stdio(false);    cin.tie(0);    int n;    cin >> n;    for(long long a, b, c; n--; )    {        cin >> a >> b;        c = find(a * b);        if(c * c * c != a * b || a % c || b % c)            cout << "No\n";        else            cout << "Yes\n";    }    return 0;}
阅读全文
0 0
原创粉丝点击