簡単だな、と思うかもしれないが、データの個数が20万、個々のデータの値の大きさを考えると、そう容易く解けないはずだ。実行時間は3秒に制限されている。20万個のデータすべてをここに書き出すことは非現実的だが、20万個のデータが何百組も与えられても、3秒以内に計算を終了させ、正解を出すプログラムを作ることが簡単ではない。すべては高速性にかかってくる。それでもデータの個数は100でしかない。計算法まず、1~2500000の間の、素因数が30以下のすべての値に対し、エラトステネスのふるいを応用して、素因数分解をしておく。2500000を超えた入力値に対しては、単純に1つ1つ素因数分解をしておく。本問題では素因数の指数の奇偶性が問題になるので、個々の素因数に対応して、以下のビットパターンを採用する。「2の数&1」は素因数2の指数が奇数なら1、偶数なら0になる。「3の数&1」は素因数3の指数が奇数なら1、偶数なら0になる。6のビットパターンは110、-6のビットパターンは111、10のビットパターンは1010、平方数のビットパターンは0。そのXORの結果がゼロになれば平方数、ゼロ以外であれば非平方数となる。入力データを値がゼロのものとそうでないものに分ける。値がゼロのデータの数がzだとすると、XとYに相当する部分は以下のように算出する。n-zC3あとは、値がゼロ以外のデータについてのみ、XとYの値を算出し、上の値に足し加えておけばOK。書くのは嫌になるほど、多くのことをトライして、最終的に実行時間を0.480秒に押さえ、現時点でのランク1位にできた。細かいことは省略するが、ヒントになるものをリストアップしておく。入力の値に対するビットパターンは2047以下。異なる入力データの数は2048通りしかない。