Last active
December 30, 2015 16:59
-
-
Save mia-0032/7858616 to your computer and use it in GitHub Desktop.
https://paiza.jp/poh/ec-campaign でテストケース3つともクリアしたコード。http://paiza.jp/poh/ec-campaign/result/609c70c227bb4762a2d3728d461382eb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# 標準入力から各種値の取得 | |
n, d = raw_input().split(' ') | |
n, d = int(n), int(d) | |
items = {} | |
for i in range(0, n): | |
item = int(raw_input()) | |
if item in items: | |
items[item] += 1 | |
else: | |
items[item] = 1 | |
campaigns = [int(raw_input()) for i in range(0, d)] | |
def searchMaxPair(items, campaign): | |
"""最大値を探す関数""" | |
max_price = campaign - 10 | |
campaign_items = [p for p in items if p <= max_price] | |
max_pair = 0 | |
for first in campaign_items: | |
rest_price = campaign - first | |
#重複は予め取り除いているため同じ価格は同じアイテムになってしまう | |
rest_items = [p for p in campaign_items if p <= rest_price and p != first] | |
if not rest_items: | |
continue | |
second = max(rest_items) | |
pair = first + second | |
#キャンペーン価格以上はありえないので即返す | |
if campaign == pair: | |
return pair | |
max_pair = max(max_pair, pair) | |
return max_pair | |
#重複するアイテムは2つまででOK | |
one_items = [p for p, c in items.items() if c == 1] | |
two_items = [p for p, c in items.items() if c > 1] | |
one_items = one_items + two_items | |
one_items.sort(reverse=True) | |
#ここから探索処理 | |
for campaign in campaigns: | |
#2個あるやつの2倍になってれば即その値を返す。 | |
if campaign / 2 in two_items: | |
print(campaign) | |
#最大値を探す | |
else: | |
print(searchMaxPair(one_items, campaign)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment