P7270全RE,求助大佬
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/22 16:23
  • 上次更新2023/10/27 18:54:05
查看原帖
P7270全RE,求助大佬
722704
封禁用户楼主2022/7/22 16:23

错误信息:

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();
}
2022/7/22 16:23
加载中...