Bailian4100 进程检测【排序】

4100:进程检测
总时间限制: 1000ms 内存限制: 65536kB
描述
有n个任务进程p1,p2,…,pn,对于任务pi,开始时间是s[i],截止时间是d[i]。开始时间和截止时间均为非负整数,且不超过100。有一个监测程序Test来测试正在运行的任务进程。Test每次测试的时间很短,可以忽略不计。换句话说,如果Test在时刻t进行测试,那么对于满足s[i]<=t<=d[i]的所有进程pi同时完成测试。要求每个进程pi至少用test完成测试一次。通过合理的安排test程序测试的时间,既可以满足每个进程pi至少用test完成测试一次的要求,又使得test测试的次数最少。给定n个任务进程的起止时间,给出test测试的最少次数。
输入
第一行为k,表示有k组测试输入,k<100。
每组第一行为n,表示有n个进程,n<50。
接下来n行,每行是用空格隔开的两个非负整数,第i行的分别是第i个进程的起止时间s[i]和d[i], 1<=i<=n。s[i]和d[i]均可用int类型存下。
输出
对每组测试数据输出一行,每行一个数字是Test程序执行的最少次数。
样例输入
2
2
1 3
2 4
3
1 3
2 3
4 5
样例输出
1
2

问题链接Bailian4100 进程检测
问题简述:(略)
问题分析:简单的排序处理问题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian4100 进程检测 */

#include <bits/stdc++.h>

using namespace std;

const int N = 50;
struct Process {
    
    
    int start, end;
} p[N];

bool cmp(Process a, Process b)
{
    
    
    return a.end < b.end;
}

int main()
{
    
    
    int k, n;
    scanf("%d", &k);
    while(k--) {
    
    
        scanf("%d", &n);
        for(int i = 0; i < n; i++)
            scanf("%d%d", &p[i].start, &p[i].end);

        sort(p, p + n, cmp);

        int cnt = 0;
        for(int i = 0, j; i < n; ) {
    
    
            for(j = i; p[j].start <= p[i].end && j < n; j++);
            i = j;
            cnt++;
        }

        printf("%d\n", cnt);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/108539270