名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

今日の競プロ(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


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