題目:木棒拼圖
題目:魔法權值
題目:或與加
有 n 個字串,每個字串都是由 a-j 的大寫字元構成。現在你將每個字元對映為乙個 0-9 的數字,不同字元對映為不同的數字。這樣每個字串就可以看做乙個整數,唯一的要求是這些整數必須是正整數且它們的字串不能有前導零。現在問你怎樣對映字元才能使得這些字串表示的整數之和最大?
輸入描述:
每組測試用例僅包含一組資料,每組資料第一行為乙個正整數 n , 接下來有 n 行,每行乙個長度不超過 12 且僅包含大寫字母 a-j 的字串。 n 不大於 50,且至少存在乙個字元不是任何字串的首字母。
輸出描述:
輸出乙個數,表示最大和是多少。
輸入例子1:
2
abcbca
輸出例子1:
1875
給字元賦權值,再最後的字元的權值為1,倒數第二位10,第三位100,依次類推,然後統計所有字元的權值,統計完之後,對按照權值依次賦予0-9,完成對映,然後統計每個字串對映的值,然後相加
n = int(input())
#根據a-jmod65依次對應0-9
ls = [0 for i in range(10) ]
strings =
ret = [0 for i in range(10)]
res = 0
for i in range(n):
for line in strings:
num = 0
for i in range(len(line)-1,-1,-1):
#將字元轉化為數字
sign = ord(line[i]) % 65
ls[sign] += 10 ** num
num += 1
print(ls)
for i in range(9,-1,-1):
num = max(ls)
index = ls.index(num)
ret[index] = i
ls[index] = -1
for line in strings:
num = 0
count = 0
for i in range(len(line) - 1, -1, -1):
sign = ord(line[i]) % 65
count += ret[sign] * (10 ** num)
num += 1
res += count
print(ret)
print(res)
有乙個由很多木棒構成的集合,每個木棒有對應的長度,請問能否用集合中的這些木棒以某個順序首尾相連構成乙個面積大於 0 的簡單多邊形且所有木棒都要用上,簡單多邊形即不會自交的多邊形。
初始集合是空的,有兩種操作,要麼給集合新增乙個長度為 l 的木棒,要麼刪去集合中已經有的某個木棒。每次操作結束後你都需要告知是否能用集合中的這些木棒構成乙個簡單多邊形。
輸入描述:
每組測試用例僅包含一組資料,每組資料第一行為乙個正整數 n 表示操作的數量(1 ≤ n ≤ 50000) , 接下來有n行,每行第乙個整數為操作型別 i (i ∈ ),第二個整數為乙個長度 l(1 ≤ l ≤ 1,000,000,000)。如果 i=1 代表在集合內插入乙個長度為 l 的木棒,如果 i=2 代表刪去在集合內的一根長度為 l 的木棒。輸入資料保證刪除時集合中必定存在長度為 l 的木棒,且任意操作後集合都是非空的。
輸出描述:
對於每一次操作結束有一次輸出,如果集合內的木棒可以構成簡單多邊形,輸出 "yes" ,否則輸出 "no"。
輸入例子1:
5
1 11 1
1 12 1
1 2
輸出例子1:
no
noyes
nono
按照數學定理,如果要構成乙個閉合的多邊形,需要除最長的那一條邊外,其他的邊相加要大於最長的邊,所以每次新增或是刪除,只要判斷上面的定理即可
n = int(input())
ls =
while n > 0:
i,l = map(int,input().split())
if i == 1 :
else:
ls.remove(l)
if len(ls) >= 3:
num = max(ls)
sums = sum(ls)
if sums-num > num:
print("yes")
else:
print("no")
else:
print("no")
n -= 1
給出 n 個字串,對於每個 n 個排列 p,按排列給出的順序(p[0] , p[1] … p[n-1])依次連線這 n 個字串都能得到乙個長度為這些字串長度之和的字串。所以按照這個方法一共可以生成 n! 個字串。
乙個字串的權值等於把這個字串迴圈左移 i 次後得到的字串仍和原字串全等的數量,i 的取值為 [1 , 字串長度]。求這些字串最後生成的 n! 個字串中權值為 k 的有多少個。
注:定義把乙個串迴圈左移 1 次等價於把這個串的第乙個字元移動到最後乙個字元的後面。
輸入描述:
每組測試用例僅包含一組資料,每組資料第一行為兩個正整數 n, k , n 的大小不超過 8 , k 不超過 200。接下來有 n 行,每行乙個長度不超過 20 且僅包含大寫字母的字串。
輸出描述:
輸出乙個整數代表權值為 k 的字串數量。
輸入例子1:
3 2
abraab
ra
輸出例子1:
3
首先考查全排列,需要對所有的字串進行全排列,然後根據全排列後的結合,然後移動字串,判斷字串的權值,進行數量統計,一種暴力列舉,複雜度高,執行超時。
count = 0
n,k = map(int,input().split())
def permutation(ls,stack):
global count
global k
if not ls:
string = ""
for i in range(len(stack)):
string += stack[i]
sign = 0
for i in range(1,len(string)+1):
strl = string[:i]
stlr = string[i:]
newstr = stlr + strl
if newstr == string:
sign += 1
if sign == k:
count += 1
else:
for i in range(len(ls)):
del ls[i]
permutation(ls,stack)
ls.insert(i,stack.pop())
ls =
for i in range(n):
stack =
permutation(ls,stack)
print(count)
給定 x, k ,求滿足 x + y = x | y 的第 k 小的正整數 y 。 | 是二進位制的或(or)運算,例如 3 | 5 = 7。
比如當 x=5,k=1時返回 2,因為5+1=6 不等於 5|1=5,而 5+2=7 等於 5 | 2 = 7。
輸入描述:
每組測試用例僅包含一組資料,每組資料為兩個正整數 x , k。 滿足 0 < x , k ≤ 2,000,000,000。
輸出描述:
輸出乙個數y。
輸入例子1:
5 1
輸出例子1:
方法一:暴力列舉,使用while迴圈,但是時間複雜度高,執行超時
方法二:找規律
1 + 0 = 1 1 | 0 = 1
0 + 1 = 1 1 | 0 = 1
1 + 1 = 0 1 | 1 = 1
從二進位制的角度看,如果要加法和或結果相同,就對位上就不能是1,即,x是1的位置,y必須是0,所以只改變x的0就可以
求k小數,那麼從右向左一次給變化k個位置的零
x,k = map(int,input().split())
y = 1
ans = 0
while k:
if (x & y) == 0 :
ans += (y * (k & 1))
k >>= 1
y <<= 1
print(ans)
位元組跳動後端開發實習生面經
同步更新 此段置頂 辦公地點在上海市閔行區宜山路2000號利豐廣場,有沒有哥哥知道旁邊 有房子可以租,或者有沒有合租意向的哥哥,蟹蟹 答主性別 男 感謝牛友們的面經,這乙個月學到不少基礎知識,1 自我介紹 2 輸入url到顯示這個頁面過程 3 https和http的區別 4 c 記憶體區域的劃分,堆...
騰訊2017暑期實習生程式設計題
刷題 pragma warning disable 4996 遮蔽警告 構造回文 題目描述 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。思路 其實就是,原字串翻轉之後的字串跟原字串的最長公共子串行 那麼利用動態規劃的最長公共...
騰訊2017暑期實習生程式設計題
構造回文串 給定乙個字串s,你可以從中刪除一些字元,使得剩下的串是乙個回文串。如何刪除才能使得回文串最長呢?輸出需要刪除的字元個數。輸入描述 輸入資料有多組,每組包含乙個字串s,且保證 1 s.length 1000.輸出描述 對於每組資料,輸出乙個整數,代表最少需要刪除的字元個數。示例1 輸入 a...