這個題要求輸入:
n:串個數
m:串長度
後面是串的具體內容,
要求得到k字首的全部組合,k可以取1到m中任意值
例如輸入:
2
3abc
def
得到輸出:
8
當k=1,則得到aef和dbc,他們進行自由組合
當k=2, 則得到abf和dec,
注意:當有多個串時,可以進行任意組合,也就是複雜度n*n
並且新生成的串也可以進行組合!!
所以還能得到:
我就是在這裡懵了一會……
但是最後解出來了。
第一次,原本的字元得到的全部字首和字尾進行組合:
第二次,新得到的串進行組合:
所以最後得到8個組合,
其中最重要的就是字首和字尾去重
,這個其實讓我想到字串匹配演算法,但是我並不記得那個演算法了,所以就用了普通的方法。
做了乙個簡化,就是只對新增加的片語進行新組合檢測
,因為字首和字尾的組合之前在舊的片語裡出現過,舊的片語的組合固定了前字尾
,直到新增加的片語數目為0為止,需要一直檢測增加組的組合。
例如輸入
2
5abcdf
eghij
則不論是原組整個組檢測還是增加組都有32種,沒有變多:
我感覺有幾個地方還可以簡化,但是沒有頭緒,
string=
input()
n=int
(string.split(
" ")[0
])m=int
(string.split(
" ")[1
])string=
# print(n,m)
for i in
range(0
,n):
input()
)#print(string[0][1])
strings=
add=
0adds=
for i in
range(1
,m+1):
front=
back=
k=ifor j in
range(0
,n):
str_front=string[j][0
:k]#print("str_front:"+str_front)
if str_front not
in front:
str_back=string[j]
[k:m]
#print("str_back:"+str_back)
if str_back not
in back:
# print(front,back)
for fro in front:
for bac in back:
str_add=fro+bac
if str_add not
in strings:
add+=
1# print(strings)
defzuhe
(strings,string)
: add=
0 adds=
for i in
range(1
,m+1):
front=
back=
k=ifor j in
range(0
,len
(string)):
str_front=string[j][0
:k]#print("str_front:"+str_front)
if str_front not
in front:
str_back=string[j]
[k:m]
#print("str_back:"+str_back)
if str_back not
in back:
# print(front,back)
for fro in front:
for bac in back:
str_add=fro+bac
if str_add not
in strings:
add+=
1return add,adds,strings
while
(add!=0)
:# print("---------------")
# print(adds)
add,adds,strings=zuhe(strings,adds)
print
(len
(strings)
)
百度2017春季招聘筆試題
題目 已知有n個點分布在三維空間,且各個點都有三種顏色中的一種,即 r g b 每次輸入格式為顏色和座標,要求計算組成的最大三角形的面積 另外該三角形需要滿足的條件是三個點要麼顏色完全相同,要麼完全不同。輸入示例 5 r 0 0 0 g 92 14 7 r 0 4 0 r 0 0 3 g 12 16...
百度筆試題1
1.假設乙個 搜尋引擎收錄了 2 24 首歌曲,並記錄了可收聽這些歌曲的 2 30 條 url,但每首歌的 url 不超過 2 10 個。系統會定期檢查這些 url,如果乙個 url 不可用則不出現在搜尋結果中。現在歌曲名和 url 分別通過整型的 song id 和 url id 唯一確定。對該系...
百度2017春季招聘筆試
題目 已知有n個點分布在三維空間,且各個點都有三種顏色中的一種,即 r g b 每次輸入格式為顏色和座標,要求計算組成的最大三角形的面積 另外該三角形需要滿足的條件是三個點要麼顏色完全相同,要麼完全不同。輸入示例 5 r 0 0 0 g 92 14 7 r 0 4 0 r 0 0 3 g 12 16...