求助大佬,我觉得我思路应该没问题,但是就是错了QAQ
查看原帖
求助大佬,我觉得我思路应该没问题,但是就是错了QAQ
80546
逍遥瑾柒楼主2020/12/19 18:25
#include<iostream>
 using namespace std;
  int main()
  {
  	int l,m,u,t1,t2,s,k=0,h=0;cin>>l>>m;
  	int q[105],z[105],a[100],b[100];
  	for(int i=0;i<m;i++)
  	 cin>>q[i]>>z[i];//读入
  	s=q[0];//初始连续段的开头
  	for(int i=0;i<m;i++)
  	 for(int j=i+1;j<m;j++)
  	  {
  	  	if(q[i]>q[j])
  	  	 {
  	  	  t1=q[j]; q[j]=q[i]; q[i]=t1;
		 }
		if(z[i]>z[j])
  	  	  {
  	  	  t2=z[j]; z[j]=z[i]; z[i]=t2;
	      }
		}//由小到大排序,为了好进行连续砍树
    for(int i=0;i<m;i++)
      {
        if(z[i]>=q[i+1])
          u=z[i+1]-s;
        else
        {
         a[k]=u; s=q[i+1]; b[k]=q[i+1]-z[i]; k++;
		}
	  }//进行计算,无法连续就更新开头,开始下一段,并把中间的空保留
	for(int i=0;i<k;i++)
	 h=h+b[k];//计算每一个连续段中间剩余的树
	for(int i=0;i<k;i++)
	 u=u+a[i];//把所有连续段加起来
	cout<<l+h-u<<;//输出剩余的树
	return 0;
  }
2020/12/19 18:25
加载中...