给定大小为N的整数数组A,我想计算
这是过去大学间编程竞赛中的一个问题.我们必须写这将解决了这个问题的5实例程序,与ñ ≤200,000,每一个我 ≤20万辆,20秒运行时间限制内.显然,O(N 2)解决方案将超过时限.根据社论,预期的解决方案涉及使用快速傅里叶变换的多项式乘法.我正在寻找可以比没有FFT(也不是NTT)的朴素O(N 2)算法更快地解决这个问题的替代算法.这个问题有没有简单而优雅的解决方案?
已知事实:
mod可以在产品内"分布",因为(x*y)%m =((x%m)*(y%m))%m
更新:这是比赛期间的输入/输出测试用例文件:如果它在20秒内通过,它将被接受.输入:https ://www.dropbox.com/s/nw81hts9rniter5/algol.in?dl =0输出:https://www.dropbox.com/s/kpa7wit35xr4xm4/algol.out? dl =0
我是汇编的初学者(使用nasm).我正在通过大学课程学习集会.
我试图了解sys_read linux系统调用时的行为.具体来说,sys_read在读取新行或换行符时停止.根据我所教的,这是事实.这篇在线教程文章也肯定了事实/主张.
当sys_read检测到换行时,控制返回到程序,用户输入位于您在ECX中传递的内存地址.
我检查了linux程序员的sys_read调用手册(通过"man 2 read").它没有提到它应该的行为,对吧?
read()尝试从buf开始读取从文件描述符fd到缓冲区的字节数.
在支持搜索的文件上,读取操作从文件偏移开始,文件偏移量增加读取的字节数.如果文件偏移量等于或超过文件末尾,则不读取任何字节,read()返回零.
如果count为零,则read()可以检测下面描述的错误.在没有任何错误的情况下,或者read()没有检查错误时,计数为0的read()返回零并且没有其他影响.
如果count大于SSIZE_MAX,则结果未指定.
所以我的问题是,为什么会发生这种行为?Linux内核中的规范是否应该发生这种情况还是其他内容的结果?
问题是在python(或类似的)中给出了一个递归函数,是否可以重写它以便它不引用自身。我做了一个适用于该问题的简单示例。当然,不允许将其设为非递归函数。它仍然必须执行相同的递归过程。
def fact(n):
if n == 0:
return 1
return n * fact(n - 1)
Run Code Online (Sandbox Code Playgroud)
它也相当于简写。
fact = lambda n: 1 if n == 0 else n * fact(n - 1)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我不应该fact在函数定义内部调用。
编辑:
附加约束:分配不一定是解决方案工作所必需的。
没有附加约束的一种解决方案(来自评论)是创建两个函数a,b它们交替调用并有效地执行阶乘。这是不允许的,因为它要求您在两个变量中分配两个函数。
一个不需要赋值的函数的简单例子是
f = lambda x: x + 1
Run Code Online (Sandbox Code Playgroud)
为了让它在 arugment 上执行55,我可以只写
(lambda x: x + 1)(55)
Run Code Online (Sandbox Code Playgroud)
所以分配是没有必要的。
这有什么提示吗?还是我被一个不可能的问题欺骗了?
import asyncio
from multiprocessing import Queue, Process
import time
task_queue = Queue()
# This is simulating the task
async def do_task(task_number):
for progress in range(task_number):
print(f'{progress}/{task_number} doing')
await asyncio.sleep(10)
# This is the loop that accepts and runs tasks
async def accept_tasks():
event_loop = asyncio.get_event_loop()
while True:
task_number = task_queue.get() <-- this blocks event loop from running do_task()
event_loop.create_task(do_task(task_number))
# This is the starting point of the process,
# the event loop runs here
def worker():
event_loop = asyncio.get_event_loop()
event_loop.run_until_complete(accept_tasks()) …Run Code Online (Sandbox Code Playgroud)