您的位置:首页 > 产品设计 > UI/UE

CodeForces 589F -- F. Gourmet and Banquet (二分 + 贪心)

2016-08-11 00:18 399 查看

F. Gourmet and Banquet

time limit per test

2 seconds

memory limit per test

512 megabytes

input

standard input

output

standard output

 A gourmet came into the banquet hall, where the cooks suggested n dishes for guests. The gourmet knows the schedule: when each of the dishes will be served.

 For i-th of the dishes he knows two integer moments in time ai and bi (in seconds from the beginning of the banquet) — when the cooks will bring the i-th dish into the hall and when they will carry it out (ai < bi). For example, if ai = 10 and bi = 11, then the i-th dish is available for eating during one second.

 The dishes come in very large quantities, so it is guaranteed that as long as the dish is available for eating (i. e. while it is in the hall) it cannot run out.

 The gourmet wants to try each of the n dishes and not to offend any of the cooks. Because of that the gourmet wants to eat each of the dishes for the same amount of time. During eating the gourmet can instantly switch between the dishes. Switching between dishes is allowed for him only at integer moments in time. The gourmet can eat no more than one dish simultaneously. It is allowed to return to a dish after eating any other dishes.

 The gourmet wants to eat as long as possible on the banquet without violating any conditions described above. Can you help him and find out the maximum total time he can eat the dishes on the banquet?

Input

 The first line of input contains an integer n (1 ≤ n ≤ 100) — the number of dishes on the banquet.

 The following n lines contain information about availability of the dishes. The i-th line contains two integers ai and bi (0 ≤ ai < bi ≤ 10000) — the moments in time when the i-th dish becomes available for eating and when the i-th dish is taken away from the hall.

Output

 Output should contain the only integer — the maximum total time the gourmet can eat the dishes on the banquet.

 The gourmet can instantly switch between the dishes but only at integer moments in time. It is allowed to return to a dish after eating any other dishes. Also in every moment in time he can eat no more than one dish.

Examples

Input

3
2 4
1 5
6 9


Output

6


Input

3
1 2
1 2
1 2


Output

0


Note

 In the first example the gourmet eats the second dish for one second (from the moment in time 1 to the moment in time 2), then he eats the first dish for two seconds (from 2 to 4), then he returns to the second dish for one second (from 4 to 5). After that he eats the third dish for two seconds (from 6 to 8).

 In the second example the gourmet cannot eat each dish for at least one second because there are three dishes but they are available for only one second (from 1 to 2).

大体题意:

你要品尝美食,告诉你n个美食的上菜的时间和下菜的时间,你要品尝的每一道菜的时间要相同,要求求出这个时间最大值!

思路:

直接按照结束时间由小到大排序,结束时间相同按照菜的长度又小到大排序。

在二分搜索答案!

没找到一个合适的就更新答案,然后再向上搜索,否则乡下搜索!

详细见代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10000 + 10;
struct Node{
int s,e;
bool operator < (const Node & rhs) const {
return e < rhs.e || (e == rhs.e && s > rhs.s);
}
}p[107];
int n;
int vis[maxn];
bool judge(int m){
memset(vis,0,sizeof vis);
for (int i = 0; i < n; ++i){
int sum = 0;
for (int j = p[i].s; j < p[i].e; ++j){
if (vis[j])continue;
++sum;
vis[j] = 1;
if (sum == m)break;
}
if (sum != m)return false;
}
return true;
}
int main(){

scanf("%d",&n);
for (int i = 0; i < n; ++i){
int s,e;
scanf("%d %d",&s,&e);
p[i].s = s;
p[i].e = e;
}
sort(p,p+n);
int l = 0,r = 10000;
int ans = 0;
while(l <= r){
int mid = l+r >> 1;
if (judge(mid)){
ans = max(ans,mid);
l = mid+1;
}
else r = mid-1;
}
printf("%d\n",ans * n);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: