招聘 | 时间限制:1 秒 | 内存限制:262144K | 语言限制:不限
某公司组织一场公开招聘活动,假设由于人数和场地的限制,每人每次面试的时长不等,并
已经安排给定,用(S1,E1)、(S2,E2)、(Sj,Ej)...(Si < Ei,均为非负整数)表示每场面试的开始和结
束时间。面试采用一对一的方式,即一名面试官同时只能面试一名应试者,一名面试官完成
一次面试后可以立即进行下一场面试,且每个面试官的面试人次不超过 m。
为了支撑招聘活动高效顺利进行,请你计算至少需要多少名面试官。
输入描述:
输入的第一行为面试官的最多面试人次 m,第二行为当天总的面试场次 n,接下来的 n 行为
每场面试的起始时间和结束时间,起始时间和结束时间用空格分隔。
其中,1 <= n, m <= 500
输出描述:
输出一个整数,表示至少需要的面试官数量。
示例 1
输入
2
5
1 2
2 3
3 4
4 5
5 6
输出
3
说明
总共有 5 场面试,且面试时间都不重叠,但每个面试官最多只能面试 2 人次,所以需要 3 名
面试官。
示例 2
输入
3
3
1 2
2 3
3 4
输出
1
说明
总共有 3 场面试,面试时间都不重叠,每个面试官最多能面试 3 人次,所以只需要 1 名面试
官。
示例 3输入
3
3
8 35
5 10
1 3
输出
2
说明
总共有 3 场面试,[5,10]和[8,35]有重叠,所以至少需要 2 名面试官。
示例4(本人所加的例子)
输入
4
4
1 2
2 4
3 4
2 3
输出
2
说明
4场面试,一个面试官面两场,至少需一名面试官,【3,4】和【2,4】重叠,【2,3】也和【2,4】重叠但是【2,3】和【3,4】不重叠,所以需两名面试官。
代码如下:
********************************************代码分界线**********************************************
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include <stdio.h>
#include<math.h>
void main()
{
int m,n,time[500][2];
scanf("%d", &m);
scanf("%d", &n);
int i,j;
for (i = 0; i < n; i++)
for (j = 0; j < 2; j++)
{
scanf("%d", &time[i][j]);
}
int max1 = n / m;
if (n % m != 0)
max1++;
int judge[100][10];
int judge2[10],k,max2=0;
for(i=0;i<100;i++)
for (j = 0; j < 10; j++)
{
judge[i][j] = -1;
judge2[j] = 0;
}
for (i = 0; i < n; i++)
{
j = 0;
k = 0;
while (judge[j][k] != -1)
{
if ((time[i][0] < time[judge[j][k]][0] && time[i][1] <= time[judge[j][k]][0]) || (time[i][0] >= time[judge[j][k]][1] && time[i][1] > time[judge[j][k]][1]))
k++;
else
{
j++;
k = 0;
}
if (k == m)
{
k = 0;
j++;
}
}
judge[j][k] = i;
judge2[j]++;
}
for (i = 0; judge2[i]!=0; i++)
{
}
max2 = i;
printf("%d", max1 > max2 ? max1 : max2);
}
********************************************代码分界线**********************************************
其中judge是存放面试官对应的面试编号,一维是面试官编号,二位是面试编号(即judge[i][j])
judge2是指对应的面试官目前接手的面试数量。(如judge2[0]=3,指的就是0号面试官目前已经接手3个面试)