江西财经大学第一届程序设计竞赛 I 题 小P和小Q

题目链接:https://www.nowcoder.com/acm/contest/115/I

这题目要注意的是!!!pow函数前强制类型转换一定要float !!!一定要是float,double不可以,否则数据一大就会出错,cbrt函数也是这样!!!

解题思路:每回合的k都不一样,所以我们找找规律看看。假设最后 a 得到 x1 分,b 得到 x2 分。假设 a 赢了两局,b 赢了一局那么我们是不是可以将 x1拆分为 x1= k12*k22*k3, 则 x2=k1*k2*k3

那么就有(x1*x2)1/3==n (n为正整数) 。

这道题还要特判一下,比如a 1分,b  8分。虽然开3次方为2,是正整数,但是却得不到。后台数据也没有卡这点。

AC代码:

 1 #include<iostream>
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int main(){
 5     int t;
 6     cin>>t;
 7     while(t--){
 8         long long a,b;
 9         cin>>a>>b;
10         long long c=a*b;
11         if(a==1&&b==1){
12             cout<<"Yes"<<endl;
13         }else if(a==1&&b!=1){
14             cout<<"No"<<endl;
15         }else if(a!=1&&b==1){
16             cout<<"No"<<endl;
17         }else{
18             long long ans=(float)pow(c,1.0/3.0);  //float !!!一定要是float,double不可以,否则数据一大就会出错,cbrt函数也是这样!!!
19             long long va=ans*ans*ans; 
20             if(va==c){
21                 cout<<"Yes"<<endl;
22             }else{
23                 cout<<"No"<<endl;
24             }
25         }
26     }
27     return 0;
28 }

猜你喜欢

转载自www.cnblogs.com/ISGuXing/p/8907286.html