题目描述
某公司组织一场公开招聘活动,假设由于人数和场地的限制,每人每次面试的时长不等,并已经安排给定,用(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人次,所以只需要一名面试官
用例3
输入
3
3
8 35
5 10
1 3输出
2
说明
总共有3场面试,[5,10]和[8,35]有重叠,所以至少需要2名面试官
思路
安排面试官,存放不相交区间,如果size超过m或者区间相交则引入新的面试官。95%通过率
按照时间末尾升序,通过率95
按照末尾倒序,通过率100
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int m = 0; // 面试官的最多面试人次
int n = 0; // 总的面试场次
cin >> m >> n;
vector<pair<int, int>> v(n);
for (int i = 0; i < n; i++)
{
cin >> v[i].first >> v[i].second;
}
sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) {return a.second < b.second; });
vector<vector<int>>res;
for (int i = 0; i < v.size(); i++)
{
bool flag = false;
for (int j = 0; j < res.size(); j++)
{
if (res[j].size() < m)
{
if (res[j].back() <= v[i].first)
{
flag = true;
res[j].push_back(v[i].second);
}
}
}
if (!flag)
{
vector<int> temp;
temp.push_back(v[i].second);
res.push_back(temp);
}
}
std::cout << res.size() << std::endl;
return 0;
}
倒序100%
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int m = 0; // 面试官的最多面试人次
int n = 0; // 总的面试场次
cin >> m >> n;
vector<pair<int, int>> v(n);
for (int i = 0; i < n; i++)
{
cin >> v[i].first >> v[i].second;
}
sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) {return a.second > b.second; });
vector<vector<int>>res;
for (size_t i = 0; i < v.size(); i++)
{
bool flag = false;
for (size_t j = 0; j < res.size(); j++)
{
if (res[j].size() < (size_t)m)
{
if (res[j].back() >= v[i].second)
{
flag = true;
res[j].push_back(v[i].first);
break; //一定不能忘记
}
}
}
if (!flag)
{
vector<int> temp;
temp.push_back(v[i].first);
res.push_back(temp);
}
}
std::cout << res.size() << std::endl;
return 0;
}