- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑一个二进制序列 b 长度电话 .最初,所有位都设置为 0。我们定义了一个带 2 个参数的翻转操作,翻转(左,右) ,使得:
最佳答案
这里有一些想法:
L1 < L2 < R1 < R2
,我们可以做 (L1, L2 - 1)
和 (R1 + 1, R2)
翻转。一个段在另一个段内的情况类似处理。 k
可以获得的不同序列数量的以下公式没有“冗余”翻转的段:C(n + 1, 2 * k)(我们选择段的 2 * k 端。它们总是不同的。左端是独占的)。 K
翻转,答案是 sum for k = 0...K of C(n + 1, 2 * k)
K
的序列。翻转为完全 K
的序列翻转(例如,我们可以将同一段再翻转两次并添加 2 个操作。我们也可以将包含两个以上元素的段拆分为两个段并添加一个操作)。 C(n + 1, 0) + C(n + 1, 2) + ... + C(n + 1, 2 * K) - d
,其中
d = 1
如果
n = 1 or k = 1
和
0
除此以外。
n
是否正确的代码和
k
:
reachable = set()
was = set()
def other(c):
"""
returns '1' if c == '0' and '0' otherwise
"""
return '0' if c == '1' else '1'
def flipped(s, l, r):
"""
Flips the [l, r] segment of the string s and returns the result
"""
res = s[:l]
for i in range(l, r + 1):
res += other(s[i])
res += s[r + 1:]
return res
def go(xs, k):
"""
Exhaustive search. was is used to speed up the search to avoid checking the
same string with the same number of remaining operations twice.
"""
p = (xs, k)
if p in was:
return
was.add(p)
if k == 0:
reachable.add(xs)
return
for l in range(len(xs)):
for r in range(l, len(xs)):
go(flipped(xs, l, r), k - 1)
def calc_naive(n, k):
"""
Counts the number of reachable sequences by running an exhaustive search
"""
xs = '0' * n
global reachable
global was
was = set()
reachable = set()
go(xs, k)
return len(reachable)
def fact(n):
return 1 if n == 0 else n * fact(n - 1)
def cnk(n, k):
if k > n:
return 0
return fact(n) // fact(k) // fact(n - k)
def solve(n, k):
"""
Uses the formula shown above to compute the answer
"""
res = 0
for i in range(k + 1):
res += cnk(n + 1, 2 * i)
if k == 1 or n == 1:
res -= 1
return res
if __name__ == '__main__':
# Checks that the formula gives the right answer for small values of n and k
for n in range(1, 11):
for k in range(1, 11):
assert calc_naive(n, k) == solve(n, k)
O(N * K)
如果我们使用帕斯卡三角形计算系数,则每个测试用例的时间。不幸的是,它不够快。我知道如何更有效地解决素数
MOD
(使用卢卡斯定理),但 O 在一般情况下没有解决方案。
k!
或
(n - k)!
可能没有反模
MOD
.
C(n, m)
为所有非负
n
定义和
m
并且等于
0
如果
n < m
.
MOD
解决它现在。
MOD
成素因数 p1^a1 * p2^a2 * ... * pn^an
.现在可以对每个素因数独立求解这个问题,并使用中国剩余定理组合结果。 p^a|MOD
(也就是说,我们需要得到结果模 p^a
)。我们可以预先计算所有 p
-无部分阶乘和最大幂p
将所有的阶乘除以 0 <= n <= N
在线性时间内使用这样的东西:powers = [0] * (N + 1)
p_free = [i for i in range(N + 1)]
p_free[0] = 1
for cur_p in powers of p <= N:
i = cur_p
while i < N:
powers[i] += 1
p_free[i] /= p
i += cur_p
p-free
阶乘的一部分是 p_free[i]
的乘积所有 i <= n
和 p 的除法幂 n!
是 powers
的前缀和. p
-free 部分与 p^a
互质所以它总是有一个逆。 p
的权力只是减去。 p
的倒数- 线性时间内的免费零件。让我们计算 N!
的无 p 部分的倒数使用欧几里得算法。现在我们可以遍历所有 i
来自 N
到 0。 p
的倒数i!
的免费部分是 i + 1
的逆次 p_free[i]
(如果我们使用与 p^a
互质的元素在乘法下形成阿贝尔群这一事实,将无 p 部分的逆重写为乘积,则很容易证明这一点)。 O(N * number_of_prime_factors + the time to solve the system using the Chinese remainder theorem + sqrt(MOD))
每个测试用例的时间。现在看起来已经足够好了。 关于algorithm - 使用恰好 k 个翻转操作生成的长度为 n 的不同二进制序列的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440679/
考虑具有 V 个顶点和 E 个边的图 G(V,E)。我们想用恰好 K 种颜色给顶点图着色。 着色图是指以两个相邻顶点不应该具有相同颜色的方式为每个节点分配颜色。 我们如何实现这个问题? 最佳答案 首先
我遇到的问题可以简化为: Given an array of N positive numbers, find the non-contiguous sequence of exactly K ele
根据这些问题 Subset sum problem和 Sum-subset with a fixed subset size我想知道解决子集和问题的一般算法是什么,我们被迫使用恰好 k 个整数,k <
我想从具有模式的行中取出数字,但它不会按照我的意愿对数字进行分组。 public static void main(String[] args) { Pattern pattern = Pat
我试图弄清楚用于查找与一组字符恰好 N 次出现(不多于少)匹配的正则表达式。这看起来是一项非常简单的任务,但我一直无法为其找到合适的正则表达式。 更具体地说,我想要一个正则表达式来判断给定字符串是否恰
我试过同时使用 httpx 和 aiohttp,并且都有这个硬编码限制。 import asyncio import aiohttp import httpx async def main():
我有一个在 Amazon EC2 云中运行的服务器应用程序。从我的客户端(浏览器)我发出一个 HTTP 请求,该请求将文件上传到服务器,然后服务器处理该文件。如果有很多处理(大文件),服务器总是在 1
我在 PHP 中使用带有 preg_match 函数的 perl 风格的正则表达式。我想验证一个恰好 10 个字符的 key ,包含大写字母字符或数字。 我有 preg_match( '/[^A-Z0
我正试图找到正确的 python 正则表达式来解决这个问题: 给定一个由字符 ?、_ 和 o 组成的字符串,找到长度为 n 的子字符串> 仅包含 ? 和 o 以及至少一个 o。 这是我想出来的,但它似
图中每条边的权重为 1,图中可能有环,如果一个节点有自环,它可以是从 0 到无穷大的任何距离,具体取决于编号。时间我们采取 self 循环。 我已经用bfs解决了这个问题,但是对距离的约束是10^9的
我有一个居中的 DIV,正好(不多也少)900px。我希望它始终居中,并让两个填充 div 填充每一侧页面的其余部分... 给下面的内容(使用 z-index)一个突出显示的类型效果...(这是填充
我的 Xcode 版本是 10.2。当我将应用程序上传到 iTunes Connect 时,显示以下错误: Missing required icon file. The bundle does no
我是一名优秀的程序员,十分优秀!