精华内容
下载资源
问答
  • OJ系统

    2020-01-01 12:34:28
    OJ是啥?

    转自:https://blog.csdn.net/qq_31877249/article/details/83027377
    转载出处: 学习笔记

    什么是OJ

    Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。

     

    一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足 一定的逻辑条件。

    Online Judge系统最初使用于ACM-ICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习和作业的自动提交判断中。

     

    Pending &Waiting: 系统忙,你的答案在排队等待.

    Pending Rejudge: 因为数据更新或其他原因,系统将重新判你的答案.

    Compiling : 正在编译.

    Running & Judging: 正在运行和判断.

    Presentation Error : 答案基本正确,但是格式不对。
    Wrong Answer : 答案不完全正确.
    Time Limit Exceeded : 运行超出时间限制.
    Memory Limit Exceeded : 超出内存限制.
    Output Limit Exceeded: 输出超过限制.
    Runtime Error : 运行时错误.

    Compile Error : 编译错误.

    Accepted : 程序通过!

     

    前言

      本文对国内外大家常用的几十个在线测评网站做整理。每个测评网站都有一至两张图片,分别是主页和题库的截图。从图片上可以清晰地看出不同测评网 站的风格,甚至是题目难度,方便大家选择适合对口味的测评网站。作者才疏学浅,无法对每个测评网站做出一句话或是更多的客观评价,只是在自己所熟悉的测评 网站下说了几句自己的见解。

      关于测评网站的分类,作者曾想过很多的方式,譬如按照中国外国分或是按照面向对象主要是信息竞赛生或是ACM选手分,无论怎样都无法得到一个很 好的效果。网络时代把大家连成一个整体,应算法竞赛之运而生的书籍,网站,辅导机构都是相通的。更何况,许多读书时参加信息学竞赛的学生以后也往往会成为 大学里ACM校队的主力。一番纠结后,作者想了一个还算折中又鄙浅的分类方法,本文中的测评网站主要分为以下几类:

      推荐OJ:用户数多,题目质量高,测评机稳定,容易找到高质量题解或与人交流;

      学院派OJ:各大学中学自己维护更新的测评网站,部分对外界开放;

      自由型OJ:由社会组织,公司,志愿者运行,部分网站的稳定和更新得不到保证;

      比赛类OJ/社区型OJ/其他的国外OJ:定期组织比赛;

      提高型OJ:专业性较强,大部分题目思维难度较高

      学习型OJ:网上提供编程教育的网站附带的试题库和测评机。

    OJ的使用方法

      if 你的学校里有自己的oj then 就刷那上面的题即可

      else

        if 你是一个ACMER then

          按准POJ或HDU猛刷

        else

          if 你是一个OIER then  

            按准CODEVS或洛谷猛刷

          else

            从推荐OJ里选一个适合自己难度的OJ猛刷

      总而言之,一定要有一个固定的刷题OJ,遇上特殊的自己刷的测评网站上没有的题目时,再去别的测评网站看看。

    推荐OJ

    北京大学POJ http://poj.org/

    中国最受欢迎OJ之一,各式各样各种难度的题目都有。

     

     

    杭州电子科技大学HDUOJ http://acm.hdu.edu.cn/

    中国最受欢迎OJ之一,题目数量多,来源广。

     

    UVA https://uva.onlinejudge.org/

    全球最大最老牌的OJ之一,题目数量堪称之最。浏览需要FQ。

     

    codeVs http://codevs.com/

     当今最大中文OJ之一,它的天梯功能可以让选手按照难易程度练习各种算法。codevs也是我最早接触到的OJ,题库丰富,难度适中,可以无条件 查看当前出错点的答案。据悉网站管理员WPH95以后想把CODEVS向AI等方面扩宽发展。具体怎样不得而知,不过它作为OJ的强大行还是毋庸置疑的。

    还请忽视我的刷题记录

    洛谷 http://www.luogu.org/

    OJ上的后起新秀,迅速占有了很大的OJ评测份额,它的试炼场功能和CODEVS的天梯功能相同,可以让选手按阶段做题提高。个人认为题目难度分类 有些不太恰当,为何同是“普及+提高-”的题目难度差异那么大呢?支持在线IDE编程。其代码公开计划可以让提交此题并达到60分且同加入代码公开计划的 人查看他人的代码。

    (账号记录也请忽视,忽视哈。)

    大视野在线评测BZOJ  http://www.lydsy.com/JudgeOnline/

    题目难度多为省选级及以上,但有一部分题目需要购买权限才能访问。


    UOJ http://uoj.ac/

    举办NOIP难度的UER和省选难度的UR。赛题质量极高,命题人大多为现役集训队选手。

     

     

    清橙评测tsinsen http://www.tsinsen.com/

    集训队作业网站。近几年的内容还没有公开。

     

    ACdream http://acdream.info/

     

     

    学院型OJ

    湖南师大附中 vijos https://vijos.org/

    学军中学OJ
    http://www.hzxjhs.com:83/

     

    注册完顺手写了一个背包居然过了O(∩_∩)O

    河南实验中学OJhttp://cojs.tk/cogs/index.php

     

    南阳理工学院OJhttp://acm.nyist.net/JudgeOnline/problemset.php

     

    北大在线评测http://openjudge.cn/

    好像是许多大学创办比赛提交作业的场所。随着2015年NOI网站公布了NOIP考试将从本网站的NOI题库小组抽取题目后,详细这个网站会迎来很多OIERS的访问。

    八一中学码酷http://www.marcool.net/home/index.htm

     


    浙江大学ZOJ http://acm.zju.edu.cn/onlinejudge/

     

    西南科技大学SWUST OJ http://acm.swust.edu.cn/

    只供校内学生注册

     

    建兰中学OJhttps://school.jloj.cn/oj-plus/

     

    天津大学OJhttp://acm.tju.edu.cn/toj/

     

     

    TIMUS OJ http://acm.timus.ru/

     

    南开大学OJhttp://acm.nankai.edu.cn/

    典雅的界面果断好评

     

    华中科技大学OJhttp://acm.hust.edu.cn/

     

     齐齐哈尔大学OJhttp://www.smartoj.com/

     

    浙江工业大学OJ

    http://acm.zjut.edu.cn/system/messageInfoAction.do?method=initIndexPage

     

    萨拉托夫州立大学OJhttp://acm.sgu.ru/

     

    福州大学http://acm.fzu.edu.cn/

     

     

    电子科技大学http://acm.uestc.edu.cn/#/

     

    上海交大OJhttp://acm.sjtu.edu.cn/OnlineJudge/

    中科大OJhttp://acm.ustc.edu.cn/ustcoj/

    宁波工程学院https://ac.2333.moe/

    大哥你家网站,卡哇伊诶!

     

     

    北京师范大学http://acm.bnu.edu.cn/v3/

     

    自由型OJ

    九度OJhttp://ac.jobdu.com/problemset.php

     

    RQNOJ http://www.rqnoj.cn/

    RQNOJ,是国内OJ(信息学在线测评)开放平台开发和运行的先导

     

    tyvj http://tyvj.cn/

    主要面向信息学竞赛,09年成立,现在好像在清北学堂的手中。(话说那大犇出没神马的我们去北京清北的时候挂上去的,现在居然还没撤下来)

     

    比赛类OJ/社区型OJ/其他的国外OJ

    cf http://codeforces.com/

    Codeforces是一家为计算机编程爱好者提供在线评测系统的俄罗斯网站。该网站由萨拉托夫国立大学的一个团体创立并负责运营。


    tc http://www.topcoder.com/tc

    topcoder社区得到了数百万编码者的支持,因此你可以了解到很多挑战性的项目,基于此你还可以为自己赚去额外的报酬。你可以每天或每周参与编码挑战,该社区提供的项目极具有挑战性,对于初学者而言有一定的难度,但却值得一试。

    cc http://www.codechef.com/

    CodeChef由Directi创建的一个开发者社区,为开发者提供实践、竞赛和进步的平台。该社区拥有大量的编码竞赛问题,允许访问此前别人解答编码挑战赛的源码。该社区也设置了难易度,你可以根据自身条件选择挑战。

     

    Bestcoder

    http://bestcoder.acmcoder.com/

     

    克罗地亚coci

    http://hsin.hr/coci/

     

    波兰MAIN

    http://main.edu.pl/en

     

    波兰SPOJ

    http://www.spoj.com/

     

    日本JOI

    http://www.ioi-jp.org/index.html

     

     LIGHTOJ http://www.lightoj.com/login_main.php?url=index.php

     

    AOJ http://judge.u-aizu.ac.jp/onlinejudge/

     

    挑战型OJ

    欧拉计划PE https://projecteuler.net/ 
    Project Euler可能是全球最流行的编程挑战网站,项目推出初期就拥有几十万的用户,足以表明其影响力有多大。Project Euler致力于鼓励、挑战并且发展解题技巧,并为那些对迷人的数学世界有兴趣的人提供乐趣。

     

     

    https://leetcode.com/

    leetcode 是一个美国的在线编程网站,上面主要收集了各大IT公司的笔试面试题,对于应届毕业生找工作是一个不可多得的好帮手。

    这个网站的的好处在于它会告诉你测试数据以及你的输出和正确的输出是什么,方便大家调试学习。目前,只支持C++和Java两种语言。

    另一个很好的地方在于提供了2个独立的代码窗口,分别编译运行。一个自己玩的开发窗口,一个提交代码的窗口,可以在第一个窗口里测试各种拿不准的功能点。

    题库包括algorithms ,database, shell三部分,以下是algorithms(算法)的题库部分。

     

    https://www.hackerrank.com/

    HackerRank网站是为编码程序员们提供一个以编码谜题和现实生活中遇到的编码难题为基础的新兴的社交平台。HackerRank公司得到了风险投资公司Y Combinator 的资金支持。

    在这个社区中,他们提供了各种编码谜题、游戏病毒和现实中的编码难题及挑战,让黑客们在该社区中进行交流讨论,接受挑战。HackerRank就如这个名字所暗示的一样,它同时还提供了在线排行榜和其他的竞争元素。

     

    更多请移步:

    挑战最强大脑——来自全球的14个编码社区

    http://www.csdn.net/article/2014-04-21/2819404-coding-challenges/1

     

    学习型OJ

    萌码http://oj.mengma.com/

     

    计蒜客http://www.jisuanke.com/

     

    后记

      在搜集各大OJ的过程中发现一个很有趣的现象,面向信息学竞赛的OJ主要是汉文的,毕竟比较注意用户体验和网站风格设计,相比之下,面向ACM的OJ更多地采用英文题目,网站风格简练,并且大部分无法查看错误点,或许这就是常说的有需求有市场,一切为了用户吧。

      本文是作者用短短几天的时间做出来的,有所错误,纰漏在所难免,希望大家多多包涵,批评,斧正,提供新的OJ资料,在下不胜感激。

      最后,祝大家在算法竞赛,在各自的领域中取得傲人的成绩。

    展开全文
  • 搭建OJ系统

    万次阅读 2020-07-13 04:30:40
    搭建个自己的OJ系统玩玩

    介绍

    本文介绍如何利用开源OJ系统源码快速搭建OJ系统

    准备环境

    linux

    1. 安装依赖环境

      ubuntu系统用户:

       sudo apt-get update && sudo apt-get install -y vim python-pip curl git
       pip install docker-compose
      

      centos系统用户:

       yum update && yum install -y vim python-pip curl git
       pip install docker-compose
      
    2. 安装docker

      国内用户使用脚本一键安装:sudo curl -sSL https://get.daocloud.io/docker | sh

      国外用户使用脚本一键安装: sudo curl -sSL get.docker.com | sh

    安装

    1. 克隆源码
       git clone -b 2.0 https://github.com/QingdaoU/OnlineJudgeDeploy.git && cd OnlineJudgeDeploy
    
    1. 启动docker

        docker-compose up -d
      
      • 可能遇到的问题:ERROR: Couldn’t connect to Docker daemon at http+docker://localunixsocket - is it running?
      • 解决办法: 运行命令sudo systemctl start docker启动docker(若无效请查看参考资料按照对应情况排查)
    2. 运行OJ系统

        docker ps -a
      
    3. 修改端口

      一般80和443端口都被占用了,所以得修改端口

      vim docker-compose.yml

      在最下面修改端口号

    4. 打开web浏览器访问

      本机ip+端口访问OJ首页

      本机ip+端口/admin (初始账号用户名 root ,密码 rootroot )

      例如,ip是185.12.254.40,第四步骤设置的其中一个端口是1000

      则通过185.12.254.40:1000访问首页

      ``185.12.254.40:1000/admin`访问管理员帐号

    参考资料

    开源青岛大学oj的搭建(傻瓜式操作) : Uncle_drew

    docker-compose up解决错误ERROR: Couldn’t connect to Docker daemon at http+docker://localunixsocket - is it running?

    展开全文
  • 离线OJ系统

    2016-01-13 00:35:58
    离线OJ系统,支持离线盘题!acm无等待!
  • OJ系统蓝桥杯题库

    2018-12-03 17:47:13
    OJ系统的蓝桥杯题库,http://oj.xpuca.top/,这里有这些题的栗子。
  • 在线OJ系统

    2020-08-10 15:08:51
    在线OJ系统 模块划分: 在线译器模块 题目管理模块 在线编译器模块 将代码通过网页提交到服务器上 使用第三方库 cpp-httplib 搭建http服务器 调用gcc、g++编译代码

    在线OJ系统

    设计思路:

    仿照LeetCode、牛客,实现一个在线代码编译系统。

    模块划分:

    • 在线编译器模块
    • 题目管理模块
    • 工具模块
    • 日志模块

    在线编译器模块

    此模块主要实现:获取用户提交的代码,调用 gcc/g++ 编译代码,并返回执行结果

    • 获取用户提交的代码

      • 使用第三方库 cpp-httplib 搭建http服务器
      • 封装编译API
      • 使用JSON格式序列化网页中收集到的数据
    • 调用gcc、g++编译代码

      • 创建子进程,程序替换编译代码
      • 创建子进程,程序替换运行代码
      • 重定向结果编译结果到临时文件
    • 组织结果,进行返回

      • 将临时文件中的信息序列化为JSON格式
      • 使用ctemplate模版技术渲染html页面
      • 将结果返回给用户
    题目管理模块

    此模块主要实现:本地题目的组织与加载

    • 组织
      • 通过结构体记录题目的id、name、star、dir
      • 将题目的代码框架、测试用例、题目描述的信息以文件的形式存储在本地,并将储存路径写入dir
    • 加载
      • 以 k(id) : v(结构体) 的方式将题目信息加载到map中
      • 封装API以供上层调用
    工具模块

    此模块主要实现:封装文件、URL解码工具
    具体实现见下面代码

    日志模块

    此模块用于记录服务器信息
    以 "[日志级别+时间戳+文件名:行号] "的格式打印信息

    项目中日志级别约定:INFO(提示)、WRAING(警告)、ERROR(错误)、FATAL(致命)

    遇到的问题:

    • gcc未升级,不支持C++11正则表达式
    • 未关闭linux防火墙导致浏览器无法访问页面
    • 安装ctemplate第三方库
    • 编译时指定路径寻找ctemplate,没有加-lctemplate

    代码实现:

    oj_server.cpp

    int main()
    {
      //服务器启动时,只加载一次数据
      OjModel model;
      model.Load();
      using namespace httplib;
    
      Server server;
      server.Get("/all_questions", [&model](const Request &req, Response &resp){
          (void) req;
          std::vector<Question> all_questions;
          model.GetAllQuestions(&all_questions);
          
          std::string html;
          OjView::RenderAllQuestions(all_questions, &html);
          resp.set_content(html, "text/html");
         
          });
      //R"()" C++11引入原始字符串--->忽略字符串中的转意字符
      // \d+--->正则表达式
      server.Get(R"(/question/(\d+))", [&model](const Request &req, Response &resp){
          Question question;
          model.GetQuestion(req.matches[1].str(), &question);
          std::string html;
          OjView::RenderOneQuestion(question, &html);
          resp.set_content(html, "text/html");
          });
    
      server.Post(R"(/compile/(\d+))", [&model](const Request &req, Response &resp){
          //1.根据id获取题目信息
          Question question;
          model.GetQuestion(req.matches[1].str(), &question);
          
          //2.解析body,获取用户提交的代码
          std::unordered_map<std::string, std::string> kv;
          UrlUtil::ParseBody(req.body, &kv);
          const std::string &user_code = kv["code"];
    
          //3.构造JSON结构的参数
          Json::Value req_json;
          std::string tail;
          FileUtil::Read(question.dir + "/tail.cpp", &tail);
          req_json["code"] = user_code + tail;
          Json::Value resp_json;
          
          //4.调用编译模块编译
          Compiler::CompileAndRun(req_json, &resp_json); 
    
          //5.根据编译结果构造html页面
          std::string html;
          OjView::RenderResult(resp_json["stdout"].asString(), resp_json["reason"].asString(), &html);
    
          resp.set_content(html, "text/html");
          });
      server.listen("0.0.0.0", 9527);
      return 0;
    }
    

    util.hpp

    #pragma once
    #include <stdio.h>
    #include <stdint.h>
    #include <sys/time.h>
    
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <unordered_map>
    #include <vector>
    #include <boost/algorithm/string.hpp>
    
    
    //时间戳工具
    ///
    class TimeUtil
    {
    public:
      //获取时间戳
      static int64_t TimeStamp()
      {
        struct timeval tv;
        gettimeofday(&tv, NULL);
        return tv.tv_sec;
      }
      static int64_t TimeStampMs()
      {
        struct timeval tv;
        gettimeofday(&tv, NULL);
        return tv.tv_sec * 1000 + tv.tv_usec / 1000;
      }
    };
    
    
    ///
    //打印日志工具
    ///
    
    //日志级别:FATAL(致命级别) ERROR(错误) WARINING(警告) INFO(提示)
    enum Level
    {
      INFO,
      WARING,
      ERROR,
      FATAL,
    };
    
    inline std::ostream &Log(Level level, const std::string &file_name, int line_num) 
    {
      std::string prefix = "[";
      if(level == INFO)
        prefix += "I";
      else if(level == WARING)
        prefix += "W";
      else if(level == ERROR)
        prefix += "E";
      else if(level == FATAL)
        prefix +="F";
      prefix += std::to_string(TimeUtil::TimeStamp());
      prefix += " ";
      prefix += file_name;
      prefix += ":";
      prefix += std::to_string(line_num);
      prefix += "]";
      std::cout << prefix;
      return std::cout;
    }
    
    #define LOG(level) Log(level, __FILE__, __LINE__)
    
    
    //
    //文件相关工具
    //
    class FileUtil
    {
    public:
      //传入文件路径,将文件中的所有内容存放在content字符串中
      static bool Read(const std::string &file_path, std::string *content)
      {
        content->clear();
        std::ifstream file(file_path.c_str());
        if(!file.is_open())
          return false;
        std::string line;
        while(std::getline(file, line))
        {
          *content += line + "\n";
        }
        file.close();
        return true;
      }
    
      static bool Write(const std::string &file_path, const std::string &content)
      {
        std::ofstream file(file_path.c_str());
        if(!file.is_open())
          return false;
    
        file.write(content.c_str(), content.size());
        file.close();
        return true; 
      }
    };
    
    
    class StringUtil
    {
    public:
      static void Split(const std::string &input, const std::string &split_char, std::vector<std::string> *output)
      {
        boost::split(*output, input, boost::is_any_of(split_char), boost::token_compress_on);
      }
    };
    
    
    //URL解析工具
    ///
    
    
    class UrlUtil
    {
    public:
      static void ParseBody(const std::string &body, std::unordered_map<std::string, std::string> *params)
      {
        //1. 对body中的字符串切分,存放在unordered_map中
        //      以&符号切分
        //      以=符合切分
        std::vector<std::string> kvs;
        StringUtil::Split(body, "&", &kvs);
        for(size_t i = 0; i < kvs.size(); ++i)
        {
          std::vector<std::string> kv;
          StringUtil::Split(kvs[i], "=", &kv);
          if(kv.size() != 2)
            continue;
        
         //2. 进行urldecode
         (*params)[kv[0]] = UrlDecode(kv[1]);
        }
      }
    
    
      static unsigned char ToHex(unsigned char x)   
      {   
        return  x > 9 ? x + 55 : x + 48;   
      }  
    
      static unsigned char FromHex(unsigned char x)   
      {   
        unsigned char y;  
        if (x >= 'A' && x <= 'Z') y = x - 'A' + 10;  
        else if (x >= 'a' && x <= 'z') y = x - 'a' + 10;  
        else if (x >= '0' && x <= '9') y = x - '0';  
        else assert(0);  
        return y;  
      }  
    
      static std::string UrlEncode(const std::string& str)  
      {  
        std::string strTemp = "";  
        size_t length = str.length();  
        for (size_t i = 0; i < length; i++)  
        {  
          if (isalnum((unsigned char)str[i]) ||   
              (str[i] == '-') ||  
              (str[i] == '_') ||   
              (str[i] == '.') ||   
              (str[i] == '~'))  
            strTemp += str[i];  
          else if (str[i] == ' ')  
            strTemp += "+";  
          else  
          {  
            strTemp += '%';  
            strTemp += ToHex((unsigned char)str[i] >> 4);  
            strTemp += ToHex((unsigned char)str[i] % 16);  
          }  
        }  
        return strTemp;  
      }
      static std::string UrlDecode(const std::string& str)  
      {  
        std::string strTemp = "";  
        size_t length = str.length();  
        for (size_t i = 0; i < length; i++)  
        {  
          if (str[i] == '+') strTemp += ' ';  
          else if (str[i] == '%')  
          {  
            assert(i + 2 < length);  
            unsigned char high = FromHex((unsigned char)str[++i]);  
            unsigned char low = FromHex((unsigned char)str[++i]);  
            strTemp += high*16 + low;  
          }  
          else strTemp += str[i];  
        }  
        return strTemp;  
      }
    };
    
    

    model.hpp

    #pragma once
    #include <string>
    #include <vector>
    #include <map>
    #include <fstream>
    #include "util.hpp"
    
    //将本地存储在文件中的题目信息加载,以供服务器调用
    
    struct Question
    {
      std::string id;
      std::string name;
      std::string dir;  //表示目录,包含题目描述、代码框架以及测试用例
      std::string star; //表示难度
    };
    
    class OjModel
    {
    public:
      bool GetAllQuestions(std::vector<Question> *questions)const
      {
        questions->clear();
        for(const auto &kv : _model)
          questions->push_back(kv.second);
        return true;
      }
    
      bool GetQuestion(const std::string &id, Question *q)const
      {
        auto pos = _model.find(id);
        if(pos == _model.end())
          return false;
        *q = pos->second;
        return true;
      }
    
      //将文件加载到哈希表中
      bool Load()
      {
        //1. 打开config.cfg文件
        std::ifstream file("./data/config.cfg");
        if(!file.is_open())
          return false;
    
        //2. 按行读取文件,并解析
        std::string line;
        while(std::getline(file, line))
        {
          //3. 将解析结果拼装到结构体中
          std::vector<std::string> tokens;
          StringUtil::Split(line, " ", &tokens);
          if(tokens.size() != 4)
          {
            LOG(ERROR) << "Config File Format Error!" << std::endl;
            continue;
          }
          //4. 将结构体加载到hash表中
          Question q;
          q.id = tokens[0];
          q.name = tokens[1];
          q.star = tokens[2];
          q.dir = tokens[3];
    
          _model[q.id] = q;
        }
        file.close();
        LOG(INFO) << "Load" << _model.size() << "questions" << std::endl;
        return true;
      }
    private:
      std::map<std::string, Question> _model;
    };
    
    

    veiw.hpp

    #pragma once
    #include <ctemplate/template.h> 
    #include <string>
    #include "model.hpp"
    #include "util.hpp"
    class OjView
    {
    public:
      //将所以题目信息渲染成html列表页面
      //使用google的ctemplate开源库渲染html,避免每次重新编写html页面信息
      static void RenderAllQuestions(const std::vector<Question> &all_questions, std::string *html)
      {
        ctemplate::TemplateDictionary dict("all_questions");
        for(const auto &question : all_questions)
        {
          ctemplate::TemplateDictionary *table_dict = dict.AddSectionDictionary("question");
          table_dict->SetValue("id", question.id);
          table_dict->SetValue("name", question.name);
          table_dict->SetValue("star", question.star);
        }
    
        ctemplate::Template * tpl;
        tpl = ctemplate::Template::GetTemplate("./template/all_questions.html", ctemplate::DO_NOT_STRIP);
        tpl->Expand(html, &dict);
      }
    
      static void RenderOneQuestion(const Question &question, std::string *html)
      {
        ctemplate::TemplateDictionary dict("questions");
        dict.SetValue("id", question.id);
        dict.SetValue("name", question.name);
        dict.SetValue("star", question.star);
        std::string desc;
        FileUtil::Read(question.dir + "/desc.txt", &desc);
        dict.SetValue("desc", desc);
        FileUtil::Read(question.dir + "/header.cpp", &desc);
        dict.SetValue("header", desc);
        ctemplate::Template * tpl;
        tpl = ctemplate::Template::GetTemplate("./template/question.html", ctemplate::DO_NOT_STRIP);
        tpl->Expand(html, &dict);
      }
      static void RenderResult(const std::string &str_stdout, const std::string &reason, std::string *html)
      {
        ctemplate::TemplateDictionary dict("result");
        dict.SetValue("stdout", str_stdout);
        dict.SetValue("reason", reason);
        
        ctemplate::Template * tpl;
        tpl = ctemplate::Template::GetTemplate("./template/result.html", ctemplate::DO_NOT_STRIP);
        tpl->Expand(html, &dict);
    
      }
    };
    
    

    本文完~

    展开全文
  • OJ系统错误处理

    2021-04-07 22:31:22
    总结了OJ系统的错误信息及处理方式 Queuing 程序正在等待队列中,等待编译和执行。 Accepted 程序通过了所有的测试,最后的答案也是正确的。 Presentation Error 格式错误。说明输出是正确的,可能在什么地方多输出...

    总结了OJ系统的错误信息及处理方式

    Queuing

    程序正在等待队列中,等待编译和执行。

    Accepted

    程序通过了所有的测试,最后的答案也是正确的。

    Presentation Error

    格式错误。说明输出是正确的,可能在什么地方多输出了一个空行或者空格,需要再修改输出格式。

    Time Limit Exceed

    时间超出。每道题目都有规定的时间限制,程序没有在规定时间执行完,就会返回这个信息。一般需要修改输入输出的方式或者程序的算法才能通过这道题目的测评。

    Memory Limit Exceed

    内存超出。每道题目都有规定内存限制,程序申请了过多的内存,就会返回这个错误。

    Wrong Answer

    错误结果。这是比较常见的错误信息。说明程序的算法有问题,需要修改。如果发现这个信息返回在第二个或者之后的测试案例中,那么有可能没有考虑到一些极端的情况。

    Compile Error

    编译错误。程序没有通过编译。一般系统会给出编译错误信息,可以查找为什么没有通过编译。应该先在IDE中进行编译测试之后再提交到评测系统中。

    Runtime Error

    运行时错误。一般有这几种情况:数组越界、除零、空指针、堆栈溢出。出现这个信息,表示程序中存在漏洞,需要仔细查找。

    展开全文
  • oj系统安装过程,所有命令需要手打,发出来仅仅是为了大家一起讨论,一起进步,如有侵权,请及时通知我,我会立刻将文件删除,敬请谅解,!
  • OJ系统研究现状

    2020-09-25 16:42:31
    研究现状 参考: [1]杨博,张能,李善平,夏鑫.智能代码补全研究综述[J]....[2]尹青山.基于群组信息改进矩阵分解的群组推荐方法[J]....开源OJ系统:https://github.com/QingdaoU/OnlineJudge 微服务框架Spring C
  • 线上OJ系统原型图

    2019-03-27 21:19:45
    线上OJ系统原型图 登录界面 教师端 教师首页
  • 宁波大学OJ系统的240个ACM题目,题目难度呈阶梯级上升,适合编程新手,有编程基础的可挑选里面经典或者相对困难的题目。特别是计算机专业参加考研复试的同学,一定要完成里面的题目。
  • OJ系统使用方法

    千次阅读 2016-08-07 21:21:27
    OJ系统使用方法: 一、打开http://acm.nyist.net,登陆到南阳理工学院ACM/ICPC在线评测系统(简称OJ) 二、在题目列表中选择一道题目, 如A+B Problem 三、查看题目的描述信息与题目要求的输入输出的格式,写出...
  • 燕山大学Linux的OJ系统设计,详细可以看讲解: https://blog.csdn.net/LZJSTUDY/article/details/81101071
  • 数据结构 OJ系统编程

    2013-10-09 21:34:32
    数据结构 OJ系统编程 王宏 四道题目 代码和文档
  • 简易oj系统实现

    千次阅读 2020-03-03 19:41:54
    简易oj系统实现 一、题目: 某次考试一共八道题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上...
  • oj系统安装的说明书

    2014-07-22 12:13:01
    方便做oj系统,用于ACM判别系统的操作,由于没有完成太多,所以,以后会一点点上传!
  • 如何破解一个OJ系统

    2019-10-06 20:38:09
    有的OJ系统是可以不通过正常程序就能AC的。 首先这个OJ系统要满足这个条件:能看到自己的输出。 OJ系统是怎么判题的?提前保存正确的输入输出样例,存在文件中,然后运行目标代码,将输入作为程序标准输入,最终将...
  • OJ系统爬虫总结

    2018-07-11 15:18:56
    最近导师让我帮他把OJ系统上的学生代码导出来,怎知系统并没有一键导出的功能,无奈只能对着百度众多繁杂的教程咬咬牙爬虫,折腾了1天半总算搞出来交差了。 需求 1.提取验证码 2.模拟登陆 3.提取学生账号...
  • ACM等OJ系统的各类C/C++输入输出说明(ACM等OJ系统的各类输入输出)注意点效率问题关于分隔关于换行关于输入输出重定向各类数据类型循环场景复杂分割 说明(ACM等OJ系统的各类输入输出) 这里用于记录ACM等OJ系统的...
  • OJ系统判题思路与代码实现

    千次阅读 2019-10-22 00:46:29
    OJ系统判题思路与代码实现 毕业设计做了个OJ系统,做得不好,打算重做,因为比较感兴趣,涉及到了许多东西,做系统的同时又把我在学校里学的东西给捡了回来,哈哈。 输入: exeFile:源程序文件 codeType:...
  • 橙旭园OJ系统上线啦!相信许多人在学习完编程之后都会茫然,感觉自己无所不能,但是当敲代码时却大脑一片空白。在这里向大家介绍练习和提高代码水平的新姿势——橙旭园OJ系统。橙旭园OJ系统网址是:...
  • 基于windows的OJ系统判题核心(FreeJudger)-已编译成功,点击debug中的FreeJudger.exe即可正常运行,亲测在win10系统下可以运行,下载之后一定要看说明
  • 本文件是对<宁波大学OJ系统240题>文件的解析,解析由本人自己编写,可用作参考,里面有一些相对较复杂的题目,都已经上传至本人CSDN博客,有兴趣的可以查看!
  • 如何使用OJ系统

    2014-02-26 16:53:00
    登录OJ系统,找到题目。比如作业题目为“13电科2班- 作业1.1”,点击"竞赛&作业"按钮选择题目,详见下图: 三、如何完成OJ实验和作业1. 登录OJ系统,找到题目。2. 理解题目,在本机完成编码和调试,无误后,...
  • OJ系统参与开发总结

    2019-06-05 11:23:42
    我们小组参与开发的是oj系统的管理员页面的职工管理下的职工修改和职工新建的开发。 结合Django和vue的开发,实际上代码量和难度与同项目成员相比是低很多的。 小组成员分工 林晨,林佐龙:后端API 及前后端连接 ...
  • 回文串判断(先错后对,OJ系统好严格啊).pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,319
精华内容 6,127
关键字:

oj系统