| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
莫名其妙的错,谁能找出来?我不喜欢贴代码,但这个错误太经典了,经典得我虽然知道哪错,却不知道为什么,哪位大牛能告诉我?
#include<iostream>
#include<algorithm>
#include<cmath>
#define abs(a) ((a)>0?(a):(-a))
using namespace std;
typedef struct point{
int x,y;
}point;
point p[10010];
int N,x[10010],y[10010];
int exsit(int x1,int y1)
{
int i;
for (i=0;i<N;i++) if (p[i].x==x1&&p[i].y==y1) break;
if (i<N) return 1;
return 0;
}
__int64 dis(int x1,int y1)
{
int i,j;
__int64 ans=0;
for (i=0;i<N;i++)
{
ans+=(__int64)abs(x[i]-x1);
ans+=(__int64)abs(y[i]-y1);
}
return ans;
}
main ()
{
int i,j,spot;
__int64 barn=0;
scanf ("%d",&N);
for (i=0;i<N;i++)
{
scanf ("%d %d",&x[i],&y[i]);
p[i].x=x[i];
p[i].y=y[i];
}
sort(x,x+N);
sort(y,y+N);
for (i=(N-1)/2;i>=0;i--)
{
barn+=(__int64)(x[N-1-i]-x[i]);
barn+=(__int64)(y[N-1-i]-y[i]);
}
if (N&1)
{
if (exsit(x[N/2],y[N/2])==0) printf("%I64d 1\n",barn);
else
{
barn=1<<30;
__int64 temp=dis(x[N/2]-1,y[N/2]);
if (temp<barn) {barn=temp;spot=1;}
else if (temp==barn) spot++;
temp=dis(x[N/2]+1,y[N/2]);
if (temp<barn) {barn=temp;spot=1;}
else if (temp==barn) spot++;
temp=dis(x[N/2],y[N/2]-1);
if (temp<barn) {barn=temp;spot=1;}
else if (temp==barn) spot++;
temp=dis(x[N/2],y[N/2]+1);
if (temp<barn) {barn=temp;spot=1;}
else if (temp==barn) spot++;
printf ("%I64d %d\n",barn,spot);
}
}
else
{
spot=(x[N/2]-x[N/2-1]+1)*(y[N/2]-y[N/2-1]+1);
if (exsit(x[N/2-1],y[N/2-1])) spot--;
if (exsit(x[N/2-1],y[N/2])) spot--;
if (exsit(x[N/2],y[N/2-1])) spot--;
if (exsit(x[N/2],y[N/2])) spot--;
printf("%I64d %d\n",barn,spot);
}
system("pause");
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator