Skip to content

Instantly share code, notes, and snippets.

@mia-0032
Last active December 30, 2015 16:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mia-0032/7858616 to your computer and use it in GitHub Desktop.
Save mia-0032/7858616 to your computer and use it in GitHub Desktop.
# -*- 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