链接:https://vjudge.net/contest/161547#problem/G
题意:有一个可以从0用到10的房间,给出一系列需要用房间的时间段,求用到房间的最大次数
思路:每一个时刻都只能有一个会议在用,那么每个时刻用的时间必定是最短的那个,如果下一个会议用完时间比上一个的要短,那么必定选截止时间短的,如果下一个的起始时间比上一个的截止时间要大,那么最大次数加一。
代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
struct node
{
int mini;
};
node meet[10];
int main()
{
int t;
cin >> t;
while(t--)
{
for(int i=0; i<10; i++)
meet[i].mini = 11;
int a,b;
while(cin >> a >> b && a!=0 || b != 0)
{
if(b < meet[a].mini)
meet[a].mini = b;
}
int ans = 1, k=0;
for(int i=0; i<10; i++)
{
if(meet[i].mini != 11 && k == 0)
{
k = meet[i].mini;
continue;
}
if(meet[i].mini != 11)
{
if(i < k && meet[i].mini < k)
{
k = meet[i].mini;
}
else if(i >= k)
{
ans++;
k = meet[i].mini;
}
}
}
cout << ans << endl;
}
return 0;
}