您的位置:首页 > 编程语言 > Python开发

2017京东实习生招聘编程题——买糖果(python)

2017-04-09 20:33 351 查看

题目描述
#
某糖果公司专门生产儿童糖果,它最受儿童欢迎的糖果有A1、A2两个序列,均采用盒式包装。包装好的A1类糖果体积为一个存储单位,而包装好的A2类糖果体积正好是A1类的两倍。
这两类糖果之所以广受儿童欢迎,是因为糖果中含有公司独家研发的魔幻因子。A1或A2序列中的糖果,看起来包装可能是一样的,但因为其中的魔幻因子含量不同被细分为不同的产品。
临近传统节日,公司的糖果供不应求。作为一个精明的糖果分销商,小东希望能够借此大赚一笔,于是带着现金开着货车来公司提货。货车的容量是确定的,小东希望采购的糖果能够尽可能装满货车,且糖果的魔幻因子总含量最高。只要不超出货车容量,糖果总可以装入货车中。
小东希望你能帮她解决这一问题。

输入

输入中有多组测试数据。每组测试数据的第一行有两个整数n和v,1<=n<=10^5, 1<=v<=10^9,n为可供选购糖果数量,v为货车的容量。随后n行为糖果的具体信息,第一行编号为1,第二行编号为2,以此类推,最后一行编号为n。每行包含两个整数ti和pi,1<=ti<=2, 1<=pi<=10^4,ti为糖果所属的序列,1为A1、2为A2,pi则是其中的魔幻因子含量。

样例输入

3 2

1 2

2 7

1 3

输出

对每组测试数据,先在单独的一行中输出能采购的糖果中的魔幻因子最高含量,之后在单独的行中按编号从小到大的顺序输出以空格分隔的糖果编号,若有多组糖果组合均能满足要求,输出编号最小的组。若没有糖果能够满足要求,则在第一行中输出0,第二行输出“No”。

样例输出

7

2

#-*- coding: utf-8 -*-
import sys
while 1:
basic_input=raw_input()
if basic_input!="":
candy_count=int(basic_input.split(' ')[0])
car_capacity=int(basic_input.split(' ')[1])
candy_capacity_dict={}
candy_factor_count_dict={}
candy1,candy2=[],[]
for i in range(1,candy_count+1):
candy_input=raw_input()
candy=candy_input.split(' ')
if int(candy[0])==1:
candy1.append(i)
else:
candy2.append(i)
candy_capacity_dict[i]=int(candy[0])
candy_factor_count_dict[i]=int(candy[1])
left_car_capacity=car_capacity
factor_sum=0
min_left_candy_capacity=min(candy_capacity_dict.values())
left_candy=range(1,candy_count+1)
left_candy1=candy1
left_candy2=candy2
pict_candy=[]
if min_left_candy_capacity>left_car_capacity:
sys.stdout.write('0'+'\n')
sys.stdout.write('No'+'\n')
else:
while left_car_capacity>=min_left_candy_capacity:
ava_candy,ava_candy1,ava_candy2=[],[],[]
for i in left_candy:
if candy_capacity_dict[i]<=left_car_capacity:
ava_candy.append(i)
for i in ava_candy:
if i in candy1:
ava_candy1.append(i)
else:
ava_candy2.append(i)
print ava_candy1,ava_candy2
ava_candy1_factor_dict=dict([(key, candy_factor_count_dict[key]) for key in ava_candy1])
print 'ava_candy1_factor_dict',ava_candy1_factor_dict
pict_candy1_detail= sorted(ava_candy1_factor_dict.items(), key=lambda d:d[1], reverse = True)[0:2]
print 'pict_candy1_detail',pict_candy1_detail
pict_candy1=[x[0] for x in pict_candy1_detail]
pict_candy1_factor=sum([x[1] for x in pict_candy1_detail])
ava_candy2_factor_dict=dict([(key, candy_factor_count_dict[key]) for key in ava_candy2])
pict_candy2_detail= sorted(ava_candy2_factor_dict.items(), key=lambda d:d[1], reverse = True)[0]
pict_candy2=pict_candy2_detail[0]
pict_candy2_factor=pict_candy2_detail[1]
if pict_candy1_factor>pict_candy2_factor:
pict_candy=pict_candy+pict_candy1
factor_sum=factor_sum+pict_candy1_factor
left_car_capacity=left_car_capacity-len(pict_candy1)
left_candy=[i for i in left_candy if i not in pict_candy1]
print 'a',pict_candy,'b',factor_sum,'c',left_car_capacity,'d',left_candy
elif pict_candy1_factor==pict_candy2_factor:
if min(pict_candy1)<pict_candy2:
pict_candy=pict_candy+pict_candy1
factor_sum=factor_sum+pict_candy1_factor
left_car_capacity=left_car_capacity-len(pict_candy1)
left_candy=[i for i in left_candy if i not in pict_candy1]
print 'a',pict_candy,'b',factor_sum,'c',left_car_capacity,'d',left_candy
else:
pict_candy.append(pict_candy2)
factor_sum=factor_sum+pict_candy2_factor
left_car_capacity=left_car_capacity-2
left_candy.remove(pict_candy2)
print 'a',pict_candy,'b',factor_sum,'c',left_car_capacity,'d',left_candy
else:
pict_candy.append(pict_candy2)
factor_sum=factor_sum+pict_candy2_factor
left_car_capacity=left_car_capacity-2
left_candy.remove(pict_candy2)
print 'a',pict_candy,'b',factor_sum,'c',left_car_capacity,'d',left_candy
left_candy1=[i for i in left_candy if i in candy1]
left_candy2=[i for i in left_candy if i in candy2]
if len(left_candy1)!=0:
min_left_candy_capacity=1
elif len(left_candy1)==0 and len(left_candy2)!=0:
min_left_candy_capacity=2
else:
min_left_candy_capacity=0
print 'min_left_candy_capacity=',min_left_candy_capacity
print factor_sum
pict_candy.sort()
for i in pict_candy[:-1]:
sys.stdout.write(str(i)+' ')
sys.stdout.write(str(pict_candy[-1])+'\n')
else:
break
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: