onlinejudge 上面的题目有问题。。1045.分段线性插值
#include<iostream>#define MAXSIZE 200000
#define START -1000000000
#define END 1000000000
using namespace std;
struct
{
int x;
int y;
}a[MAXSIZE];
double output[MAXSIZE];
int acount=0;
int ocount=0;
int sort(int x,int y)
{
int j=acount-1;
if(acount==0)
{
a[acount].x=x;
a[acount].y=y;
}
else for(int i=0;i<acount;i++)
{
if(x>a[acount-1].x)
{
a[acount].x=x;
a[acount].y=y;
}
else while (x<a[j].x&&j>=0)
{
a[j+1].x=a[j].x;
a[j+1].y=a[j].y;
j--;
}
if(x==a[j].x) return 0;
a[j+1].x=x;
a[j+1].y=y;
}
return 1;
}
void camulate(int x)
{
int x1,x2,y1,y2;
x1=START;
x2=END;
y1=y2=0;
for(int i=0;i<acount;i++)
{
if(x<a[0].x)
{
x1=START;
y1=0;
x2=a[0].x;
y2=a[0].y;
break;
}
else if(x<a[i].x)
{
x1=a[i-1].x;
y1=a[i-1].y;
x2=a[i].x;
y2=a[i].y;
break;
}
else
{
x1=a[i].x;
y1=a[i].y;
x2=END;
y2=0;
}
}
double h=x1-x2;
output[ocount]=y1*(x-x2)/h-y2*(x-x1)/h;
}
int main()
{
int n,x,y;
char ch;
cin>>n;
if(n<=0||n>MAXSIZE) return -1;
ch=getchar();
ch=getchar();
while((acount+ocount)<n)
{
if(ch=='A')
{
scanf("%d%d",&x,&y);
if(x<=START||x>=END||y<=START||y>=END) return -1;
if (! sort(x,y)) return -1;
acount++;
}
else if(ch=='Q')
{
scanf("%d",&x);
if(x<=START||x>=END) return -1;
camulate(x);
ocount++;
}
ch=getchar();
}
for(int i=0;i<ocount;i++)
printf("%0.6lf\n",output[i]);
return 0;
}
这个是我的完整代码,这个是题目http://acm.xmu.
我不明白为什么结果是re。test2出错。
我看了一下accepted的 程序,基本上 内存都用到3000K左右,而我的基本上就是不到100K ,现在也想不通为什么也用到那么大的内存,求懂得的大牛稍微指点一下我的疏漏之处。非常感谢!!