昨天发现了一个叫做ACJudge的网站上面提供了HDOJ的大部分题目的正确代码,于是写了一个小小的工具遍历了一遍,最后获取到了3591个可用的代码。
主抓取引擎代码(写的很乱X_X...)
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
int system(string s)
{
char* p=new char[s.size()+8];
memset(p,0,s.size()+8);
strcpy(p,s.c_str());
int ret=system(p);
delete[] p;
return ret;
}
char buffer[409600];
char code[409600];
void Deal()
{
FILE* fp=fopen("D:/xxx.txt","r");
FILE* ofp=fopen("D:/output_re.txt","w");
memset(buffer,0,409600);
while(fgets(buffer,409600,fp)>0)
{
if(strstr(buffer,"<pre><code>")==NULL) {memset(buffer,0,409600);continue;}
else break;
}
char* p=buffer;
char* q;
string finalcode;
while(1)
{
if(strstr(p,"</div>")<strstr(p,"<span")) finalcode+='\n';
p=strstr(p,"<span");
if(p==nullptr) break;
p=strstr(p,">")+1;
q=strstr(p,"</span>");
memset(code,0,409600);
strncpy(code,p,q-p);
finalcode+=code;
p=q+7;
}
fprintf(ofp,"%s\n",finalcode.c_str());
fclose(fp);
fclose(ofp);
}
void htmldecode()
{
FILE* fp=fopen("D:/output_re.txt","r");
FILE* ofp=fopen("D:/output_decoded.txt","w");
int c;
while((c=fgetc(fp))!=EOF)
{
if(c=='&')
{
int a=fgetc(fp);
if(a=='a')
{
int b=fgetc(fp);
if(b=='m')
{
fputc('&',ofp);
fgetc(fp);//p
}
else //p
{
fputc('\'',ofp);
fgetc(fp);//o
fgetc(fp);//s
}
}
else if(a=='c')
{
int b=fgetc(fp);
if(b=='e')
{
fprintf(ofp,"¢");
fgetc(fp);//n
fgetc(fp);//t
}
else //o
{
fprintf(ofp,"©");
fgetc(fp);//p
fgetc(fp);//y
}
}
else if(a=='e')
{
fprintf(ofp,"€");
fgetc(fp);//u
fgetc(fp);//r
fgetc(fp);//o
}
else if(a=='d')
{
fprintf(ofp,"÷");
fgetc(fp);//i
fgetc(fp);//v
fgetc(fp);//i
fgetc(fp);//d
fgetc(fp);//e
}
else if(a=='g')
{
fputc('>',ofp);
fgetc(fp);//t
}
else if(a=='l')
{
fputc('<',ofp);
fgetc(fp);//t
}
else if(a=='n')
{
fputc(' ',ofp);
fgetc(fp);//b
fgetc(fp);//s
fgetc(fp);//p
}
else if(a=='p')
{
fprintf(ofp,"£");
fgetc(fp);//o
fgetc(fp);//u
fgetc(fp);//n
fgetc(fp);//d
}
else if(a=='q')
{
fputc('\"',ofp);
fgetc(fp);//u
fgetc(fp);//o
fgetc(fp);//t
}
else if(a=='r')
{
fprintf(ofp,"®");
fgetc(fp);//e
fgetc(fp);//g
}
else if(a=='s')
{
fprintf(ofp,"§");
fgetc(fp);//e
fgetc(fp);//c
fgetc(fp);//t
}
else if(a=='t')
{
int b=fgetc(fp);
if(b=='i')
{
fprintf(ofp,"×");
fgetc(fp);//m
fgetc(fp);//e
fgetc(fp);//s
}
else//r
{
fprintf(ofp,"™");
fgetc(fp);//a
fgetc(fp);//d
fgetc(fp);//e
}
}
else //y
{
fprintf(ofp,"¥");
fgetc(fp);//e
fgetc(fp);//n
}
fgetc(fp);//;
}
else
{
fputc(c,ofp);
}
}
fclose(fp);
fclose(ofp);
}
int main(int argc,char** argv)
{
if(argc<2)
{
printf("No input.\n");
return 0;
}
string cmd="C:/curl ";
string ss=argv[1];
cmd+="http://www.jtahstu.com/acoj/show.php?pid="+ss+" > D:/xxx.txt";
system(cmd);
Deal();
htmldecode();
return 0;
}
先抓取,然后Deal()提取代码主体,htmldecode()进行HTML Decode.
下面是引导设备代码(控制引擎循环...)
#include <iostream>
#include <thread>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int system(string s)
{
char* p=new char[s.size()+8];
memset(p,0,s.size()+8);
strcpy(p,s.c_str());
int ret=system(p);
delete[] p;
return ret;
}
char intstr[128];
char cmd[256];
int main()
{
for(int i=1000;i<5505;i++)
{
sprintf(intstr,"%d",i);
sprintf(cmd,"D:/KKK/main.exe %s",intstr);
system(cmd);
sprintf(cmd,"copy D:\\output_decoded.txt D:\\KKK");
system(cmd);
sprintf(cmd,"rename D:\\KKK\\output_decoded.txt %d_autoAC.cpp",i);
system(cmd);
//this_thread::sleep_for(chrono::seconds(1));
}
return 0;
}
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int getfilesize(const char* Filename)
{
FILE* fp=fopen(Filename,"r");
if(fp==nullptr) return -1;
else
{
fseek(fp,0L,SEEK_END);
int L=ftell(fp);
fclose(fp);
return L;
}
}
char name[256];
int main()
{
for(int i=1000;i<5505;i++)
{
sprintf(name,"D:\\KKK\\%d_autoAC.cpp",i);
int L=getfilesize(name);
if(L>=0&&L<10)
{
sprintf(name,"RENAME D:\\KKK\\%d_autoAC.cpp %d_empty.txt",i,i);
printf("Deleting %d...\n",i);
system(name);
}
}
return 0;
}
所有获取到的代码都将上传到GitHub上( Kiritow/OJ-Problems-Source)