g++ -O2 -lm --std=c++11 -o a.out -DONLINE_JUDGE -fno-asm code.cpp
gcc -O2 --std=c99 -o a.out -DONLINE_JUDGE -fno-asm code.c -lm
fpc -O2 -dONLINE_JUDGE code.pas
在提交审核前必须完成的工作:
(1)提供所有题目的简化版描述(裸模型);
(2)提供所有题目的题解(叙述所考察算法及解题思路)和标程。
注1:若题目非原创,请提供来源;
注2:非传统型题目同样需要提供所有测试点的解题方案。
将简化版描述、题解各制成一份pdf,与标程一起打包发至lydrainbowcat@pku.edu.cn
发送后CH将安排验题,验题工作一般在3天内完成(无特殊情况最多一周)。
题目初审通过后CH将通知并协助出题人进行下一阶段的工作。
注3:(能力排名在2000以上 || 获得或入选过 ((NOI金牌 && 集训队) || ACM-ICPC世界总决赛)) 的出题人免审。
在比赛开放报名前必须完成的工作:
(1)上传题目描述、数据;
(2)将标程在CH上测试通过;
(3)每道题目至少提交一道暴力程序用于检验;
(4)与CH讨论确定比赛时间,一般要求比赛时间不超过5小时,每周比赛不超过2次。
如数据过大上传困难,可以联系管理员协助;
上述工作完成后比赛将正式挂出开放报名。
在比赛开始前必须完成的工作:
(1)比赛开始2天前完善题目的完整版描述(例如可添加背景等);
(2)比赛开始1~2天前发送一次邀请邮件。
可做其它适当的宣传。
在比赛中必须进行的工作:
(1)全程关注比赛进程,解答疑问;
建议(不必须)进行的工作:
(1)OI赛制每题至少3档部分分,每档部分分提交一个程序以检验可以拿到对应分值;
Unofficial公开赛的回归:
CH的比赛将分为三档:Official公开赛(计入能力排名)、Unofficial公开赛(不计入能力排名)、小组赛;
公开赛一律需要审核,小组赛(Unofficial自由比赛区)免审核;
在第1步中初审失败的公开赛,出题人不愿意修改或者修改2次后仍审核失败的,将举办Unofficial公开赛。
if(n<1||n>10000) return 1;
#include <cassert> #include <cstdio> #include <cstdlib> #include <cstring> //一些定义 const int ACCEPT = 0; const int WRONG_ANSWER = 1; //fstd 标准输出 fout 选手输出 fin 标准输入 FILE *fstd,*fout,*fin; int LastCharStd = -2,LastCharOut=-2; //检查下一个字符 inline int Peek(FILE* f){ if(f==fstd){ if(LastCharStd == -2) LastCharStd=fgetc(f); return LastCharStd; }else{ if(LastCharOut == -2) LastCharOut=fgetc(f); return LastCharOut; } } //取出下一个字符 inline void Pop(FILE* f){ if(f==fstd){ if(LastCharStd == -2) fgetc(f); else LastCharStd = -2; }else{ if(LastCharOut == -2) fgetc(f); else LastCharOut = -2; } } //判断字符是否为空白 inline bool IsSpace(int ch){ return ch>=0 && (ch<=32 || ch>=127); } //执行比较操作。 bool DoCompare(){ int stdPosition=0,outPosition=0; bool stdInSpace=true,outInSpace=true; while(true){ int stdC=Peek(fstd),outC=Peek(fout); if(stdC==EOF && outC==EOF){ return true; }else if(stdC==EOF && IsSpace(outC)){ outPosition++; Pop(fout); }else if(outC==EOF && IsSpace(stdC)){ stdPosition++; Pop(fstd); }else if(IsSpace(stdC) && IsSpace(outC)){ stdPosition++; outPosition++; stdInSpace=true; outInSpace=true; Pop(fstd); Pop(fout); }else if(IsSpace(stdC) && outInSpace){ stdPosition++; Pop(fstd); }else if(IsSpace(outC) && stdInSpace){ outPosition++; Pop(fout); }else if(stdC==outC){ stdPosition++; outPosition++; stdInSpace=false; outInSpace=false; Pop(fstd); Pop(fout); }else{ printf("答案文件的第%d字节",stdPosition+1); if(stdC==EOF){ printf("<EOF>"); }else{ printf("0x%x",stdC); } printf("不能匹配输出文件的第%d字节",outPosition+1); if(outC==EOF){ printf("%lt;EOF%gt;"); }else{ printf("0x%x",outC); } puts(""); return false; } } } int main(int argc, char* argv[]) { if(argc!=4){ printf("参数不足 %d",argc); return -1; } //打开文件 if(NULL==(fstd=fopen(argv[1],"r"))){ return -1; } if(NULL==(fout=fopen(argv[2],"r"))){ return -1; } if(NULL==(fin=fopen(argv[3],"r"))){ return -1; } if(DoCompare()){ return ACCEPT; }else{ return WRONG_ANSWER; } }