一:喷水装置
长为20米,宽为2米,妈妈要他给草坪浇水,在草坪上放置半径为Ri的喷水装置,输入第一个数字为喷水装置的个数n,后面n个数字分别为n个喷水装置的半径r,r表示该喷水装置能覆盖的圆的半径【5 | 2 3.2 4 4.5 6】。
arrin = map(float,raw_input().split())
n = int(arrin[0])
arr = arrin[1:]
arr.sort(reverse=True)
l=20
count,i = 0,0
while i<n and l>0:
if l<=0:
pass
if arr[i]>=2**0.5:
count+=1
l=l-2*(arr[i]**2-1)**0.5
i+=1
else:
count+=2
r = max(arr[i],arr[i+1])
l=l-2*(r**2-1)**0.5
i+=2
print count
二:拦截导弹
虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度,输出最多能拦截的导弹数目。
# 389 207 155 300 299 170 158 65
# 1 2 3 2 3 4 5 6
N=int(raw_input())
for _ in range(N):
m=int(raw_input())
arr=map(int,raw_input().split())
res=[1]*m
for i in range(1,m): # 对于每一个数,把后面所有的书都更新一次
for j in range(i):
if arr[i]<arr[j]:
res[i]=max(res[i],res[j]+1)
print max(res)
三:商队运输费
在运输过程中G商队发现,如果不在某个城市停下来休整,在连续行进过程中,他们所花的运输费与他们已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他们花费的运输费是x+10这么多。也就是说走1千米花费11,走2千米要花费23。
# 构造一个矩阵图
def cal(n):
if n == 0:
return 0
else:
return cal(n-1)+10+n
n = int(raw_input())
l = []
for i in range(n-1):
p,q,d = map(int,raw_input().split())
l.append([p,q,d])
v = [[9999 for _ in range(n+1) ] for j in range(n+1)]
for i in range(1,n+1):
v[i][i] = 0
for item in l:
v[item[1]][item[0]] = item[2]
v[item[0]][item[1]] = item[2]
for k in range(1,n+1):
for i in range(1,n+1):
for i in range(1,n+1):
if (v[i][j]>v[i][k]+v[k][j]): # 在走距离最近的方法中找到可能运输费最贵的方法
v[i][j] = v[i][k]+v[k][j]
# 第一步
max = 0
for i in range(1,n+1):
for j in range(1,n+1):
if v[i][j]!=9999:
res = v[i][j]
if res> max:
max = res
# 第二步
print cal(max)
# 结果----------------------------------
"""
5 # 输入的第一行包含一个整数n,表示包括首都在内的王国的城市数
1 2 2 # 城市从1开始依次编号,1号城市为首都。
1 3 1 # 每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di千米。
2 4 5
2 5 4
# 第一步
[[9999, 9999, 9999, 9999, 9999, 9999],
[9999, 0, 2, 1, 9999, 6],
[9999, 2, 0, 9999, 5, 4],
[9999, 1, 9999, 0, 9999, 9999],
[9999, 9999, 5, 9999, 0, 9],
[9999, 9999, 4, 9999, 9999, 0]]
# 第二步
[[9999, 9999, 9999, 9999, 9999, 9999],
[9999, 0, 2, 1, 9999, 6],
[9999, 2, 0, 9999, 5, 4],
[9999, 1, 9999, 0, 9999, 9999],
[9999, 9999, 5, 9999, 0, 9],
[9999, 9999, 4, 9999, 9999, 0]]
"""
四:字符判断
判断字符串b的所有字符是否都在字符串a中出现过,a、b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少重复相同的次数。汉字使用gbk编码(简单的说,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。
a=list(raw_input())
b=list(raw_input())
b1=set(b)
def dels(a,b,b1):
for i in b1:
if a.count(i)<b.count(i):
return False
return True
if dels(a,b,b1):
print 1
else:
print 0
五:将功赎过
这个数字的十进制范围是l~r,且这个数的二进制表示中恰有m个1【比如1 4 2】,最坏情况下,要试多少次得到这个数字。
l,r,m=map(int,raw_input().split())
res=0
for i in range(l,r+1):
if m == bin(i).count('1'):
res +=1
if res>0:
print res
else:
print '-1'
六:超市购物
超市内有n件物品,第i(1<=i<=n)件物品的价值为ai,但是他能拿的物品的价值总和不能超过V。贪心的小易希望能拿尽量多数量的物品,那么请你帮他计算下他最多能拿到多少件物品?
# 这种题目碰到n,V=100000,500000;arr里面的值都是2,这种情况占用所有内存
# while比for循环更占内存?
# while True:
# n,V=map(int,raw_input().split())
# arr=map(int,raw_input().split())
# arr.sort()
# num,allsum=0,0
# while allsum<=V:
# allsum+=arr[num]
# num+=1
# print num-1
while True:
n,V=map(int,raw_input().split())
arr=map(int,raw_input().split())
arr.sort()
num,allsum=0,0
for i in range(n):
if allsum+arr[i]<V:
allsum+=arr[i]
num+=1
print num