请下载:
单击打开后,点击 “安装证书”,点击下一步,并选择 “将所有的证书都放入下列存储”,在 “浏览”中选择“受信任的根证书颁发机构”,确定,下一步,完成。
之后重新访问。
如果你是 Linux 用户,你应该会怎么安装这个证书。
请下载:
单击打开后,点击 “安装证书”,点击下一步,并选择 “将所有的证书都放入下列存储”,在 “浏览”中选择“受信任的根证书颁发机构”,确定,下一步,完成。
之后重新访问。
如果你是 Linux 用户,你应该会怎么安装这个证书。
q.ryp.org.cn
我们对潍坊一中校园网做了特殊优化,可以直接重定向到局域网,大大增大了带宽与访问速度。
-- upd
图床已经炸了,并且因为用处不大,暂没有修复意愿。
\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline \text{OJ} & \text{language} & \text{T1} & \text{T2} & \text{T3} & \text{T4} & \text{T5} & \text{T6-1} & \text{T6-2} & \text{T6-3} & \text{T7-1} & \text{T7-2} & \text{T8} & \text{T9-1} & \text{T9-2} \\ \hline \textbf{WyOJ64} & \text{C++} & 335 & 350 & 1127 & 867 & 790 & 466 & 415 & 45 & 418 & 1450 & 1203 & 959 & 796 \\ \hline \textbf{WyOJ32} & \text{C++} & 338 & 388 & 1324 & 810 & 644 & 712 & 597 & 53 & 1442 & 1450 & 906 & 726 & 644 \\ \hline \textbf{WyOJ32} & \text{C++11} & 334 & 378 & 1370 & 792 & 622 & 706 & 357 & 53 & 392 & 1170 & 899 & 747 & 649 \\ \hline \textbf{洛谷} & \text{G++(-O2,C++14)} & 372 & 500 & 964 & 1040 & 786 & 684 & 551 & 100 & 378 & 1170 & 928 & 726 & 585 \\ \hline \text{Atcoder} & \text{GCC12.2(C++20)} & 309 & 336 & 769 & 697 & 612 & 356 & 398 & 67 & 359 & 603 & 682 & 137 & 159 \\ \hline \text{Codeforces} & \text{G++ 5.1.0(-O2)} & 288 & 295 & 967 & 701 & 857 & 467 & 358 & 77 & 1045 & 1045 & 5912 & 639 & 530 \\ \hline \text{UOJ} & \text{G++ 4.8.4 (-O2)} & 374 & 525 & 1100 & 1375 & 700 & 821 & 587 & 64 & 417 & 1323 & 889 & 758 & 498 \\ \hline \text{LibreOJ} & \text{G++ 8.2.0(-O2,C++14)} & 246 & 310 & 598 & 586 & 418 & 474 & 396 & 55 & 282 & 604 & 27 & 519 & 272 \\ \hline \text{BZOJ} & \text{G++ 4.4.5(-O2)} & 504 & 1280 & 2092 & 1368 & 1568 & 1752 & 1516 & 180 & 2792 & 2788 & 6288 & 1636 & 1388 \\ \hline \end{array}
\begin{array}{|c|c|} \hline \textbf{测试点} & \textbf{内容} \\ \hline \text{T1} & \textbf{循环} \\ \hline \text{T2} & \textbf{欧拉筛} \\ \hline \text{T3} & \text{Floyd} \\ \hline \text{T4} & \text{set} \\ \hline \text{T5} & \textbf{内存申请} \\ \hline \text{T6} & \textbf{内存访问和缓存} \\ \hline \text{T7} & \textbf{整数除法与取模} \\ \hline \text{T8} & \textbf{浮点数运算} \\ \hline \text{T9} & \textbf{CPU 流水线和循环展开} \\ \hline \end{array}
如题!
这意味着以后可以正常使用 __int128
了!
而且评测机的性能会有一定提升。
同时,评测的延迟(同步数据的延迟)会缩小十倍。
欢歌载舞!交换比特!共同庆祝!
今天的内容(包括今天以后的很多很多天),是 RISC-V 手册页的翻译。为啥要讲这个玩意儿呢?有几个原因:
好吧,其实,我也不过比大家先开始看了两三天(上册看完大概一半了),有什么问题千万不要问我啊!如果真的有地方觉得奇怪,就看一下原文吧。也是第一次翻译这种长文档,有的极长句子使用了机翻指导…… 所以如果突然出来风格不符的地方,就心里默默骂我两句吧……
RISC-V (那个音标不会打)是一个被设计成给研究和教学用的崭新的指令集(ISA,Instruction Set Archiecture),但现在我们(反悔了)希望它能够变成一个可投入生产的免费开源(或译为自由开放)架构。RISC-V 的设计目标如下:
这里是我们(当然不是我啦)对于RISC-V的设计的评论。如果你不愿意读(only interested in the specification itself),可跳过(爱读不读)。
(所以说,在这里可能会有一些好玩的 :-),所以翻译的也比较随便。如果仅仅对原文本身感兴趣的话请读原文)
之所以有RISC-V这个名字,是因为前四个名字都被同校的那些用了。我们也用这个名字来双关(恶搞)一些别的词(绝对是写标准的时候现想的),比如变种(variations),向量(vectors),来支持架构研究,包括各种各样的并行加速器。这对ISA设计来说是一个明确的目标。
RISC-V 架构标准尽量避免提到实现实现细节(尽管评论中已经包含了实现的一些决定),并且应该被写成从软件视角看一个多样化的实现,而不是以一个硬件实现者的视角来看。这个手册包含两册。这一册包含基础的无权限指令,包括可选的无特权ISA 扩展。这些指令在所有的模式、所有的特权架构下都可以使用,尽管运行状态结果在一些不同模式不同特权架构下可能不太一样。第二册包含了第一个(“Classic”,原文)的特权架构。这个手册使用IEC 80000-13:2008的风格,每字节为8 位宽。
在无权限的ISA设计中,我们尝试避免所有诸如缓存行大小(cache line size)的依赖特殊微架构功能的地方,或者诸如地址转换的特权架构细节。这是为了让这些可供替代的微架构拥有简单性和灵活性(原文为,This is both for simplicity and to allow maximum flexibility for alternative microarchitectures or alternative privileged architectures. )
一个RISC-V 硬件平台包含了组合在一起的单个或多个的兼容RISC-V(RISC-V-compatible)处理核心,以及其他非RISC-V兼容的处理核心、固定功能的加速器(fixed-function accelerator)、各种各样的物理内存结构、IO设备以及用来支持组件通讯的互联结构。
术语组件(component)用来描述一个包含不依赖其他指令获取单元(instruction fetch unit)的核心。一个RISC-V 兼容核心 可能通过多线程(multithreading)支持多个RISC-V 兼容硬件线程或者harts。
一个RISC-V核心可能拥有附加特殊指令集扩展(addtional specialized instruction-set extensions)或者一个协处理器。术语协处理器 指一个附加在一个RISC-V 核心上的单元,它多半根据RISC-V指令流来顺序操作,但它也可能拥有附加的状态保存(state)或者指令集扩展,并且完全有可能有一些受限制的相对自制权利。
我们使用术语加速器(accelerator)来表示一个不可编程的固定功能单元或者一个有特殊任务的,可以自主操作的核心。在一个RISC-V系统,我们预料到会有许多可编程的加速器,将会是一个带有特殊指令集扩展或定制的协处理器,以RISC-V为基础的核心。其中重要的一个就是IO加速器(I/O accelerators),它可以使应用程序核心卸下IO处理任务的沉重包袱。
RISC-V 硬件平台的系统级组织,可以是单核心的微型控制器或一个成千节点集群、共享内存的服务器(can range from a single-core micro-controller to a many-thousand-node cluster of shared-memory manycore server nodes)。一个小型的SoC 甚至也同样可结构化成一个包含等级制度的多计算机或多处理器,来实现模块化的开发或提供安全的子系统间隔离。
一个RISC-V 程序的反应依赖于它所运行的执行环境(execution environment)。一个RISC-V 执行环境接口(EEI,Execution Environment Interface)定义了程序的初始化状态、包含harts支持的特权级模式的环境中的hart的数量和类型、不同内存以及IO区域的访问权(accessibility and attributes)、执行在每个hart上的一切合法所带来的反应以及执行时以及环境调用时(environment call)抛出的异常或者中断的处理。EEI 的样例包括,Linux 应用程序二进制接口(ABI)或者RISC-V 管理者二进制接口(SBI)。一个RISC-V 执行环境的实现可以是纯硬件、纯软件或者软硬件结合。举个栗子,陷阱和软件仿真可以被用来实现硬件中未实现的功能(比如虚拟内存,译者注)。执行环境实现包含:
一个纯硬件平台可以考虑定义一个EEI。可控的(accessible)hart、内存以及其他硬件居住在这个环境中。初始状态在启动时设置。通常地,大多数软件被设计成用多层抽象接口到硬件。具有更多抽象的EEI提供了在不同硬件平台之间的更大可移植性。通常,EEI 被分为多个层,更高层的EEI 使用下层EEI(提供的功能抽象)。
在软件执行在给定执行环境中的角度来看,hart是一个通过执行环境来自取并且自执行RISC-V指令的资源(resource)。在这一角度,hart表现的像一个硬件资源,尽管执行环境将时间多路传输到真正硬件上去(even if time-multiplexed onto real hardware by the execution environment)。一些EEI支持创建或销毁附加(虚拟)hart。比如,凭借环境调用来创建(fork)新的hart。
如题。
本机
import os
WYOJ_HOST = "192.168.137.4"
print ("上传 PDF 题面。")
print ("原有的题面会完全丢失!!!")
print ("不能使用网页端更改题面!!!")
pidst = int (input ("题目编号起始值(含):"))
pided = int (input ("题目编号终止值(含):"))
lpath = input ("PDF 题面路径:")
if not os.path.exists (lpath):
raise Exception ("没有这个文件,唐氏儿")
def execute (s):
print ("运行本机命令:%s" % s)
if os.system (s):
raise Exception ("本机命令运行错误")
for pid in range (pidst, pided + 1):
rpath = "pdfstat%d.pdf" % pid
execute ("scp %s ryp@%s:/home/ryp/%s" % (lpath, WYOJ_HOST, rpath))
execute ("ssh ryp@%s ./pdf-update %d %s" % (WYOJ_HOST, pid, rpath))
远端
#!/bin/python3
import os
import sys
if len (sys.argv) != 3:
raise Exception ("参数数量错误")
pid = int (sys.argv[1])
lpath = sys.argv[2]
if not os.path.exists (lpath):
raise Exception ("文件未找到")
def execute (s):
print ("执行远端命令:%s" % s, file=sys.stderr)
if os.system (s):
raise Exception ("远端命令运行失败", file=sys.stderr)
rpath = "/opt/uoj/web/upload/statement%s.pdf" % pid
execute ("sudo docker cp %s uoj-web:%s" % (lpath, rpath))
execute ("sudo docker exec uoj-db mysql -proot app_uoj233 -e \"update problems_contents set statement_md = "
"'<iframe src=\"/upload/statement%d.pdf\" width=\"100%%\" height=\"1000\"></iframe>' where id = %d;\"" % (pid, pid))
execute ("sudo docker exec uoj-db mysql -proot app_uoj233 -e \"update problems_contents set statement = statement_md where id = %d;\"" % pid)
execute ("rm %s" % lpath)
自动将 subXX_XX.in/out 转化为 subtaskX/X.in 格式脚本
带有 WyOJ 前缀的,只有在机房的路由机器(也就是那台 Windows 10)上才可以运行。
import re
import os
# 输入、输出文件后缀。可更改
insuf, outsuf = "in", "out"
print ("problem.conf 自助配置")
path = input ("输入数据目录:")
os.chdir (path)
spjp, stdp, valp, subtaskp = False, False, False, False
def continuep ():
s = input ("要继续吗?(y/N)")
if s != "y":
exit (1)
for s in os.listdir ("."):
if s == 'problem.conf':
print ("警告:problem.conf 已存在,将会被覆盖")
continuep ()
if s == 'chk.cpp':
spjp = True
if s == 'std.cpp':
stdp = True
if s == 'val.cpp':
valp = True
if os.path.isdir (s) and re.match ("subtask[0-9]*", s):
subtaskp = True
output = open ("problem.conf", "w")
chker = None
if spjp:
print ("识别到 chk.cpp,已启用 Special Judge")
else:
chker = input ("未识别到 chk.cpp,请输入自定义校验器类型:")
print ("use_builtin_judger on", file=output)
if chker:
print ("use_builtin_checker %s" % chker, file=output)
if subtaskp:
print ("识别到 subtaskX 目录,自动识别 Subtask 中")
else:
print ("未识别到 subtaskX 目录,自动尝试普通配置(如果你认为 Subtask 存在,但文件名格式为 subXX_XX.in/out,尝试使用 subxx2datax.py 脚本)")
tlim = int (input ("时间限制(秒):"))
mlim = int (input ("空间限制(MB):"))
print ("time_limit %d\nmemory_limit %d" % (tlim, mlim), file=output)
patt = re.compile ("([A-Z]*[a-z]*[A-Z]*)([0-9]+).(%s|%s)" % (insuf, outsuf))
def processdir (path):
tcases = 0
pre = None
for s in os.listdir (path):
if os.path.isdir (s):
continue
q = re.findall (patt, s)
if len (q) != 1:
continue
print ("识别到数据文件 %s" % s)
q = q[0]
if not pre:
pre = q[0]
elif pre != q[0]:
raise Exception ("数据文件前缀不相同!同时找到了 %s 与 %s,自动配置失败。" % (pre, q[0]))
if int (q[1]) > tcases:
tcases = int (q[1])
if tcases == 0 or not pre:
raise Exception ("无法自动识别数据文件")
return (tcases, pre)
if not subtaskp:
tcases, pre = processdir (".")
print ("找到 %d 个测试点" % tcases)
print ("n_tests %d" % tcases, file=output)
print ("n_ex_tests 0\nn_sample_tests 0", file=output)
print ("input_pre %s\ninput_suf %s" % (pre, insuf), file=output)
print ("output_pre %s\noutput_suf %s" % (pre, outsuf), file=output)
print ("自动配置结束!")
else:
tcases, subs = 0, 0
pre = None
subtptt = re.compile ("subtask([0-9]*)")
end = { }
for s in os.listdir ("."):
if os.path.isdir (s):
q = re.findall (subtptt, s)
if len (q) != 1:
print ("忽略非 Subtask 目录 %s" % s)
continue
print ("找到 subtask 目录 %s" % s)
subs += 1
nc, spre = processdir (s)
if not pre:
pre = spre
elif pre != spre:
raise Exception ("Subtask 间文件前缀不同!同时找到了 %s 与 %s,自动配置失败。" % (pre, spre))
end[int (q[0])] = nc
if nc > tcases:
tcases = nc
print ("n_tests %d\nn_ex_tests 0\nn_sample_tests 0" % tcases, file=output)
print ("input_pre %s\ninput_suf %s" % (pre, insuf), file=output)
print ("output_pre %s\noutput_suf %s" % (pre, outsuf), file=output)
print ("找到 %d 个 Subtask,共 %d 个测试点" % (subs, tcases))
scs = 100.0 / subs
print ("正在按照每个 Subtask 等分配置(%.2f 分)" % scs)
print ("n_subtasks %d" % subs, file=output)
for i in range (1, subs + 1):
print ("subtask_end_%d %d" % (i, end[i]), file=output)
print ("subtask_score_%d %.2f" % (i, scs), file=output)
output.close ()