入门:
题目,以整数形式给定圆的半径,输出该圆的周长,该圆的面积。
比赛目录如下:
标准输入输出数据如下:
circle1.in
1
circle1.ans
6.283185 3.141593
circle2.in
2
circle2.ans
12.566370 12.566370
circle3.in
3
circle3.ans
18.849556 28.274333
circle4.in
4
circle4.ans
25.132741 50.265482
circle5.in
5
circle5.ans
31.415926 78.539815
标准答案
#define PI 3.1415926
用户答案
#define PI 3.14
用户程序(circle.cpp)如下:
#include <bits/stdc++.h>
using namespace std;
#define PI 3.14
int main(){
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
int r;
double s1,s2;
scanf("%d",&r);
s1=2*PI*r;
s2=PI*r*r;
printf("%lf %lf\n",s1,s2);
return 0;
}
SPJ代码(chk.cpp)如下:
#include <bits/stdc++.h>
using namespace std;
FILE* fin;//标准输入
FILE* fout;//用户输入
FILE* fstd;//标准输出
FILE* fscore;//得分文件
FILE* freport;//报告文件
#define N 100000020
#define M 100020
int n;
int x[M], y[M];
int ans[M];
int flag1[N];
int flag0[N];
int sum0[N];
int sum1[N];
int maxn = -1;
void quit(int x)
{
fprintf(fscore,"%d",x),fclose(fin),fclose(fout);
fclose(fstd),fclose(fscore),fclose(freport),exit(0);
}
int Judge()
{
double a, b,aa,bb;
fscanf(fout, "%lf %lf", &a, &b);
fscanf(fstd,"%lf %lf",&aa,&bb);
if(fabs(a-aa)<=0.01 && fabs(b-bb)<=0.01)
return 1;
else
return 0;
}
int main(int argc,char*argv[])
{
fin=fopen(argv[1],"r");//标准输入
fout=fopen(argv[2],"r");//用户输入
fstd=fopen(argv[3],"r");//标准输出
fscore=fopen(argv[5],"w");//得分文件
freport=fopen(argv[6],"w");//报告文件
int last=Judge();
if(last==1) fprintf(freport,"OK"),quit(20);
else fprintf(freport,"WA"),quit(0);
}
其中,judge函数中添加的就是我们要特殊判断的内容。
如上面的代码,就是如果输入输出比标准差0.01以内,就可以成功AC。
未加SPJ,测评如下:
加SPJ(将chk.cpp编译后的chk.exe文件放于spj1\data\circle\目录中,详见本文开始部分的比赛目录),测评如下: