1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| #include<cstdlib> #include<iostream> #include<string> #include<cstring> #include<ctime> #include<cstdio> #include<cmath> #include<windows.h> using namespace std; int cw(int a){ int ans=0; while(a>0){ ans++; a/=10; } return ans; } int main(){ string name,in=".in",outans,out=".out",exe=".exe",exefile=".exe",infile=".in",outfile=".out",ansfile=".csv"; int g,gn,n,fen,ff=0,flag1=0,flag2=0; double TT=0.0; printf("请输入题目名:"); cin>>name; printf("请输入测试数据中输出文件的后缀名(ans / out):"); cin>>outans; outans.insert(0,"."); printf("请输入测试数据末尾数字格式:1.题目名后直接加数字没有0补位 2.题目名后加数字有0补位 (输入编号1/2即可): "); scanf("%d",&g); printf("请输入测试数据个数:"); scanf("%d",&n); int wn=cw(n) printf("请"); while(g==2){ printf("输入补位后数字总位数:"); scanf("%d",&gn); if(wn>=gn) break; printf("位数过少,至少%d位\n请重新",wn); } exefile.insert(0,name); infile.insert(0,name); ansfile.insert(0,name); outfile.insert(0,name); fen=100/n; FILE* lans=fopen(ansfile.c_str(),"w"); fprintf(lans,"编号,结果,用时(s),得分\n"); string cmd2="del ",cmd4="del "; for(int i=1;i<=n;i++){ string cmd1="copy ",cmd3="fc "; cmd1+=name; cmd3+=outfile; cmd3+=" "; cmd3+=name; switch(g){ case 1:{ if(i<10){ cmd1+=char(i+'0'); cmd3+=char(i+'0'); } else if(i<100){ cmd1+=char(i/10+'0'); cmd1+=char(i%10+'0'); cmd3+=char(i/10+'0'); cmd3+=char(i%10+'0'); } else if(i<1000){ cmd1+=char(i/100+'0'); cmd1+=char((i/10)%10+'0'); cmd1+=char(i%10+'0'); cmd3+=char(i/100+'0'); cmd3+=char((i/10)%10+'0'); cmd3+=char(i%10+'0'); } else if(i<10000){ cmd1+=char(i/1000+'0'); cmd1+=char((i/100)%10+'0'); cmd1+=char((i/10)%10+'0'); cmd1+=char(i%10+'0'); cmd3+=char(i/1000+'0'); cmd3+=char((i/100)%10+'0'); cmd3+=char((i/10)%10+'0'); cmd3+=char(i%10+'0'); } break; } case 2:{ for(int j=gn-1;j>=0;j--){ int gog=pow(10,j); cmd1+=char((i/gog)%10+'0'); cmd3+=char((i/gog)%10+'0'); } break; } } cmd1+=in; cmd1+=" "; cmd1+=infile; cmd3+=outans; fprintf(lans,"%d,",i); int time1,time2; double T; system(cmd1.c_str()); time1=clock(); system(exefile.c_str()); time2=clock(); T=double((double(time2)-double(time1))/1000.0); TT=T>TT?T:TT; if(T>1.0) fprintf(lans,"TLE,%.3lf,%d\n",T,0),printf("TLE,%.3lf,%d\n",T,0),flag2=2; else if(!system(cmd3.c_str())) fprintf(lans,"AC,%.3lf,%d\n",T,fen),printf("AC,%.3lf,%d\n",T,fen),ff+=fen; else fprintf(lans,"WA,%.3lf,%d\n",T,0),printf("WA,%.3lf,%d\n",T,0),flag1=1; } cmd2+=infile; cmd4+=outfile; system(cmd2.c_str()); system(cmd4.c_str()); fprintf(lans,"总结果,"); if(flag1==0&&flag2==0) fprintf(lans,"AC,"); else if(flag1==1&&flag2==0) fprintf(lans,"WA,"); else if(flag2==2) fprintf(lans,"TLE,"); fprintf(lans,"%.3lf,%d",TT,ff); fclose(lans); return 0; }
|