前言

前天收到了科大讯飞算法岗的笔试邀请,因为以后也想从事算法岗的工作,因此试了试水。讯飞在算法岗的笔试题中,有着20题每题三分的选择题,选择题包括了HMM、CRF、生成模型、判别模型等机器学习相关知识,令我以外的是他也包括了很多操作系统相关的算法,比如银行家算法。而后就是两道很简单的编程题,每题二十分。

编程题

修改成绩

题面

题目描述
华老师的n个学生参加了一次模拟测验,考出来的分数很糟糕,但是华老师可以将成绩修改为[0,100]中的任意值,所以他想知道,如果要使所有人的成绩的平均分不少于X分,至少要改动多少个人的分数?
输入
第一行一个数T,共T组数据(T≤10)
接下来对于每组数据:
第一行两个整数n和X。(1≤n≤1000, 0≤X≤100)
第二行n个整数,第i个数Ai表示第i个学生的成绩。(0≤Ai≤100)
输出
共T行,每行一个整数,代表最少的人数。
样例输入
2
5 60
59 20 30 90 100
5 60
59 20 10 10 100
样例输出
1
2
Hint
对于第一组数据,将59改成60即可

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys
if __name__ == "__main__":
n = int(sys.stdin.readline().strip())
for i in range(n):
line = sys.stdin.readline().strip()
two=list(map(int, line.split()))
line=sys.stdin.readline().strip()
n_num=list(map(int, line.split()))
mubiao=two[0]*two[1]
n_num=sorted(n_num)
flag=0
while sum(n_num)<mubiao and flag<=len(n_num):
n_num[flag]=100
flag+=1
print(flag)

杀手

题面

题目描述
有n个杀手排成一行,每个杀手都有一个不同的编号(编号为1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手是的行动是瞬间的,因此一个人可能某一个夜晚既杀死了别人又被别人杀死,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时3也会杀死2。
显而易见,一段时间之后,就不会有人杀或被杀,平安夜也就到来了,请问在平安夜之前有多少个夜晚。
输入
输入第一行是一个整数n(1≤n≤100000),表示杀手的数量。
接下来一行有n个数,是一个1-n的全排列。
输出
输出包含一个整数,表示平安夜之前经历了多少个夜晚。
样例输入
10 10 9 7 8 6 5 3 4 2 1
样例输出
2
Hint
补充样例
输入样例2: 6 1 2 3 4 5 6
输出样例2 :0
样例解释: 样例1中杀手的变化为[10 9 7 8 6 5 3 4 2 1]->[10 8 4]->[10],故答案为2。

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys
if __name__ == "__main__":
n = int(sys.stdin.readline().strip())
line = sys.stdin.readline().strip()
num=list(map(int, line.split()))
flag=True
cishu=0
while(flag):
n=len(num)
next=[]
flag=False
for i in range(2,len(num)+1):
# 发生吃人
if(num[n-i]>num[n-i+1]):
flag=True
# 吃不掉
if(num[n-i]<num[n-i+1]):
next.append(num[n-i+1])
# flag=True
# 加入第一个人
if(i==len(num)):
next.append(num[n-i])
num=list(reversed(next))
if(flag==True):
cishu+=1
print(cishu)

后记

不得不说讯飞的速度是挺快的,第二天就发来了面试邀请。但是想问hr招不招实习的时候,hr不回复,因此也就没下文了。面试当然也就没去了,~难受~