错误信息:
Received signal 11: Segmentation fault with invalid memory reference.
Code:
#include<bits/stdc++.h>
const int MAXN=200000,MAXM=100000;
struct Triangle{
long x,y;
int m;
}triangles[MAXN];
int n;
long event[MAXN+1];
double area,triangleArea[MAXM+1];
void readInput(){
FILE*in=fopen("tr.in","rt");
fscanf(in,"%d",&n);
for(int i=0;i<n;i++)
fscanf(in,"%ld %ld %d",&triangles[i].x,&triangles[i].y,&triangles[i].m);
fclose(in);
}
void sortTriangles(){
for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)
if(triangles[i].y>triangles[j].y){
Triangle temp=triangles[i];
triangles[i]=triangles[j];
triangles[j]=temp;
}
}
void getEvents(){
for(int i=0;i<n;i++)event[i]=triangles[i].x;
event[n]=100000000;
for(int i=0;i<=n;i++)for(int j=i+1;j<=n;j++)
if(event[i]>event[j]){
long temp=event[i];
event[i]=event[j];
event[j]=temp;
}
}
double trapecesArea(long x1,long x2,long x3){
if(x3<=x2)return(triangleArea[x3-x1]);
return(triangleArea[x3-x1]-triangleArea[x3-x2]);
}
void calcUnionArea(){
area=0;
for(int i=1;i<=n;i++)if(event[i]>event[i-1]){
long prevX=event[i-1],prevY=0;
for(int j=0;j<n;j++)if(triangles[j].x<=event[i-1]&&
triangles[j].x+triangles[j].m>event[i-1]){
if(prevX>event[i-1]){
prevX-=triangles[j].y-prevY;
prevY=triangles[j].y;
}
if(triangles[j].x+triangles[j].m>prevX){
area+=trapecesArea(event[i-1],event[i],
triangles[j].x+triangles[j].m);
if(prevX>event[i-1])
area-=trapecesArea(event[i-1],event[i],prevX);
prevX=triangles[j].x+triangles[j].m;
prevY=triangles[j].y;
}
}
}
}
void writeOutput(){
FILE*out=fopen("tr.out","wt");
long result2=floor(area*2+0.50);
if(result2%2==0)fprintf(out,"%ld\n",result2/2);
else fprintf(out,"%ld.5\n",result2/2);
fclose(out);
}
void calcTriangleArea(){
for(long i=0;i<=MAXM;i++)triangleArea[i]=double(i*i)/2;
}
int main(){
readInput();
sortTriangles();
getEvents();
calcTriangleArea();
calcUnionArea();
writeOutput();
}