(File IO): input:meet.in output:meet.out
时间限制: 1000 ms 空间限制: 128000 KB 具体限制
题目描述
我们要在足够多的会场里举行各种活动,一个会场在同一时刻只能安排一个活动,希望使用尽可能少的会场总数。假设一个活动结束后,立即可以在这个会场中进行下一个活动,即如果活动i使用了第
3
3
3个会场,结束时间是
f
i
fi
fi,那么如果另有一个活动j的开始时间是
s
j
,
s
j
=
f
i
sj,sj=fi
sj,sj=fi,那么你可以将活动j也放在这个
3
3
3号会场进行。
输入
第一行是活动数
n
(
1
≤
n
≤
100
)
n(1≤n≤100)
n(1≤n≤100)。
以后的n行,每行两个整数,分别表示
n
n
n个活动的开始时间
s
i
si
si和结束时间
f
i
(
1
≤
i
≤
n
)
,
s
i
<
f
i
fi(1≤i≤n),si<fi
fi(1≤i≤n),si<fi。它们都不超过
2000000000
2000000000
2000000000。
输出
一个整数,表示需要的最少会场数。
样例输入
4
1 8
2 5
7 15
5 9
样例输出
3
数据范围限制
(
1
≤
n
≤
100
)
(1≤n≤100)
(1≤n≤100)。
解题思路
枚举,
a
a
a记录开始时间,
b
b
b记录结束时间,如果
a
[
i
]
>
b
[
j
]
a[i]>b[j]
a[i]>b[j]且两场活动的相距时间是最小的就把两个活动相连,
a
[
i
]
a[i]
a[i]与
b
[
i
]
b[i]
b[i]均赋一个较大的值
代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[110],b[110],minn,k,t,ans;
int main()
{
freopen("meet.in","r",stdin);
freopen("meet.out","w",stdout);
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%lld%lld",&a[i],&b[i]);
for(int i=1; i<=n; i++)
{
k=0,minn=2000001000;
for(int j=1; j<=n; j++)
{
if(a[i]>=b[j]&&i!=j&&a[i]-b[j]<minn)
{
minn=a[i]-b[j];
t=j;
k=true;
}
}
if(k==true)
{
ans++;
b[t]=b[i];
a[i]=2000001000;
b[i]=2000001000;
}
}
printf("%d",n-ans);
}