博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
西北大学2019春季校赛填坑笔记
阅读量:5273 次
发布时间:2019-06-14

本文共 5721 字,大约阅读时间需要 19 分钟。

大家好,我是NE,

2019春季校赛终于办完了,这里零零散散的写一写东西吧

记录一下遇见的问题和我的简单解决方法,作为后面人的参考


目录:

  • 协同工作
  • 出题
  • 题面制作
  • 评测平台滚榜
  • 重现赛/同步赛
  • 其他

1.协同工作

  一个人很难出一套题,然后再自己验题,因此需要协同工作

  1.建议使用云文档,进行协同办公,方便又清晰,可以随时总览整个题表,分析难度,出题进度等

  2.建立一个群,实时讨论,保存和备份文件

  3.搭建一个临时的oj,方便验题,花式测试,甚至懒的话用来可以代替本地std和暴力的测试

  4.具体地,我们用的是Tim+腾讯云文档+青岛大学开源OJ

 

 

 

 


 2.出题

  我们出题的过程大概是

 1.确定题表

    思考难易度,涉及的算法,是否防AK,是否防爆零等,然后把憋了很久的脑洞堆起来,最后确定整个初步题表,此时没有数据,题面,std,只有思路

 2.生成数据

   初步写好精简的题面,确定数据范围和已有的思路,对着去尝试写std,暴力,数据生成器

     这里就会遇见很多事情了

     输入输出数据生成我自己用了2种方案,c++或者python:

    1.C++数据生成器

      假设你已经写好了整个std/暴力,那么很简单,把main和涉及到的所有变量,装进一个namespace里,然后贴过去就行了

      亲测能胜任各种简单题的数据生成

        模板如下,每组数据记得要对std和暴力进行初始化:

#include 
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)using namespace std;namespace gen{//输入生成器 int main() {}};namespace stdd{//答案生成器-std int main() {}};namespace bf{//答案生成器-暴力 int main() {}};int main() { char _in[100],_out[100]; rep(xx,1,10) {//会在同目录下自动生成文件,名为xx.in和xx.out sprintf(_in,"%d.in",xx);sprintf(_out,"%d.out",xx);/****************生成输入,会自动删掉原来的,只要重造输出数据的话,注释这个部分即可******/ freopen(_in,"w",stdout); gen::main(); fclose(stdout);/****************生成STD输出,会覆盖原来的输出*********************************/ freopen(_in,"r",stdin);freopen(_out,"w",stdout); stdd::main(); fclose(stdin);fclose(stdout);/****************生成暴力输出,会覆盖原来的输出*****************************/// freopen(_in,"r",stdin);freopen(_out,"w",stdout);// bf::main();// fclose(stdin);fclose(stdout);/*****************************************************/ system(_in);system(_out);//打开数据 } return 0;}

      此外,github上有另外一个C++制造数据的项目 https://github.com/WalterBrightHub/ACMDataMaker

    但我觉得并不好用,仅作为参考.

    2.Python数据生成器

      主要是因为有些数据不太好出,比如图论,几何,我选择用脚本语言python+github上的项目,

      本次校赛中,我用了洛谷的cyaron https://github.com/luogu-dev/cyaron 这个项目是基于python的,

      不会python也没关系,装一个python 3的环境,打开vscode去写代码,30分钟就能入门写脚本,不比简单入门latex难多少

      我自己用的是vscode写代码,然后在cmd上运行

      我自己主要是生成了2个图论数据,它的功能还有很多,可以自行摸索

      可以生成各种数据,非常好用

    需要注意的是,如果你的std锅了,python会报错在std被运行的那一行

    我的一个生成器脚本如下:

#!/usr/bin/env pythonfrom cyaron import *for i in range(3, 4):  test_data = IO(file_prefix="", data_id=i)  n = 200000  m = 200000  test_data.input_writeln(n, m)  val = []  a = []  b = []  for j in range(0, n):    val.append(randint(2 ** 19-1,1000000))  test_data.input_writeln(val)  graph = Graph.chain(n)  test_data.input_writeln(graph.to_str(output=Edge.unweighted_edge))  for j in range(0, m):    if(j%10<=5):      a = 1      b = randint(1,n)      test_data.input_writeln(a, b)    elif(j%10 <=8):      a = 2      b = randint(1, n)      c = 2 ** 19-1      test_data.input_writeln(a, b, c)    else:      a = 3      b = randint(1,10)      test_data.input_writeln(a, b)  test_data.output_gen("std.exe")#把标程exe放在同目录即可

    3.零零散散的其他博客/项目:

    https://blog.csdn.net/u013598409/article/details/49967969

    https://github.com/Deyi-Wang/OI-ACM-testcases-creater

    https://blog.csdn.net/WADuan2/article/details/78445955

      https://blog.csdn.net/darost/article/details/72550943

    4.其他

    有时候,dfs题目的std在本地生成标准答案时会爆栈,导致只能生成1e5以下的答案数据

    此时需要加入内嵌的汇编指令扩栈,放在main下面一行就行

  int size = 256 << 20;//256MB    char*p=(char*)malloc(size) + size;    __asm__("movl %0, %%esp\n" :: "r"(p) )

     如果要使用domjudge,需要文件名批量修改,用bat即可,放在同目录下就行

ren *.out *.ans

 3.对拍与验题

    写完std后,需要验证其准确性,此时使用暴力进行小范围对拍就行

    出完数据后,也需要验题

    具体方式有多种,我用过本地测试和OJ测试

    本地一般用于对拍暴力和std,初步验证算法是否正确

    1.使用fc指令

    具体不多说,py代码如下,放在同目录下运行就行,当然,C++应该也是可以的

 

 

import osfor i in range(1, 100):  stdin = "data" + str(i) + ".in"  stdout = "stdout" + str(i) + ".out"  bfout = "data" + str(i) + ".out"  os.system("fc "+stdout+" "+bfout)

    2.使用OJ

       首先,你要有一个服务器,那么青岛大学的一键式OJ极其好用,把数据上传上去,然后进行提交测试即可

          https://github.com/QingdaoU/OnlineJudgeDeploy/tree/2.0

    3.使用OI工具箱

          这个可能会比较好用,但上面的已经够用了,想用可以自行摸索

       说明:https://abc233.site/archives/47  下载:https://oitoolbox.github.io/

 


3.题面制作

  这个就很有趣了,有趣到我字体都变好看了    
    1.Word
      

      

  

 

好就在大家都会用,上手难度低,可玩性也高,我参考牛客网的排版,做了两次校赛的题面,

      我觉得很好看,主要规则如下:

      1.风格统一,一页之内不要出现3种以上的字体
      2.页边距收窄,紧凑一些,样例尽量用双栏,尽量一页一题
      3.所有字母/数字推荐用Cambria Math斜字体,样例请务必用等宽字体
      4.汉字推荐宋体/华文中宋,标题推荐微软雅黑
      5.首页放上封面,不让选手提前看题
      6.记得在封面上写一些注意事项
      7.公式就老老实实按alt和'+'创建标准公式
      8.善用边框线功能,格式刷功能,公式功能
      9.为了跨版本/跨平台/word换wps不出锅,请另存为pdf进行打印和最终发布

     

    2.公式和$LATEX$

     由于出题组不是人人都会$LATEX$,为了方便每个人都能随时修改题面,

      最后采用了大家都会的Word
      有兴趣可以自行摸索$LATEX$,毕竟写博客/做公式/写论文还是要用$LATEX$的

       文档1:https://wenku.baidu.com/view/c70982ed51e79b89680226f6.html?from=search

       文档2:http://www.mohu.org/info/lshort-cn.pdf
       速查手册:http://www.mohu.org/info/symbols/symbols.htm
       公式实时生成/测试:https://private.codecogs.com/latex/eqneditor.php

      2.画图

      画图用了这个免费的在线画图平台,有几何,函数等:https://www.geogebra.org/

      类似的还有:https://www.desmos.com


4.评测平台和滚榜
      这个部分较为复杂,我就简单的写一下,可以自行摸索
      截止到2018年春季校赛,我们使用的都是pc2,
      到了2018冬季新生赛的时候,就全面改用了各方面都更优异的domjudge
      网址如下:
      官方网站:https://www.domjudge.org/
      参考博客:
      https://blog.csdn.net/AASE1235779/article/details/84110193
      https://www.cnblogs.com/mcginn/p/8976797.html
      https://weidongxu84.wordpress.com/2012/07/21/domjudge%E7%BB%93%E6%9E%84%E7%AE%80%E4%BB%8B/
      https://blog.csdn.net/u014451076/article/details/50818578
      至于滚榜,在多次测试之后,我们使用了github上的这个项目:
    
https://github.com/hex539/scoreboard
      至于服务器,这个就各显神通了,包括按小时租借的云服务器,或者是自家学校网络中心的都可以
      最近两次比赛,我们都用了我们自己学校的服务器

5.重现赛/同步赛
 
可以做同步赛/重现赛的有牛客,质心,计蒜客等,有时候可以获得一些奖品赞助
  2018年冬季的新生赛我们在牛客网放了同步赛,效果很好,还给了很多礼物,非常感谢
  https://ac.nowcoder.com/acm/contest/321#question
  2019年春季的组队模拟赛,我们在质心教育的cometoj做了重现赛,他们也提供了礼物,同样非常感谢
  https://www.cometoj.com/contests

其他的,其实这里写的比较清楚了:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



这应该是我完整接手的最后一次校赛了,也希望大家以后都能办好校赛.

 


 


 

 

比赛主要出题人/验题人:jwj,NE,dqs

 

技术支持:cjc7373

题面制作:jwj,NE

 感谢其他现役队员和志愿者的帮忙

转载于:https://www.cnblogs.com/nervendnig/p/10549906.html

你可能感兴趣的文章
如何用DOM 元素就能画出国宝熊猫
查看>>
实验十一 路由器综合路由配置
查看>>
表单中全选或者全不选的checkbox代码
查看>>
PHP SOAP 提交XML
查看>>
vim 乱码问题的方法参考
查看>>
关于jquery方面的知识点
查看>>
使用jenkins docker容器的坑
查看>>
hello2 Source Analisis
查看>>
onclikc事件和onmousedown事件的区别与联系
查看>>
BZOJ 3456: 城市规划 多项式求逆
查看>>
BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络
查看>>
NOI2018 你的名字 后缀自动机 + 线段树合并 + 可持久化
查看>>
学习笔记之03百度搜索页面
查看>>
Solr
查看>>
网络7层协议,4层,5层?理清容易混淆的几个概念
查看>>
转载---编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)...
查看>>
并查集模板
查看>>
PHP preg_match的简单使用,验证邮箱地址
查看>>
12小球称重问题
查看>>
Java 动态代理
查看>>