也许没有那么严重,但这绝对是一个不称职的 SPJ。
理由如下:
接下来 n 行每行一个实数 ai 表一条边的长度。
SPJ 里却是:
for(int i=1,a;i<=N;i++){
a=inf.readInt();
++La[a];
}
他直接就读了个整数!
map
把所有整数出现的次数记了一下,然后和输出中的实数个数上取整比对?dis=sqrt(dis);
if(dis-floor(dis)>1e3)
quitf(_wa, "Wrong Answer %lf",dis);
int o=floor(dis+0.5);
if(La[o]==0)
quitf(_wa, "Wrong Answer %d",o);
--La[o];
checker
里直接就按两两之间的顺序求了长度,这样可能不是凸包边的长度啊!ANS[N+1][0]=ANS[1][0];
ANS[N+1][1]=ANS[1][1];
for(int i=1;i<=N;i++){
double dis=(ANS[i][0]-ANS[i+1][0])*(ANS[i][0]-ANS[i+1][0])
+(ANS[i][1]-ANS[i+1][1])*(ANS[i][1]-ANS[i+1][1]);
调了一晚上,一直 WA,看了 SPJ 才发现这个样子,气死了!
我改了一下 SPJ, 加入了以下内容:
map
计数的比较方式改成排序后对应比较改成了排序后依次比较。因为实数精度问题 map
会出事。我写的 SPJ 放在 这里, 第一次写 SPJ, 如果有问题请指出。
希望尽快修正 SPJ。