zoukankan      html  css  js  c++  java
  • CF833A The Meaningless Game 思维

    题目

    Slastyona和她的忠实狗狗普什克正在玩一个毫无意义但是很有趣的游戏。游戏包括多个回合。

    它的规则非常简单:先选择一个自然数k。然后,谁说(或吠)的比另一个快就会赢得一局。胜利者的得分在那之后会乘以k的平方,而输了的人的得分就只能乘以k。比赛开始时,Slastyona和PurSok都有一个初始分数。不幸的是,Slastyona丢失了记事本,那里记录了他们玩过的N个游戏的历史。她设法回忆了每一场比赛的最终结果,但是记忆都很模糊。帮助Slastyona验证它们的正确性,或者,换句话说,对于每一对给定的分数,确定游戏是否能够完成这样的结果。

    输入输出样例

    输入 #1

    6
    2 4
    75 45
    8 8
    16 16
    247 994
    1000000000 1000000
    

    输出 #1

    Yes
    Yes
    Yes
    No
    No
    Yes
    

    题意

    ​ 现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k,现在给你最终这两个人的得分a,b,让你判断是否有这个可能,有可能的话Yes,否则No。

    分析

    由于每次都是一个数乘k,一个数乘(k^2),那么每次这两个数都乘(k^3),如果可以满足条件,那么给出的个数的乘积一定是一个整数的三次方

    我不知道c++有没有开立方的函数,但是可以用pow(x, (frac{1}{3}))来表示x的立方根。

    由于pow返回的是double类型,如果判断x的立方根是否是整数会有精度损失,所以可以将x的立方根四舍五入后再乘以它的立方判断是否等于x。

    同时还需要判断x的立方根是否是a,b的因数。、

    代码

    /*************************************************************************
    	> File Name: v.cpp
    	> Author: LiuGeXian
    	> Mail: 1019630230@qq.com 
    	> Created Time: 2020/4/22 11:01:25
     ************************************************************************/
    
    #include <bits/stdc++.h>
    using namespace std;
    int T;
    int main(){
    	scanf("%d", &T);
    	while (T--){
    		long long a, b;
    		scanf("%lld %lld", &a, &b);
    		long long x = a * b;
    		long long y = pow(x, 1 / 3.0) + 0.5;
    		if (y * y * y != x || a % y || b % y) printf("No
    ");
    		else printf("Yes
    ");
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    easycom HBuilderX 2.5.5起支持easycom组件模式
    我们为什么需要async/await ?
    封装uni.request请求
    uniapp 更新
    uniapp中plus的使用
    uniapp 自适应不同比例的屏幕
    npm 设置淘宝镜像、nrm、nodemon
    uniapp之nvue入坑
    Android平台签名证书(.keystore)生成指南
    day 37 数据库MySQL的进一步认识
  • 原文地址:https://www.cnblogs.com/ghosh/p/12751134.html
Copyright © 2011-2022 走看看