zoukankan      html  css  js  c++  java
  • [CF833A] The Meaningless Game

    题目

    原题链接

    解说

    题目名称起的太好了!

    这道题属于思维/数学题,想明白了真的很简单。

    一个数可以由许多数相乘得到,每个组成它的数就像它的成分一样。给一个数乘(k)就相当于在其组成中增加了(k)。那么我们看看这道题。

    假设两个人分别为(A B),初始均为(1),那么一轮游戏中给(A)(k)就是在其组成中加入(k),同时在(B)的组成中加入两个(k)(AB)合计加入了三个(k)。显然(A×B)就相当于把(AB)混合在了一起,其所有成分都混合在了一起,所以(A×B)中一定含有三个(k)。那么我们只要判断(A×B)是否为完全立方数即可。

    于是我写出了第一代代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    inline ll read(){
        char ch=getchar();
        ll s=0,f=1;
        while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9') {s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}
        return s*f;
    }
    int main(){
    	int T;
    	cin>>T;
    	while(T--){
    		ll a,b;
    		a=read();b=read();
    		ll u=a*b;
    		ll m=pow(u,(1.0/3))+0.5;//计算立方根
      		//注意变为整数时+0.5四舍五入
    		if(m*m*m!=u) cout<<"No"<<endl;
    		else cout<<"Yes"<<endl;
    	}
    	return 0;
    }
    

    然后就WA了……

    哪里有问题?哦,我们忽略了一种情况,假如把三个(k)都放到一个数里,那么我的程序会输出(Yes),但事实上这是不符合条件的。我们还需要加一层条件,就是得到的立方根是(AB)两个数的因数。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    inline ll read(){
        char ch=getchar();
        ll s=0,f=1;
        while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9') {s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}
        return s*f;
    }
    int main(){
    	int T;
    	cin>>T;
    	while(T--){
    		ll a,b;
    		a=read();b=read();
    		ll u=a*b;
    		ll m=pow(u,(1.0/3))+0.5;
    		if(m*m*m!=u||a%m||b%m) cout<<"No"<<endl;
    		else cout<<"Yes"<<endl;
    	}
    	return 0;
    }
    

    幸甚至哉,歌以咏志。

  • 相关阅读:
    国庆后的星期一
    如何让百度快速收录文章
    牛大发了~美国12岁女孩自制"火箭"将Hello Kitty送上近太空
    免费CDN /初体验 访问量激升19%
    国外免费CDN CloudFlare申请教程
    Windows Azure Application申请方法
    坚持转自网易轻博客LOFTER
    玩转你的Gravatar全球通用头像
    IIS下配置WordPress永久链接支持中文完美方法
    常用的SqlHelper类
  • 原文地址:https://www.cnblogs.com/DarthVictor/p/12742969.html
Copyright © 2011-2022 走看看