1 条题解

  • 0
    @ 2026-9-29 22:10:24

    如果只有一台摄像机的话只需要将节目按左端点从大到小排序,如果当前的节目的右端点大于上之前已经左端点,那就不取,否则就取它。但这里有两台摄像机,所以把存两个端点,第一台和第二台的,每次都先把能给第二台摄像机的节目都给第二台,不能给再试着给第一台,当第一台的左端点大于第二台是互换一下就OK了。

    Code:

    #include<cstdio>
    #include<algorithm>
    #define maxn 155
    using namespace std;
    int N,ans;
    struct ZS{
    	int s,t;
    	bool operator <(const ZS b)const{return t<b.t;}
    }a[maxn];
    inline int read(){
    	int ret=0;char ch=getchar();
    	while (ch<'0'||ch>'9') ch=getchar();
    	while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
    	return ret;
    }
    int main(){
        N=read();
        for(int i=1;i<=N;i++) a[i].s=read(),a[i].t=read();
        sort(a+1,a+1+N);
        int lst1=0,lst2=0;
        for (int i=1;i<=N;i++)
          if (a[i].s<lst1) continue;else
    	  if (a[i].s<lst2) lst1=lst2,lst2=a[i].t,ans++;else lst2=a[i].t,ans++;
        printf("%d\n",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    2617
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    12
    已通过
    7
    上传者