[CF833A]無意味なゲーム

タイトル

元のタイトルリンク

解説

タイトル名がいい!

この質問は思考・数学の問題で、とてもわかりやすいです。

数は多くの数を乗算することで得られ、それを構成する各数はその構成要素と同じです。数値に\(k \)を掛けることは、その構成に\(k \)を加えることと同じです。次に、この質問を見てみましょう。

2人が\(AB \)でイニシャルが両方とも\(1 \)であるとすると、ゲームのラウンドで\(A \)にk 掛ける\(k \)がその構成追加され、同時に\(B \)成分は、2つの追加\(kは\)、\ (AB \)の合計は、3つ追加\(K \) 明らかに\(A×B \)\(AB \)を一緒混合することと同等であり、すべての成分が一緒に混合されるため、\(A×B \)には3つの\(k \)が含まれている必要があります次に、\(A×B \)が完全な3次数かどうかを判断するだけです

それで、私は第一世代のコードを書きました:

#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了……

どこに問題がありますか?ああ、私たちは状況を無視しました。3つすべての\(k \)を数値に入れると、プログラムは\(Yes \)を出力しますが、実際にはこれは対象外です。また、条件のレイヤーを追加する必要があります。つまり、立方根は2つの数の因数\(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;
}

おすすめ

転載: www.cnblogs.com/DarthVictor/p/12742969.html