頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC086 B - 1 21

問題はこちら
atcoder.jp

方針

ab を数値として受け取るか文字列として受け取るか迷いましたが,数値だと桁数による場合分けが必要な解法しか思いつかなかったので文字列扱いにしています。
string型で受け取ってもstoi関数でint型に変換できるので便利ですね。

平方数かどうかの判定は,\sqrt {ab} が整数になるかどうかで行っています。

これが本解かと思いましたが,AtCoder解説PDFでは 1\times1...1000\times1000 を総当たりで調べています。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    string a,b;
    cin>>a>>b;
    int a_b=0;
 
    // aの末尾にbを追加
    a.append(b);
    a_b=stoi(a);
 
    int sqrt_ab_i=sqrt(a_b);
    double sqrt_ab_d=sqrt(a_b);
 
    if(sqrt_ab_i==sqrt_ab_d){
        cout<<"Yes"<<endl;
    }else{
        cout<<"No"<<endl;
    }
}