Ryan's WorkSpace
  • 首页
  • 关于我
C++
C++

使用C++编写面向对象的动态链接库

背景 CUPOJ支持许多的语言进行编译并运行。当需要给判题机增加一个新的语言时,更改源代码内容、编译、测试、发布,整个过程需要频繁改动内部代码,这样破坏了开闭原则。 因此不妨使用动态链接库解决这个问题。 然而经过查询,动态链接库是不支持直接导出类型的。好在我们可以通过对基类的继承,在动态链接库的源代码暴露一个一个方法用于返回动态链接库提供的对象。 本文实现的方式基于如何在运行时加载C++函数和类,这里提供一个将以上内容整合到CMake项目中的解决方案。 以CUP Online Judge Judger为例 CMak…

2020年03月14日 0条评论 976点热度 0人点赞 阅读全文
C++

快速部署CUP Online Judge判题机

经过进一步的打磨,CUP Online Judge的判题机终于独立于前后端,可以作为一个后台服务在系统运行了。 考虑到判题过程强依赖操作系统环境,因此整个过程我也打了docker-compose包,不想看下面冗长的部署内容,直接使用的可以前往CUP Online Judge NG Docker Judger体验懒人部署的快感。 系统要求 Ubuntu 16.04 or above X86_64 CPU Node.js v10 or above 环境要求 预先准备好数据文件夹 部署 拉取后台服务代码: $ git c…

2020年03月10日 0条评论 1341点热度 0人点赞 阅读全文
C++

CUP 4367: Tyvj1952 Easy BZOJ

题解 由于给定序列,$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 \times (l_{i-1} + 1)$ 根据$l$,观察$E_i - E_{i-1}$,可以发现$x^2 - (x - 1)^2 = 2x + 1$ 因此$dp_i = dp…

2018年08月16日 0条评论 1502点热度 0人点赞 阅读全文
C++

HDU 6406 Taotao Picks Apples 杭电多校第八场

题意 略 题解 由于这是一个不用维护原有序列的操作,我们可以考虑维护一个ST表进行RMQ查询。 这个RMQ是用来干什么呢? 根据题目数据范围,我们知道这道题不能容忍$\mathcal O(n^2)$及以上的算法 我们必须要在$\mathcal O(nlogn)$的时间复杂度下完成所有的操作。 维护一个dp数组,$dp[cur] = dp[first_greater_than_cur] + 1$ 这个时候就需要我们用RMQ了。二分$[cur,n]$,找到第一个比当前元素大的元素的位置,这时dp值就可以加1. 贪心预处…

2018年08月15日 0条评论 1607点热度 0人点赞 阅读全文
C++

Wannafly 15 Problem A 直角三棱锥

题解 题目可以转化为插板法求解。考虑当$x + y + z <= k$时满足题意,引入一个$a$ 变成了$x + y + z + a = k$然后我们需要求的便是${k+3}\choose{3}$。 注意到题目的数据范围,可以用__int128解决问题。 AC代码 #include <iostream> #include <cstring> #include <algorithm> #include <cstdlib> #include <array>…

2018年08月09日 0条评论 1252点热度 0人点赞 阅读全文
C++

牛客多校第一场 Problem D Two Graphs

题意 n个点,m1条边的图E1,n个点,m2条边的图E2。求图E2有多少子图跟图E1同构。 题解 由于题目数据范围不大考虑暴力枚举$n!$范围的所有结果。 答案除以自同构数。 AC代码 #include <iostream> #include <cstring> #include <algorithm> #include <numeric> using namespace std; int n, m1, m2, u[100], v[100], g1[10][10], …

2018年08月04日 0条评论 1294点热度 0人点赞 阅读全文
算法

2018 计蒜之道 初赛 第六场

A:贝壳找房 题解:打表,预处理1e5的表,然后根据表进行查询。 题目说了有序,不知道会不会有降序,总之写了也过了 #include <iostream> #include <algorithm> #include <array> #include <limits> #include <cmath> #include <map> #include <iomanip> using namespace std; using ll = l…

2018年06月01日 0条评论 1283点热度 0人点赞 阅读全文
算法

2018 计蒜之道 初赛 第五场

由题可知最大情况为(n + 1) * 3 * 3 - n,然而我们无法得知最小情况时三个数之间的关系。 故考虑DP打表,算出某个数两个数相乘时最小的值,由该值递推第三个数。 打表算法O(nlogn),查询O(1) A题代码 #pragma GCC optimize("O3") #include <iostream> #include <vector> #include <array> #include <queue> #include <algorithm>…

2018年05月29日 0条评论 1125点热度 0人点赞 阅读全文
备忘录

存档 编程语言函数功能查询

在查Java函数的时候偶然发现了一个不错的网站,为了以后开发方便在这里备份一下 http://www.howsoftworks.net/

2017年03月08日 0条评论 1143点热度 0人点赞 阅读全文
动态规划

关于使用Floyd解决最短路问题的一些注意事项

根据Floyd算法我们可以通过状态转移方程解决一个无向图或者有向图中两点之间最短路径的问题,其时间复杂度为O(n³),空间复杂度可以控制在O(n²)(一般情况)。但是在实际运用中如果对Floyd三重循环的ijk顺序有改动,会导致无法正确得出两点之间的最短路径的问题。 正确的做法是   [code lang="cpp"] for(int k=1;k<=border;k++)//i,j,k均从1开始 { for(int i=1;i<=border;i++) { for(int j=1;j<=…

2017年02月21日 0条评论 1173点热度 0人点赞 阅读全文

如果帮助到你,请点击广告,谢谢!

用户您好!请先登录!
登录 注册
Social Media
Github: ryanlee2014
标签聚合
GitHub C++ JavaScript Apache hustoj C php Java
友链
Pacolyon
Lucien's blog
Slian's DreamWork
卡拉搜索
  • 0
  • 15,381
  • 5,589
  • 14
广告

COPYRIGHT © 2020 Ryan's WorkSpace. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

登录
注册|忘记密码?