我是靠谱客的博主 霸气香烟,最近开发中收集的这篇文章主要介绍Codeforces Round #426 (Div. 1) A. The Meaningless Game,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Problem

定义 one game 有 multiple rounds (might be 0)。对于 every round,胜利的人分数乘以 k2 ,失败的分数乘以 k 。两人在 game 开始是的分数均为 1 。

N 个询问,每组询问 a b 分别代表两人 one game 的最终分数。问该 a b 是否存在可能为真实分数 ?

Limit

1N350000

1a,b109

其中 k 为自然数。

Idea

对于分数 a b 可分别表示成下列形式 :

  • a=k21k2iki+1ki+j
  • b=k1kik2i+1k2i+j

a×b=(k1kiki+1ki+j)3=K3 ,且 a 和 b 一定能被 K 整除。

故二分获取 K=a×b3 (或者通过 std::cbrt() 获取立方根)。判断是否满足上述条件。

Code

#include<bits/stdc++.h>
using namespace std;
long long Sqrt3(long long x) {
long long l = 1, r = min(x, (long long)1000000), val, mid;
while(l <= r) {
mid = (l+r) >> 1;
val = mid * mid * mid;
if(val > x) r = mid - 1;
else if(val < x)
l = mid + 1;
else
return mid;
}
return -1;
}
int main()
{
int n;
long long a, b, sumK;
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%lld %lld", &a, &b);
sumK = Sqrt3(a*b);
if(sumK == -1)
printf("Non");
else {
if(a % sumK || b % sumK)
printf("Non");
else {
a /= sumK;
b /= sumK;
if(a * b != sumK)
printf("Non");
else
printf("Yesn");
}
}
}
}

最后

以上就是霸气香烟为你收集整理的Codeforces Round #426 (Div. 1) A. The Meaningless Game的全部内容,希望文章能够帮你解决Codeforces Round #426 (Div. 1) A. The Meaningless Game所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部