9 条题解

  • 0
    @ 2025-10-16 20:36:19

    C的写法,使用了qsort进行排序,也因此需要写出相应的比较函数


    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Activity{
        int start;
        int end;
    } Activity;
    
    Activity activity[10000];
    
    
    int n;
    int ans;
    
    void init() {
        int s,e;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            scanf("%d %d", &s, &e);
            activity[i].start = s;
            activity[i].end = e;
        }
    }
    
    int cmp(const void *a, const void *b) {
        Activity *x = (Activity *)a;
        Activity *y = (Activity *)b;
        if (x->end == y->end) {
            return x->start - y->start;
        } else {
            return x->end - y->end;
        }
    }
    
    void solve() {
        qsort(activity, n, sizeof(Activity), cmp);
    
        ans = 1;
        int last = activity[0].end;
    
        for (int i = 1; i < n; i++) {
            if (activity[i].start >= last + 1) {
                ans++;
                last = activity[i].end;
            }
        }
        printf("%d\n", ans);
    }
    
    
    int main() {
        int m;
        scanf("%d", &m);
    
        for (int i = 0; i < m; i++) {
            init();
            solve();
        }
    
        return 0;
    }
    

    以下为qsort函数原型

    void qsort(
        void *base,        // 待排序数组的首地址(任意类型指针)
        size_t nmemb,      // 数组中元素的个数
        size_t size,       // 每个元素的大小(单位:字节)
        int (*compar)(const void *, const void *)  // 比较函数指针
    );
    

    信息

    ID
    124
    时间
    3000ms
    内存
    128MiB
    难度
    8
    标签
    (无)
    递交数
    1724
    已通过
    224
    上传者