1.提利昂的赏赐(百度2017秋招真题)
题目描述
提利昂收服山地部落之后决定犒赏士卒,本着陈力就列的原则,他决定给五种人以赏赐:
1.作战能力>80,并且至少有一项特殊能力的人,每人8000银鹿
2.作战能力>85,并且声望>80的人,每人4000银鹿
3.作战能力>90,每人2000银鹿
4.作战能力>85的灼人部成员每人1000银鹿
5.声望>80的军官每人850银鹿。
提利昂想要尽量多的犒赏部下,所以只要满足条件即可得到奖赏,即每人可以获得多项赏赐。请你帮他算算自己需要准备多少银鹿,并且他想要知道得到赏赐最多的人是谁,以及它得到的银鹿数量。
输入
第一行一个整数N,表示士卒总数。1<=N<=100 接下来N行每行一个字符串s,两个整数a,b,两个字母c,d,一个整数x。 S表示士卒的姓名,为长度小于20的字符串(不含空格)。 a,b分别表示作战能力和声望,都是属于[0,100]的整数。 c,d分别表示是否是军官和是否是灼人部成员,大写字母Y表示是,大写字母N表示不是,保证c,d只为Y或N。 x表示此人拥有的特殊能力数量。0<=x<=10
| 样例输入
4
|
输出
三行。 第一行一个字符串,为得到赏赐最多的人的名字。 第二行和第三行各一个整数分别表示得到赏赐最多的人得到的银鹿数和提利昂需要准备的银鹿数。
S表示士卒的姓名,为长度小于20的字符串(不含空格)。 a,b分别表示作战能力和声望,都是属于[0,100]的整数。 c,d分别表示是否是军官和是否是灼人部成员,大写字母Y表示是,大写字母N表示不是,保证c,d只为Y或N。 x表示此人拥有的特殊能力数量。0<=x<=10
| 样例输出
hdd |
total=int(raw_input())
score=0
Escore=[0 for i in range(total)]
s=[0 for i in range(total)]
for i in range(total):
temp=raw_input().split(' ')
s[i]=str(temp[0])
a=int(temp[1])
b=int(temp[2])
c=temp[3]
d=temp[4]
x=int(temp[5])
while a>80 and x>0:
score+=8000
Escore[i]+=8000
break
while a>85 and b>80:
score+=4000
Escore[i]+=4000
break
while a>90:
score+=2000
Escore[i]+=2000
break
while a>85 and d=='Y':
score+=1000
Escore[i]+=1000
break
while b>80 and c=='Y':
score+=850
Escore[i]+=850
break
index=0
for j in range(total):
if Escore[j]>Escore[index]:
index=j
print s[index]
print Escore[index]
print score
2.一队士兵在操场上排成一列,士兵总数为n,士兵按照队伍从前往后的顺序从1到n依次编号。每个士兵有各自的身高,第i个士兵的身高为ai。士兵列队完毕后,将军走到队列的最前面。因为身高不一,有些士兵可能被前面身高更高的挡住了,这样将军就看不到他们。将军能看到某个士兵当且仅当他的身高严格大于他前面的所有士兵。
问将军一共能看到多少个士兵。
输入
第一行输入一个整数T(T<=100),表示测试数据的组数。每组数据第一行输入一个数n(1=<n<=10000)表示士兵的个数,第二行n个整数a1,a2,...,an(0=<ai<=1000000000),依次表示每一个士兵的身高。
| 样例输入
3
|
输出
对于每组数据,输出一行,将军能看到的士兵数。
| 样例输出
4 |
t = int(raw_input())
for x in range(t):
s = raw_input()
s = map(int, raw_input().split())
ans, cur = (1, s[0])
for i in s :
if cur < i:
ans, cur = (ans + 1, i);
print (ans);
3.给出平面上的n个点,现在需要你求出,在这n个点里选3个点能构成一个三角形的方案有几种。
输入描述:
第一行包含一个正整数n,表示平面上有n个点(n <= 100) 第2行到第n + 1行,每行有两个整数,表示这个点的x坐标和y坐标。(所有坐标的绝对值小于等于100,且保证所有坐标不同)
输出描述:
输出一个数,表示能构成三角形的方案数。
输入例子1:
4 0 0 0 1 1 0 1 1
输出例子1:4
例子说明1:
4个点中任意选择3个都能构成三角形
n=int(input())
point=[]
count=0
for i in range(n):
point.append(list(map(int,input().strip().split())))
for i in range(n):
for j in range(i+1,n):
for k in range(j+1,n):
if (point[k][1]-point[i][1])*(point[j][0]-point[i][0])!=(point[k][0]-point[i][0])*(point[j][1]-point[i][1]):
count+=1
print(count)
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
第一行是数组大小n,第二行是无序整数数组A[n]
输出描述:
满足条件的最大乘积
输入例子1:
4 3 4 1 2
输出例子1:
24
n=int(input())
nums=list(map(int,input().strip().split()))
sortnums=sorted(nums)
max2,max1,max0=sortnums[-3:]
min0,min1=sortnums[:2]
print(max(max2*max1*max0,max0*min0*min1))
有n只小熊,他们有着各不相同的战斗力。每次他们吃糖时,会按照战斗力来排,战斗力高的小熊拥有优先选择权。前面的小熊吃饱了,后面的小熊才能吃。每只小熊有一个饥饿值,每次进食的时候,小熊们会选择最大的能填饱自己当前饥饿值的那颗糖来吃,可能吃完没饱会重复上述过程,但不会选择吃撑。
现在给出n只小熊的战斗力和饥饿值,并且给出m颗糖能填饱的饥饿值。
求所有小熊进食完之后,每只小熊剩余的饥饿值。
输入描述:
第一行两个正整数n和m,分别表示小熊数量和糖的数量。(n <= 10, m <= 100) 第二行m个正整数,每个表示着颗糖能填充的饥饿值。 接下来的n行,每行2个正整数,分别代表每只小熊的战斗力和当前饥饿值。 题目中所有输入的数值小于等于100。
输出描述:
输出n行,每行一个整数,代表每只小熊剩余的饥饿值。
输入例子1:
2 5 5 6 10 20 30 4 34 3 35
输出例子1:
4 0
例子说明1:
第一只小熊吃了第5颗糖 第二只小熊吃了第4颗糖 第二只小熊吃了第3颗糖 第二只小熊吃了第1颗糖
xnums, tnums =tuple(map(lambda x : int(x), input().split(' ')))
t =list(map(lambda x: int(x), input().split(' ')))
t =sorted(t, reverse =True)
x =[]
for j in range(xnums):
x.append(tuple(map(lambda i: int(i), input().split(' ') +[j])))
ans ={}
while x:
k =max(x)
hungry =k[1]
while hungry and t[-1] <= hungry:
for c, v in enumerate(t):
if v <= hungry:
hungry -= v
t.pop(c)
break
ans[k[2]] =hungry
x.remove(k)
ans =sorted(ans.items(), key =lambda z: z[0])
for res in ans:
print(res[1])