赞
踩
n = int(input())
while n > 1:
print(n,end=' ')
n //= 2
print(1)
s = input()
l = len(s)
ss = []
for i in range(0,l):
if s[i].isdigit():
for j in range(1,int(s[i])):
ss.append(s[i - 1])
else:
ss.append(s[i])
for i in ss:
print(i,end='')
n,m = map(int,input().split())
dp = [[0] * (m + 5) for i in range(0,n + 5)]
for i in range(1,n + 1):
for j in range(1,m + 1):
if i == 1 and j == 1:
dp[i][j] = 1
elif i % 2 == 0 and j % 2 == 0:
dp[i][j] = 0
else:
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
print(dp[n][m])
可以看出我们要找的是这样的数:
Aj*10lenAi+Ai % k == 0
也就是说Aj乘上10的len(Ai)次方除余k和Ai除于k的值加起来应该等于0或者k。
那么我们直接预处理一下,对于输入的每一个数字都算出他的乘上一个阶数除于k的值是多少,考虑到Ai的值最大可以到达1e9,所以一共需要1到10阶,我们一共需要10个字典(哈希)来存储。
n,k = map(int,input().split()) x = list(map(int,input().split())) d = [dict() for i in range(0,11)] for i in x: for j in range(1,11): if i * (10 ** j) % k in d[j]: d[j][i * (10**j) % k]+=1 else: d[j][i * (10**j) % k] = 1 # print(d) ans = 0 for i in x: l = len(str(i)) if (k - i % k) % k in d[l]: if i * (10 ** j) % k == (k - i % k) % k: ans += d[l][(k - i % k) % k] - 1 # 如果数和本身拼接起来也可以的话,那么要减去自身 else: ans += d[l][(k - i % k) % k] print(ans)
思路1:
我们假设第一次合并任意挨着的两个石子a、b,那么需要的胶水是两个石子相乘a*b,然后得到重量为(a+b),在这之后继续合并的话,(a+b)还要乘上其他的石头,然后得到重量为(a+b+…),这样可以看出,每个石头都要乘一次之后的石头,而顺序先不管是先乘还是后乘不影响结果,所以我们可以直接从左往右合并。
思路2:
假如有两个石头a、b,它们合并的话需要胶水a*b,我们假设把所有的石子看成两个部分,把它们分别再看成两个部分,我们知道顺序是没有影响的,所以不管怎么合并,结果独都是一样的。
n = int(input())
m = list(map(int,input().split()))
ans = 0
sum = 0
for i in range(0,n - 1):
sum += m[i]
ans += sum * m[i + 1]
print(ans)
暂无。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。