4个ac,大佬能不能帮忙改进一下代码
查看原帖
4个ac,大佬能不能帮忙改进一下代码
621480
wzrun楼主2021/12/19 12:19
//思路是想着先加入一对数据,然后判断他们的关系,相离相交相融。但是在对数增多的时候,我只考虑了新增数据和已有数据的判断关系,而判断他们的关系并且执行后,还缺少关于已有数据对之间的关系是相交相容或是相离,就是这个我不懂写
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{

	int l,m,a[105]={0},b[105]={0};
	
	scanf("%d %d",&l,&m);
	
	int i,j,c=0,d=0,e=0,f=0,g=0,h=0;
	int num=1;
	
	scanf("%d %d",&a[c],&b[d]);//a是左边b是右边,先读入左边右边的第一个数字 
	for(i=1;i<m;i++){//读入次数 
		scanf("%d %d",&e,&f);
		for(c=0,d=0,g=1;g<=num;g++,c++,d++){//读入一次,判断一次 
		
			if(e>=a[c]&&e<=b[d]&&f>b[d]){
				b[d]=f;//情况一新增的与已有数据在左边相交
				break; 
			}
			if(f>=a[c]&&f<=b[d]&&e<a[c]){
				a[c]=e;//情况二新增的与已有数据在右边相交 
				break;
			}
			if(e<a[c]&&f>b[d]){
				a[c]=e;//情况三新增的比已有的范围大
				b[d]=f;
				break;
			}
			if(e>a[c]&&f<b[d]){
				//情况四 新增的比已有的范围小
				break;
			}
			if(f<a[c]){
				a[num]=e;
				b[num]=f;//情况五在左边相离
				 num++;
				 break;
			}
			if(e>b[d]){
				a[num]=e;
				b[num]=f;//情况六 在右边相离
				num++;
				break;
			}
			
		}
	}
	c=num-1,d=num-1;
	int sum=0;
	for(i=0;i<num;i++){
		sum+=(b[d]-a[c]+1);
		d--;
		c--;
	}
	printf("%d",l-sum+1); 
	
	
	
	
			
}

2021/12/19 12:19
加载中...