题目直接链接

题意:

  某游戏规则:每次选定数字k(正整数),两人初始分数为1,获胜者分数乘k2,失败者分数成k,给你两个数字,判断是否可能是本游戏的两人的得分。

分析:

  为啥题意我不写判断两个数可不可以表示成a*a*b和a*b*b呢,因为这样我后面就没的写了。。。好的,那我们证明一下这两个的等价性:假设有n局游戏,每局的数字为k1。。。kn,然后A获胜的局数是

a1。。。ax,B获胜的局数是b1。。。by,那么A的分数:k(a1)*k(a1)*。。。*k(ax)*k(ax)*k(b1)*。。。*k(by),同样的,b的得分:k(a1)*。。。*k(ax)*k(b1)*k(b1)*。。。*k(by)*k(by)于是令a=k(a1)*。。。*k(ax),b=k(b1)*。。。*k(by),那么A的得分:a*a*b,B的得分a*b*b,然后再反过来证,如果AB的得分可以表示成a*a*b和a*b*b那么一定有可能,直接构造:就两局第一局分数为a,A赢,第二局分数为b,B赢。证完等价之后,我们考虑一下怎么判断能不能表示成a*a*b和a*b*b,其实我们可以直接求出a,b来。我们另A的分数是x,B的分数是y,那么gcd(x,y)=a*b*gcd(a,b)。x/gcd(x,y)=a/gcd(a,b);y/gcd(x,y)=b/gcd(a,b);令t1=gcd(a,b)*gcd(a,b)*gcd(a,b)=x/(x/gcd(x,y)*x/gcd(x,y)*y/gcd(x,y));

令t2=y/(x/gcd(x,y)*y/gcd(x,y)*y/gcd(x,y)),要满足t1=t2=k3(k为整数)即可。证明很简单,首先满足能表示成a*a*b和a*b*b一定能满足t1=t2=k3(k为整数)(这么推过来的),满足t1=t2=k3也一定满足可以表示成a*a*b和a*b*b(都把a,b找出来了,肯定没问题),那么就好办了。

  还有一个小小的问题,判断三次时最好不要从1到x二分,否则可能爆long long,如果不放心区间的话,判断时也不应写mid*mid*mid,总之要注意一些爆long long的地方。

代码:

#include <cstdio>
long long G(long long a,long long b){
if(b==)
return a;
return G(b,a%b);
}
int B(long long a){
long long l=,r=a;
while(l<=r){
long long mid=(l+r)/;
if(a%mid==&&mid*mid==a/mid)
return ;
else if(mid*mid<=a/mid)
l=mid+;
else
r=mid-;
}
return ;
}
int main(){
int n;
scanf("%d",&n);
long long js1,js2;
for(int i=;i<=n;i++){
scanf("%lld%lld",&js1,&js2);
long long js=G(js1,js2);
long long a=js1/js;
long long b=js2/js;
if(js1%(a*a*b)){
printf("No\n");
continue;
}
long long jsjs=js1/(a*a*b);
if(B(jsjs))
printf("No\n");
else if(jsjs*a*b*b==js2)
printf("Yes\n");
else
printf("No\n");
}
return ;
}

The Meaningless Game,算是思维吧。的更多相关文章

  1. Code Forces 833 A The Meaningless Game(思维,数学)

    Code Forces 833 A The Meaningless Game 题目大意 有两个人玩游戏,每轮给出一个自然数k,赢得人乘k^2,输得人乘k,给出最后两个人的分数,问两个人能否达到这个分数 ...

  2. 重构实践——为了try-catch大兴排场

    可能是我们共同的强迫症,不要说看到,就算想到太多的try-catch也很难接受. 于是,开始了一些尝试,这些尝试都算是思维的锻炼.场面的见识.经验的积累. Version1 —— 原始版本 一开始,在 ...

  3. C. Meaningless Operations Codeforces Global Round 1 异或与运算,思维题

    C. Meaningless Operations time limit per test 1 second memory limit per test 256 megabytes input sta ...

  4. The Meaningless Game 思维题

    题目描述 Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesti ...

  5. Unity3D 游戏前端开发技能树(思维导图)

    如果做游戏也是一种游戏,那么这个游戏的自由度实在是太高了.(导图源文件链接:http://pan.baidu.com/s/1eSHpH5o 密码:qzl5) 最近要用思维导图软件Xmind把自己的思路 ...

  6. SQL到NOSQL的思维转变

    NOSQL系统一般都会宣传一个特性,那就是性能好,然后为什么呢?关系型数据库发展了这么多年,各种优化工作已经做得很深了,NOSQL系统一般都是吸收关系型数据库的技术,然后,到底是什么因素束缚了关系型数 ...

  7. AngularJS应用开发思维之1:声明式界面

    这篇博客之前承接上一篇:http://www.cnblogs.com/xuema/p/4335180.html 重写示例:模板.指令和视图 AngularJS最显著的特点是用静态的HTML文档,就可以 ...

  8. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...

  9. Codeforces Round #426 (Div. 2)【A.枚举,B.思维,C,二分+数学】

    A. The Useless Toy time limit per test:1 second memory limit per test:256 megabytes input:standard i ...

随机推荐

  1. 借Adobe XD之力,自动生成Flutter代码

    概述 今天,我们来聊聊一个专门为"懒人程序员"准备的工具--Adobe XD.使用它可以快速将原型设计图转换为可执行的Flutter代码, 而由于Flutter自身跨平台的特性,因 ...

  2. Spring Boot 集成 Swagger 构建接口文档

    在应用开发过程中经常需要对其他应用或者客户端提供 RESTful API 接口,尤其是在版本快速迭代的开发过程中,修改接口的同时还需要同步修改对应的接口文档,这使我们总是做着重复的工作,并且如果忘记修 ...

  3. zabbix 监控交换机文本/日志信息

    简介 公司有台路由设备,需要每天去核对用户量,查看信息等.为了避免重复的工作量,就通过zabbix来完成这个重复性的工作. 先说下思路,首先要创建一个脚本,能从zabbix-server 或者zabb ...

  4. 源码分析(5)-ArrayList、Vector和LinkedList(JDK1.8)

    一.概述 1.线程安全:ArrayList和LinkedList非线程安全的.Vector线程安全的. 2.底层数据结构:ArrayList和Vector底层数据结构是数组:LinkedList双向链 ...

  5. 如何通过AzureAD平台提供的授权方式访问sharepoint online

    官方文档: 1.https://docs.microsoft.com/zh-cn/previous-versions/azure/dn645543(v=azure.100)?redirectedfro ...

  6. 4k壁纸

    4k

  7. PAT 1039 Course List for Student (25分) 使用map<string, vector<int>>

    题目 Zhejiang University has 40000 students and provides 2500 courses. Now given the student name list ...

  8. curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to storage.googleapis.com:443

    安装nvm的时候, ➜  ~ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 错 ...

  9. Chrome浏览器 Console调试台的简单使用

    打开调试台 方法1:在chrome浏览器中打开网页,按下F12,点击下图框选内容. 方法2: 浏览器中鼠标右键选择查看网页源代码后,再按上图操作.  调试台的功能 (因为是第一次使用这个调试台,只能罗 ...

  10. python第三方库大全

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...