-
Time Limit: 1000 ms Memory Limit: 65535 kB Solved:41 Tried: 269
Description
君子爱财取之有道,beap天生具有商业头脑,他坚信:只要胆子大,钞票随风来。
额,在beap实现他宏伟的商业计划之前,他需要收集启动资金,于是他白天上课,晚上兼职搬运工。
beap在高达100层的帝国大厦工作(大厦居然没有电梯,我去T.T、)。
每天晚上,beap有m个物品需要搬运:xi yi,表示物品i需要从xi层搬运到yi层(xi<=yi)。并且每个物品都非常重,因此beap每次只能搬运一件物品上下楼,或者空手上下楼。当然,beap可以在搬运某个物品的途中停下来,将该物品放在他所处的楼层,然后去做其他事情。
工作开始时,beap在1层,现在他想知道他至少需要上多少层楼才能完成所有的工作(不计下楼的层数,根据能量守恒:上楼比下楼累多了)
Input
多组测试数据。
对于每组测试数据,第一行为整数m (0< m <= 50),
接下来的m行,每行有两个整数x,y(0 < x <= y <= 100),含义如上文所述。
Output
对于每组测试数据,首先输出当前为第几组测试数据,然后输出最少的上楼层数。更多具体格式见样例。
Sample Input
2
1 6
2 5
3
1 5
5 10
10 20
4
1 6
1 10
1 20
1 100
5
1 6
1 10
1 20
7 49
1 100
Sample Output
Case 1: 8
Case 2: 19
Case 3: 132
Case 4: 174
- include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<ctype.h>
- #include<vector>
- #include<algorithm>
- #include<cmath>
- #include<queue>
- #include<set>
- #include<string>
- #include<stack>
- using namespace std;
- struct my
- {
- int x,y;
- }
- go[111];
- int n;
- bool cmp(my a,my b)
- {
- if (a.x!=b.x)
- return a.x<b.x;
- return a.y<b.y;
- }
- int main()
- {
- int i,j,k;
- int num=0;
- while (cin>>n)
- {
- num++;
- int xx=0;
- int yy=0;
- int big=0;
- for (i=0;i<n;i++)
- {
- cin>>go[i].x>>go[i].y;
- xx+=go[i].x;
- yy+=go[i].y;
- big=max(big,go[i].y);
- }
- sort(go,go+n,cmp);
- int ans=big-1;
- j=go[0].y;
- for (i=1;i<n;i++)
- {
- if (j>go[i].x)
- {
- k=min(j,go[i].y);
- ans+=k-go[i].x;
- }
- j=max(j,go[i].y);
- }
- cout<<"Case "
- <<num<<": "
- <<ans<<endl;
- }
- return 0;
- }
先把 1--->最大层的上楼数加入到 ans