背景 CUPOJ支持许多的语言进行编译并运行。当需要给判题机增加一个新的语言时,更改源代码内容、编译、测试、发布,整个过程需要频繁改动内部代码,这样破坏了开闭原则。 因此不妨使用动态链接库解决这个问题。 然而经过查询,动态链接库是不支持直接导出类型的。好在我们可以通过对基类的继承,在动态链接库的源代码暴露一个一个方法用于返回动态链接库提供的对象。 …
经过进一步的打磨,CUP Online Judge的判题机终于独立于前后端,可以作为一个后台服务在系统运行了。 考虑到判题过程强依赖操作系统环境,因此整个过程我也打了docker-compose包,不想看下面冗长的部署内容,直接使用的可以前往CUP Online Judge NG Docker Judger体验懒人部署的快感。 系统要求 Ubunt…
题解 由于给定序列,$o$的概率一定是1,$x$的概率一定是0. $?$的期望实际上是0.5 我们要求的是$E_{x^2}$,令$dp_i$代表到第i位时$E_{x^2i}$,$l_i$为到达$i$位置时的期望长度。根据上述条件,$o$时$l_i = l_{i-1} + 1$,$x$时$l_i = 0$,而$x$的时候$l_i = 0.5 \tim…
题意 略 题解 由于这是一个不用维护原有序列的操作,我们可以考虑维护一个ST表进行RMQ查询。 这个RMQ是用来干什么呢? 根据题目数据范围,我们知道这道题不能容忍$\mathcal O(n^2)$及以上的算法 我们必须要在$\mathcal O(nlogn)$的时间复杂度下完成所有的操作。 维护一个dp数组,$dp[cur] = dp[first…
题解 题目可以转化为插板法求解。考虑当$x + y + z <= k$时满足题意,引入一个$a$ 变成了$x + y + z + a = k$然后我们需要求的便是${k+3}\choose{3}$。 注意到题目的数据范围,可以用__int128解决问题。 AC代码 #include <iostream> #include <…
题意 n个点,m1条边的图E1,n个点,m2条边的图E2。求图E2有多少子图跟图E1同构。 题解 由于题目数据范围不大考虑暴力枚举$n!$范围的所有结果。 答案除以自同构数。 AC代码 #include <iostream> #include <cstring> #include <algorithm> #inc…
A:贝壳找房 题解:打表,预处理1e5的表,然后根据表进行查询。 题目说了有序,不知道会不会有降序,总之写了也过了 #include <iostream> #include <algorithm> #include <array> #include <limits> #include <cmat…
由题可知最大情况为(n + 1) * 3 * 3 - n,然而我们无法得知最小情况时三个数之间的关系。 故考虑DP打表,算出某个数两个数相乘时最小的值,由该值递推第三个数。 打表算法O(nlogn),查询O(1) A题代码 #pragma GCC optimize("O3") #include <iostream> #include &…
在查Java函数的时候偶然发现了一个不错的网站,为了以后开发方便在这里备份一下 http://www.howsoftworks.net/
根据Floyd算法我们可以通过状态转移方程解决一个无向图或者有向图中两点之间最短路径的问题,其时间复杂度为O(n³),空间复杂度可以控制在O(n²)(一般情况)。但是在实际运用中如果对Floyd三重循环的ijk顺序有改动,会导致无法正确得出两点之间的最短路径的问题。 正确的做法是 [code lang="cpp"] for(int k…