這題很簡單了,是換行輸出要注意下。
n = int(input())
a = []
while n:
n-=1
s = input()
s = s[-6:]
s = list(map(int, s))
#s.sort()
s = int(''.join([str(t) for t in s]))
a.append(s)
a.sort()
for i in range(len(a)):
print(a[i])
最長迴文子序列
看了網上的,用遞歸和dp做的。
參考 https://blog.csdn.net/geekmanong/article/details/51056375
str[0…n-1]是給定的字符串序列,長度爲n,假設lps(0,n-1)表示序列str[0…n-1]的最長迴文子序列的長度。
- 如果str的最後一個元素和第一個元素是相同的,則有:lps(0,n-1)=lps(1,n-2)+2;例如字符串序列“AABACACBA”,第一個元素和最後一個元素相同,其中lps(1,n-2)表示紅色部分的最長迴文子序列的長度;
- 如果str的最後一個元素和第一個元素是不相同的,則有:lps(0,n-1)=max(lps(1,n-1),lps(0,n-2));例如字符串序列“ABACACB”,其中lps(1,n-1)表示去掉第一元素的子序列,lps(0,n-2)表示去掉最後一個元素的子序列。
def lps(s,i,j):
if i==j:
return 1
if i>j :
return 0
if s[i] == s[j]:
return lps(s, i + 1, j - 1) + 2
return max(lps(s, i, j - 1), lps(s, i + 1, j))
s = input()
n=len(s)
res = lps(s,0,n-1)
print(res)
只過了80%。複雜度太高,一定要用dp纔行。
def lps(s,n):
dp = [[0 for col in range(10)] for row in range(10)]
for i in range(n):
dp[i][i] = 1
for i in range(1,n):
tmp = 0
#考慮所有連續的長度爲i+1的子串,s[j....j+i] 這個很厲害 子串
for j in range(n-i):
if s[j] == s[j+i]:
tmp = dp[j+1][j+i-1]+2
else:
tmp = max(dp[j + 1][j + i], dp[j][j+i-1])
dp[j][j+i] = tmp
return dp[0][n-1]#返回字符串str[0...n-1]的最長迴文子序列長度
s = input()
#s='adbca'
res = lps(s,len(s))
print(res)
右邊是向上取整math.ceil()
。
不應該化簡的,好像就錯了,最後只過了67%
(有點問題)
n,p,h,w = map(int,input().split())
a=[int(k) for k in input().split()]
summ = sum(a)
alll = int(p*h*w/summ)
s=1
while alll>=s*s:
s+=1
print(s-1)
補一個同學的,應該比較正確:
n,p,h,w = map(int,raw_input().split())
nums = map(int,raw_input().split())
def getRowNum(nums,w,s):
rowNum = 0
for num in nums:
rowNum+=num*s/w
return rowNum
s = 1
while getRowNum(nums,w,s)<=p*h/s:
s += 1
print s-1