yukicoder #297 カードの数式 やった
本番ではできなかったし、自分でやってることの意味がわからなくなった上に ドキュメント72時間(NHK) が始まったので断念したやつ。
方針
最強の数字(入力が 12345+ なら 5432)を作ってあとはどうにか…
→ 入力に '-' がない場合の最小に対応できてない
書いた
#!/usr/bin/python # -*- coding: utf-8 -*- N = input() cn = raw_input().split() digits = [] plus, minus = 0, 0 for c in cn: if c.isdigit(): digits.append(int(c)) elif c == '+': plus += 1 elif c == '-': minus += 1 digits.sort() #数字はリストに入れて昇順に並べ、+- は数を数えた bignumber = digits[plus+minus:] bignumber.sort(reverse=True) bignumber = map(str, bignumber) bignumber = ''.join(bignumber) bignumber = int(bignumber) # 最強の数字。取れる数字を大きい方からとって降順に並べ # str にしてくっつけてからまた int に smallnumbers = digits[:(plus+minus)] # のこったやつ(昇順) # smallest number if minus == 0: smalls = [ [] for loop in xrange(plus+1) ] for i in xrange(len(digits)): smalls[i%len(smalls)].append(digits[i]) # 空のリストに数字を順番に振り分けてく smalls = map(sorted, smalls) SMALL = 0 for lst in smalls: lst = [str(n) for n in lst] n = int(''.join(lst)) SMALL += n # 昇順にして str にしてくっつけて int にして足す else: to_plus = smallnumbers[:1+plus] # 最初の数字は必ず正 to_minus = smallnumbers[1+plus:] if len(to_plus) > 0: to_plus = sum(to_plus) else: to_plus = 0 if len(to_minus) > 0: to_minus = sum(to_minus) else: to_minus = 0 SMALL = to_plus - to_minus - bignumber # smallnumbers のでかいほうをマイナス、小さい方をプラスすれば最小 # greatest number to_minus_big = smallnumbers[:minus] to_plus_big = smallnumbers[minus:] if len(to_plus_big) > 0: to_plus_big = sum(to_plus_big) else: to_plus_big = 0 if len(to_minus_big) > 0: to_minus_big = sum(to_minus_big) else: to_minus_big = 0 BIG = bignumber + to_plus_big - to_minus_big # ここは else 節とほぼ同じ print BIG, SMALL
これで Accepted なのでとりあえず良かったです
#58054 No.297 カードの数式 - yukicoder
「足すもの」だから to_plus でいいかと思って書いたけど plus って動詞じゃないんじゃejje.weblio.jp
おわり