読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

今日の競プロ(2015/05/27)

久々に問題を説いたような…?

WUPC 2012 B問題

問題

B: パスワード - WUPC 2012 | AtCoder

回答

Submission #416934 - WUPC 2012 | AtCoder

総当りでOK...

N = int(input())
li = [input() for _ in range(N)]
table = []
for i in range(N):
    for j in range(N):
        if i != j:
            table.append(li[i] + li[j])
res = sorted(table)
print(res[0])
お誕生日コンテスト A問題

問題

A: A + B - お誕生日コンテスト | AtCoder

回答

Submission #417108 - お誕生日コンテスト | AtCoder

1つ目はA = -1, B = 1でOK.AとBの符号が異なり,絶対値が等しい時,和は0です.このプログラムでは和が0の時処理を終了となりますが,前述のようなテストケースだと落ちます.

関係しそうなプログラム断片.

while(cin >> A >> B, A+B!=0) {
    cout << A+B << endl;
}

2つ目は,A=-2147483648でOK.絶対値の計算をしていますが,Aがint型最小値の時に対応する正の値ってないんですよね.表現範囲を知っていれば簡単に発想できるかと.

3つ目は実はACできただけで,よくわかりませんが,負の値を入れた時におかしくなる場合があります.発見した限りでは,一番簡単なパターンとして A = -1, B = 1のように1つ目と同じ入力を行うと落ちます.(1になりますね)
あと適当にA = -4, B = -56で落ちたので,最初はこれで通しました.


ということで,実は1つ目と3つ目を落とすコードって集約してかけちゃうんですよね.
結果,このようになりました.

-2 2
-2147483648 0
0 0

わざわざプログラム書かなくても,出力すればいいだけですので,テキストで提出しましたw
初めて使った!www


というわけで,また少しづつ解いていきます….