由于本人的代码习惯,如果是spj,为了保险,我的小数点一般会多输出一位,偏偏这个把我卡得怀疑人生
请问出题人:spj是如何判断相同的?是直接按数字位来比较的吗?
我看到比赛中有不少40分选手,说明这些选手已经注意到了k=1的情况。
我的代码如下 ,供参考,将%.5lf改成%.4lf就过了
#include<cstdio>
#include<cmath>
#define eps 1e-6
using namespace std;
char s[30];
int a,b,xa,xb,ya,yb,l;
double w,h;
bool eq(double a,double b){
return -eps<a-b&&a-b<eps;
}
int main(){
scanf("%s%d%d%d%d",s,&xa,&ya,&xb,&yb);
for(l=2;s[l]!='x'&&s[l]!='+';l++){
a=a*10+s[l]-'0';
}
if(a==0)a=1;
if(s[l]=='+')l++;
else l+=2;
if(s[l]!='\0')for(;s[l]!='\0'&&s[l]!='x';l++){
b=b*10+s[l]-'0';
}
if(s[l]=='x')a^=b^=a^=b;
h=b;
w=(double)b/a;
printf("%.5lf %.5lf\n",w+h+sqrt(w*w+h*h),w*h/2);
if(ya!=yb&&(xa==xb||!eq((double)(yb-ya)/(xb-xa),(double)a)))printf("-1");
else printf("1");
return 0;
}