问题1 汉宁窗
题目描述:汉宁窗公式为HanWin=0.5*(1-cos(2*PI*n/N)),N为窗口长度,0<=n<N,PI=3.1415927;
对任意长度为N的双字节整数序列x(n),加窗之后为y(n)=x(n)*HanWin(n)
输入输出描述:输入第一行窗口长度N,第二行输入N个双字节整数x(n),空格隔开
输出:N个加窗之后的数据y(n)
思路:这个没啥,就算就行了;可惜估计精度问题,只通过80%
import math
def HanWin(n, N):
PI = 3.1415927
return 0.5*(1-math.cos(2*PI*n/N))
def solution1():
PI = 3.1415927
N = int(input())
arr = [int(x) for x in input().split()]
ans = []
for n in range(N):
x = arr[n]
y = x * HanWin(n, N)
print(y)
if y < 0:
y = int(y - 0.5)
else:
y = int(y + 0.5)
ans.append(str(y))
print(' '.join(ans))
问题2 语音识别
题目简述:设计一种英文敏感词查找算法
- 其中敏感词/词组可以包含英文字母、数字、空格、英文中的符号;
- 一个字符串文本中包含多个敏感词或词组应该都能找到
- 优先匹配到的,后续不在匹配,也就是无重叠匹配
- 返回匹配到的敏感字符串的开始和结束位置
- 查找10个和10w个的时间基本相当(这个应该用自动机去做,考试期间想不到了,就暴力了,不过也过啦
输入:先输入敏感词列表(一行一个)、空行隔开、待查找文本
输出:敏感词 和敏感词出现的起始位置
例子:
输入:
Every day i go to school
Every day
to school
school
Every day i go to school.
输出:
Every day 0 8
to school 15 23
思路:先对敏感词做个排序,因为如果有包含关系的,肯定短的在前面,这样就不怕重复了
遍历的时候直接检查是否能匹配上就可以了【这里全A、未超时】
def solution2():
book = []
while True:
s = input()
if s == '':
break
book.append(s)
sentence = input()
book = sorted(book)
l = 0
while l < len(sentence):
flag = 0
for x in book:
if l + len(x) > len(sentence):
continue
elif sentence[l:l+len(x)] == x:
temp = [x,str(l),str(l+len(x)-1)]
print(' '.join(temp))
l += len(x)
flag = 1
break
if flag == 0:
while l < len(sentence) and sentence[l]!= ' ':
l += 1
l += 1
问题3 虫洞跳跃
描述:已知每两个中转站之前的飞行方向、是否有虫洞,给出每个中转站给飞船的最大补给的能量体个数(一次虫洞中转需要消耗1个能量)
通俗点:给你一个有向图,计算从每个节点出发,能到达的最远的距离(能抵达说明两者之间的连接是True)
输入输出:
输入
8
1 3 true
1 4 false
3 5 true
4 7 false
4 6 true
6 2 false
7 2 true
输出
1 3
2 0
3 2
4 2
5 1
6 0
7 1
思路:其实就是图的遍历
def solution3():
n = int(input())
rd = [0] * 100005
G = [[] for i in range(100005)]
ans = [0] * 100005
book = set()
for i in range(n):
s = input()
x, y, state = s.split()
book.add(x)
book.add(y)
x = int(x)
y = int(y)
if state == 'true':
rd[x] += 1
G[y].append(x)
q = []
q_head = 0
for i in range(100005):
if rd[i] == 0:
q.append(i)
while q_head < len(q):
x = q[q_head]
q_head += 1
for y in G[x]:
rd[y] -= 1
ans[y] = max(ans[y], ans[x] + 1)
if rd[y] == 0:
q.append(y)
book = list(book)
book = sorted(book)
for x in book:
print(x, ans[int(x)])