zoukankan      html  css  js  c++  java
  • 本地CodeForces

    #include <stdio.h>
    #include <string.h>
    
    #define MAXCMDLEN    200
    #define MAXLINELEN    10000
    
    int  LastDiv,NewDiv,MaxPage;
    int  Div,IndexCnt;
    char Cmd[MAXCMDLEN],Line[MAXLINELEN],Name[5],Png[MAXCMDLEN];
    int  i,j,k,l,p,Len;
    FILE *fIndex,*fTemp,*fExist,*fWrite;
    
    void AddToIndex(FILE *file,int i,char *str)
    {
        fprintf(file,"\t\t<td><a href=problemset/%d%s>%d%s</a></td>\n",i,str,i,str);
        ++IndexCnt;
        if((IndexCnt&7)==0)
        {
            fprintf(file,"\t</tr><tr>\n");
        }
    }
    
    void MakeHtml(int i,char *str)
    {
        sprintf(Cmd,"problemset/%d%s",i,str);
        fWrite=fopen(Cmd,"w");
        sprintf(Cmd,"grep -n \"ttypography\\\"\" temp > linenum");
        system(Cmd);
        fTemp=fopen("linenum","r");
        fscanf(fTemp,"%d",&Len);
        fclose(fTemp);
        fTemp=fopen("temp","r");
        fprintf(fWrite,"<html>\n\t<body>\n<LINK charset=\"utf-8\" href=\"src/style.css\" rel=\"stylesheet\" type=\"text/css\"/>\n\n");
        for(l=0;l<Len;++l)
        {
            fgets(Line,MAXLINELEN,fTemp);
        }
        Len=strlen(Line);
        for(l=0;l<Len;++l)
        {
            if(l<Len-30)
            {
                if(Line[l]=='s'&&Line[l+1]=='r'&&Line[l+2]=='c')
                {
                    fprintf(fWrite,"src=\"");
                    l+=26;
                    for(p=0;Line[l]!='"';++l,++p)
                    {
                        Png[p]=Line[l];
                    }
                    Png[p]='\0';
                    fprintf(fWrite,"%s\"",Png);
                    sprintf(Cmd,"wget -q http://codeforces.ru/%s -O problemset/%s",Png,Png);
                    system(Cmd);
                }
                else
                {
                    fprintf(fWrite,"%c",Line[l]);
                }
            }
        }
        fprintf(fWrite,"\n");
        fprintf(fWrite,"\t</body>\n</html>");
        fclose(fWrite);
        fclose(fTemp);
    }
    
    int ProcessName(int i,char *str)
    {
        sprintf(Cmd,"problemset/%d%s",i,str);
        fExist=fopen(Cmd,"r");
        if(fExist==NULL)
        {
            printf("Try to get %d%s.........",i,str);
            sprintf(Cmd,"curl -I -s http://codeforces.com/problemset/problem/%d/%s | grep Content-Length > temp",i,str);
            system(Cmd);
            fTemp=fopen("temp","r");
            fscanf(fTemp,"%*s %d",&Len);
            fclose(fTemp);
            if(Len!=0)
            {
                sprintf(Cmd,"wget -q http://codeforces.com/problemset/problem/%d/%s -O temp",i,str);
                system(Cmd);
                MakeHtml(i,str);
                AddToIndex(fIndex,i,str);
                printf("OK!\n");        
            }
            else
            {
                printf("Error,It's not exist!\n");
                return -1;
            }
        }
        else
        {
            AddToIndex(fIndex,i,str);
            fclose(fExist);
        }
        return 0;
    }
    
    void MakeProblemSet()
    {
        system("touch ProblemSetIndex && rm ProblemSetIndex");
        fIndex=fopen("ProblemSetIndex","w");
        fprintf(fIndex,"<html>\n\t<body>\n\n<h1 align=center>CodeForces</h1><p>\n<table align=center width=\"90%\">\n\t<tr>\n");
        for(i=LastDiv;i<=NewDiv;++i)
        {
            if(i==177)
            {
                for(j=0;j<7;++j)
                {
                    for(k=1;k<=2;++k)
                    {
                        sprintf(Name,"%c%d\0",j+'A',k);
                        ProcessName(i,Name);
                    }
                }
            }
            else if(i==178)
            {
                for(j=0;j<6;++j)
                {
                    for(k=1;k<=3;++k)
                    {
                        sprintf(Name,"%c%d\0",j+'A',k);
                        ProcessName(i,Name);
                    }
                }
            }
            else if(i==207)
            {
                for(j=0;j<4;++j)
                {
                    for(k=1;k<=3;++k)
                    {
                        sprintf(Name,"%c%d\0",j+'A',k);
                        ProcessName(i,Name);
                    }
                }
                for(k=4;k<=9;++k)
                {
                    sprintf(Name,"%c%d\0",'D',k);
                    ProcessName(i,Name);
                }
            }
            else
            {
                for(j=0;j<26;++j)
                {
                    sprintf(Name,"%c\0",j+'A');
                    if(ProcessName(i,Name)==-1)
                    {
                        break;
                    }
                }
            }
        }
        fprintf(fIndex,"\t</tr>\n</table>\n\n\t</body>\n</html>");
        fclose(fIndex);
    }
    
    char *strrev(char *str)
    {
        char *p1,*p2;
        for(p1=str,p2=str+strlen(str)-1;p2>p1;++p1,--p2)
        {
            *p1^=*p2;
            *p2^=*p1;
            *p1^=*p2;
        }
        return str;
    }
    
    void MakeForNoSoul()
    {
        IndexCnt=0;
        system("touch ForNoSoul && rm ForNoSoul");
        fIndex=fopen("ForNoSoul","w");
        fprintf(fIndex,"<html>\n\t<body>\n\n<h1 align=center>CodeForces For NoSoul</h1>\n");
        fprintf(fIndex,"<table align=center width=\"90%\">\n\t<tr>\n");
        for(i=1;i<=MaxPage;++i)
        {
            sprintf(Cmd,"wget -q http://codeforces.com/problemset/page/%d?order=BY_SOLVED_DESC -O temp",i);
            system(Cmd);
            fTemp=fopen("temp","r");
            for(j=0;j<700;++j)
            {
                fgets(Line,MAXLINELEN,fTemp);
            }
            while(fgets(Line,MAXLINELEN,fTemp)!=NULL)
            {
                Len=strlen(Line);
                if(Len>=15)
                {
                    if(Line[Len-6]=='i'&&Line[Len-5]=='d'&&Line[Len-3]=='>')
                    {
                        fgets(Line,MAXLINELEN,fTemp);
                        fgets(Line,MAXLINELEN,fTemp);
                        Len=strlen(Line);
                        for(k=0,j=Len-3;Line[j]!=' ';++k,--j)
                        {
                            Name[k]=Line[j];
                        }
                        Name[k]='\0';
                        strrev(Name);
                        sprintf(Cmd,"/home/nosoul/NoSoul.Love/MyProjects/MyCode/CodeForces/%s.c",Name);
                        fExist=fopen(Cmd,"r");
                        if(fExist==NULL)
                        {
                            printf("Add %s to NoSoul Index.\n",Name);    
                            sscanf(Name,"%d%s",&Div,Name);
                            AddToIndex(fIndex,Div,Name);
                        }
                    }
                }
            }
            fclose(fTemp);
        }
        fprintf(fIndex,"\t</tr>\n</table>\n\n\t</body>\n</html>");
        fclose(fIndex);
    }
    
    int main(int argc,char *argv[])
    {
        fExist=fopen("problemset/src/style.css","r");
        if(fExist==NULL)
        {
            system("mkdir problemset && mkdir problemset/src problemset/renderer");
            system("wget -q http://codeforces.ru/static/combine/ec1325e741305c9a1a85151d0f3e0565_9a4e89dff55c2bd439f2378c20e3710f.css -O problemset/src/style.css");
        }
        else
        {
            fclose(fExist);
        }
        int i;
        if(argc>1)
        {
            for(i=1;i<argc;++i)
            {
                if(strcmp(argv[i],"Set")==0)
                {
                    LastDiv=atoi(argv[i+1]);
                    NewDiv=atoi(argv[i+2]);
                    printf("Start Make ProblemSet...\n");
                    MakeProblemSet();
                    system("rm linenum");
                    printf("End Make ProblemSet.\n");
                    i+=2;
                }
                else if(strcmp(argv[i],"NoSoul")==0)
                {
                    MaxPage=atoi(argv[i+1]);
                    printf("Start Make For NoSoul...\n");
                    MakeForNoSoul();
                    printf("End Make For NoSoul.\n");
                    ++i;
                }
            }
        }
        system("rm temp");
        return 0;
    }

     repo:https://github.com/NoSoul/LocalCodeForces

  • 相关阅读:
    HDU 1850 Being a Good Boy in Spring Festival
    UESTC 1080 空心矩阵
    HDU 2491 Priest John's Busiest Day
    UVALive 6181
    ZOJ 2674 Strange Limit
    UVA 12532 Interval Product
    UESTC 1237 质因子分解
    UESTC 1014 Shot
    xe5 android listbox的 TMetropolisUIListBoxItem
    xe5 android tts(Text To Speech)
  • 原文地址:https://www.cnblogs.com/NoSoul/p/3013067.html
Copyright © 2011-2022 走看看