8 solutions

  • 0
    @ 2021-10-17 15:14:23

    这题应该挺经典,这是本小白第二次看见他了(虽然还是错了QAQ)

    我们可以这么看,我们已知的是一段段间距,其分别对应一个开始坐标,和一个结束坐标,其分别在时间轴上占据了一个点,求这个时间轴上最多可容纳的间断数。

    成语“有始有终”,每个间断必定有一个终点。我们以终点为标准排序,此操作的目的是为求最多。

    然后接着我们要做的就是筛选了,以0为基点,用段起点来判断是否满足条件,逐一更新,满足条件的段的终点就是下个段可开始的基点

        #include<cstdio>
        #include<cstring>
        #include<cmath>
        #include<algorithm>
        using namespace std;
        struct node{
        	int e,b;
        }a[1003];
        int cmp(node x,node y)
        {
        	return x.e < y.e;
        }
        int main()
        {
        	int n,ans = 0;
        	scanf("%d",&n);
        	for(int i = 1;i <= n;i++)
        	{
        		scanf("%d%d",&a[i].b,&a[i].e);
        	}
        	sort(a + 1,a + n + 1,cmp); 
        	int t = 0;
        	for(int i = 1;i <= n;i++)
        	{
        		if(a[i].b >= t)
        		{
        			ans++;
        			t = a[i].e;
        		}
        	}
        	printf("%d",ans);
        	return 0;	
        }
    
    

    Information

    ID
    91
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    6
    Tags
    # Submissions
    198
    Accepted
    60
    Uploaded By