codevs——1385 挤牛奶
2024-09-08 02:35:38
题目描述 Description
三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶,一直到1000时刻。第二个农民在700时刻开始,在 1200时刻结束。第三个农民在1500时刻开始2100时刻结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300时刻到1200时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200时刻到1500时刻)。
你的任务是编一个程序,读入一个有N个农民(1 <= N <= 5000)挤N头牛的工作时间列表,计算以下两点(均以秒为单位):
最长至少有一人在挤奶的时间段。 |
最长的无人挤奶的时间段。 |
输入描述 Input Description
Line 1: |
一个整数N。 |
Lines 2..N+1: |
每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。 |
输出描述 Output Description
一行,两个整数,即题目所要求的两个答案。
样例输入 Sample Input
3
300 1000
700 1200
1500 2100
样例输出 Sample Output
900 300
数据范围及提示 Data Size & Hint
本来想用个高大上的做法来做来
结果wa了一下午!!
枚举!!!
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define N 1000010 using namespace std; int n,s1=999999999,s2,ans1,ans2,sum1,sum2; int begin,end,a[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar();} while(ch<='9'&&ch>='0'){x=x*10+ch-'0'; ch=getchar();} return x*f; } int main() { n=read(); for(int i=1;i<=n;i++) { begin=read(),end=read(); for(int j=begin;j<end;j++) a[j]=1; s1=min(s1,begin); s2=max(s2,end); } for(int i=s1;i<=s2;i++) { if(a[i]==1) { ans2=max(ans2,sum2); sum2=0; sum1++; } else { ans1=max(ans1,sum1); sum1=0; sum2++; } } printf("%d %d",ans1,ans2); return 0; }
最新文章
- [转载]python property
- c#保留小数点后位数的方法
- Unity 3D学习之 Prime31 Game Center插件用法
- Sql server之路 (一)基础学习
- openpgp和gnupg
- select into from 和 insert into select 的用法和区别
- 改善用户体验之wordpress添加图片弹出层效果 (插件 FancyBox)
- Android 开发环境搭建9传送帖)
- PHP文件访问技术
- CF #401 (Div. 2) C.Alyona and Spreadsheet (思维)
- Java IO编程全解(四)——NIO编程
- 常用CTPN、CRNN文本检测识别框架
- 题目1442:A sequence of numbers(数列计算以及二分求幂运用)
- tracteroute路由追踪
- warning LNK4099: PDB 原因及解决方案
- .NET中的异常处理机制(一)
- 通过批处理命令for提取数据
- ABAP术语-Business Object Builder
- Uuuuuunity
- 12.Hamming Distance(汉明距离)