1、超級區間和
現有一個長度爲N的數組a,下標範圍從0到N-1,給出Q組區間l[i], r[i],求和:
將最後的和除以1000000007的餘數作爲輸出
思路:用sum[i]存儲i前所有元素的和。爲了計算方便,另sum[0] = 0, sum[1] = a[0], sum[2] = a[0] + a[1] ...
代碼:
import sys
n = int(sys.stdin.readline().strip())
a = map(int, sys.stdin.readline().strip().split())
q = int(sys.stdin.readline().strip())
s = [0] * (n+1)
res = 0
for i in range(1, n+1):
s[i] += s[i-1] + a[i-1]
for i in range(q):
x, y = map(int, sys.stdin.readline().strip().split())
res += s[y+1] - s[x]
print res%1000000007
2、實現樸素貝葉斯分類器
樸素貝葉斯分類器假設在給定樣本label的情況下,樣本的不同特徵之間相互獨立。先用樸素貝葉斯分類器進行垃圾郵件識別,數據包含4個特徵。現有的訓練數據如下表:
代碼:
'''
輸入樣例:
14
1 1 1 0 1
1 1 1 1 1
2 1 1 0 0
3 2 1 0 0
3 3 0 0 0
3 3 0 1 1
2 3 0 1 0
1 2 1 0 1
1 3 0 0 0
3 2 0 0 0
1 2 0 0 0
2 2 1 1 0
2 1 0 0 0
3 2 1 1 1
5
1 1 0 0
1 1 1 0
1 2 1 0
2 1 0 1
2 2 1 1
輸出樣例:
0 1 1 0 0
'''
import sys
train = int(sys.stdin.readline().strip())
sum0 = 0
sum1 = 0
count1 = [0]*10
count0 = [0]*10
for i in range(train):
a, b, c, d, e = map(int, sys.stdin.readline().strip().split())
if e == 0:
sum0 += 1
count0[a-1] += 1
count0[b+2] += 1
count0[c+6] += 1
count0[d+8] += 1
else:
sum1 += 1
count1[a-1] += 1
count1[b+2] += 1
count1[c+6] += 1
count1[d+8] += 1
test = int(sys.stdin.readline().strip())
res = []
for i in range(test):
a, b, c, d = map(int, sys.stdin.readline().strip().split())
#p0 = 1.0 * sum0 * count0[a-1] * count0[b+2] * count0[c+6] * count0[d+8] / (sum(count0[:3]) * sum(count0[3:6]) * sum(count0[6:8]) * sum(count0[8:10]))
#p1 = 1.0 * sum1 * count1[a-1] * count1[b+2] * count1[c+6] * count1[d+8] / (sum(count1[:3]) * sum(count1[3:6]) * sum(count1[6:8]) * sum(count1[8:10]))
p0 = 1.0 * count0[a-1] * count0[b+2] * count0[c+6] * count0[d+8] / (sum0*sum0*sum0)
p1 = 1.0 * count1[a-1] * count1[b+2] * count1[c+6] * count1[d+8] / (sum1 * sum1 * sum1)
#print p0, p1
if p0 < p1:
res.append(1)
else:
res.append(0)
print ' '.join(map(str, res))
昨晚的筆試時間和hulu的宣講時間衝突,但是小孩子纔要做選擇,我當然是 在宣講會上做筆試。。。
於是。。。。做着筆試聽着嘉賓講話,中間還退出半個小時去投簡歷,最後宣講結束了,筆試還沒做完,揹着書包、抱着電腦到處找地方筆試,我真的太難了。
編程題全A,選擇題做了1/3,蒙了1/3,還有1/3沒來得及蒙