【算法】最长工作时间问题
来源:互联网 发布:怎样找网络推手 编辑:程序博客网 时间:2024/05/17 03:50
#include <stdio.h>#include <stdlib.h>struct worker { int startTime; int endTime; int mark;};int main(){ int n, n1 = 0, n2 = 0; int i, j; int LWT[50]={0}, LRT[50]={0}, maxLWT, maxLRT; struct worker wk[100], fw, lw, temp; // fw/lw -> first/last worker scanf("%d", &n); for( i = 0; i < n; i++) { scanf("%d%d", &wk[i].startTime, &wk[i].endTime); wk[i].mark = 0; } for ( i = 0; i < n; i++) { for ( j = i; j < n; j++) { if ( wk[i].startTime > wk[j].startTime) { temp = wk[i]; wk[i] = wk[j]; wk[j] = temp; } } } fw = wk[0]; lw = wk[0]; LWT[n1] = wk[0].endTime - wk[0].startTime; i = 1; while ( i < n ) { if ( wk[i].endTime < lw.endTime ) i++; else if ( wk[i].endTime > lw.endTime && wk[i].startTime <= lw.endTime ) { LWT[n1] += (wk[i].endTime - lw.endTime); lw = wk[i]; i++; } else if ( wk[i].startTime > lw.endTime ) { LRT[n2++] = wk[i].startTime - lw.endTime; LWT[++n1] = wk[i].endTime - wk[i].startTime; lw = wk[i]; i++; } } maxLWT = 0; for( i = 0; i <= n1; i++ ) { if ( LWT[i] > maxLWT ) maxLWT = LWT[i]; } maxLRT = 0; for( i = 0; i <= n2; i++ ) { if ( LRT[i] > maxLRT ) maxLRT = LRT[i]; } printf("%d %d", maxLWT, maxLRT); return 0;}
【问题描述】
三个工人从8点开始上班。第一个工人在300秒(从8点开始)开始干活,一直到1000秒。第二个工人在800秒开始,在1300秒结束。第三个工人在1500秒开始,在2100秒结束。期间最长的至少有一个工人在干活的连续时间LWT为1000秒(从300秒到1300秒),而最长的无人干活的连续时间LRT(从第一个工人开始一直到最后一个工人结束)为200秒(从1300秒到1500秒)。
你的任务是编一个程序,读入一个有N个工人(1 <= N <= 5000)干活的工作时间列表,计算以下两点(均以秒为单位):
最长至少有一人在工作的时间段LWT。
最长的无人工作的时间段LRT。(从有人工作开始算起)
【输入形式】
第1行:一个整数N。
第2至第N+1行:每行两个小于1000000的非负整数,表示一个工人的开始时刻与结束时刻。
【输出形式】
一行,两个整数,即题目所要求的两个答案LWT与LRT。
【样例输入】
3
300 1000
800 1300
1500 2100
【样例输出】
1000 200
============= 分析 ==============================
一般的做法就是先把每个人的起始时间排序,然后从第一个开始,如果有两个人的时间有重合的把计算LWT的时间拼上去,如果发现了断点,就要开始计算LRT时间,并且计算下一个LWT
最后,从LWT和LRT中寻找最大的
===================代码==================
0 0
- 【算法】最长工作时间问题
- 工作时间
- 工作时间
- [算法]最长子数组问题
- C/C++ 最长平台问题 算法
- 最长公共子序列算法问题
- 算法实现-->最长子序列问题
- 算法题10 最长等差序列问题
- 最长公共字串算法-构造回文问题
- 《算法导论》最长子序列问题
- 工作时间估算
- [算法论文]最长递增子序列问题的求解
- 经典算法题目——最长公共子序列问题
- 动态规划算法解最长公共子序列LCS问题
- 动态规划算法解最长公共子序列LCS问题
- 最长公共子序列问题的改进算法
- 算法回顾 - 动态规划 之 最长公共子串问题
- 算法学习笔记----最长公共子序列问题
- The Java Programming Language4th读书笔记-第四章 接口
- Debian下安装YouCompleteMe
- MFC字体
- 项目名称有红色感叹号,部署不起来
- 课程设计--学生信息管理系统
- 【算法】最长工作时间问题
- 图像滤镜艺术---流行艺术风滤镜特效PS实现
- APNS
- MFC自绘菜单
- python + Sqlite
- iOS 随笔
- MFC打印
- 【详解】Python脚本planM记录
- C#实现高精度定时器