【AtCoder反省】AtCoder Beginner Contest 166
スポンサードリンク
Dの問題が意外とあっけなくとけた。
範囲については真面目に考えなかった。とりあえずえいやでいいや。みたいな。 あとは、大体考え方は同じ。
X = int(input()) a = [int( i/2)*((-1)**i) for i in range(1, 1000)] b = [int( i/2)*((-1)**i) for i in range(1, 1000)] """ 1 Aが正ならBは負または、Aより小さい正 2 Aが負ならBは負 3 X/(a+b)は、1以上の整数 """ find = False if X == 0: print(0) else: for a_ in a: for b_ in b: if a_ + b_ == 0: continue if a_ >= 0: if b_ >= 0 and b_ > a_: continue if a_ < 0: if b_ >= 0: continue """ if X%(a_+b_) != 0: print("hoge") continue """ if (a_**5) - (b_**5) == X: print(f"{a_} {b_}") find = True break if find: break
3 X/(a+b)は、1以上の整数
については、n乗同士の差の展開式で (a+b)(a4−a3b+a2b2−ab3+b4) = X となって、 (a4−a3b+a2b2−ab3+b4) = X/(a+b)
となるから左辺が整数だから右辺も整数になると思って制限設けたけどうまくいかなかったので外した。
自分はinputが何行にもわたるものが嫌いだ。だって面倒だから。 今回はBもCもそんな感じだった。けどそれで食わず嫌いしてると点数が稼げないんだろうから そこをちゃんとテンプレート化して楽になるようにしないといけないなと思いました。 環境も今はgoogle colabでやってるが、 ちゃんとした物を作りたい。けどめんどうなのでとりあえずほったらかし。