- 浏览: 39106 次
- 性别:
- 来自: 北京
最新评论
-
andyshar:
请问如何在现有的hadoop环境中安装?
Hadoop集群监控系统Ambari安装 -
qingtangpaomian:
失败123 写道您好楼主: 我装好之后为啥老是最后一 ...
Hadoop集群监控系统Ambari安装 -
失败123:
您好楼主: 我装好之后为啥老是最后一步Cluster ...
Hadoop集群监控系统Ambari安装
转载请注明出处
摘要:模拟 ,先排序 ,区间相交
一. 题目翻译
1. 描述:
三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。
你的任务是编一个程序,读入一个有N个农民(1 <= N <= 5000)挤N头牛的工作时间列表,计算以下两点(均以秒为单位):
a. 最长至少有一人在挤奶的时间段。
b. 最长的无人挤奶的时间段。(从有人挤奶开始算起)
2. 格式:
PROGRAM NAME:milk2
INPUT FORMAT:
(file milk2.in)
Line 1:
一个整数N。
Lines 2..N+1
每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。
OUTPUT FORMAT:
(file milk2.out)
一行,两个整数,即题目所要求的两个答案。
SAMPLE INPUT:
SAMPLE OUTPUT:
二. 题解
1. 题意理解(将问题分析清楚,大致用什么思路):
这道题目可以直接模拟,但是在大数据量得情况下复杂度会比较高。
一种思路是,我们用一个数组记录所有奶农们开始挤奶的时间与结束挤奶的时间(注意开始时间与结束时间需要用一个标志位标记),然后对这个数组排序。后面的思路就类似于括号匹配了,在一段时间内有奶农挤奶就是说在这个时间段上至少有一对匹配的开始时间与结束时间。
2. 具体实现(具体实现过程中出现的问题):
具体实现是我们用如下变量记录一个时间段的相关特性:1. index该时间段起始位置。2.left记录挤奶开始时间的个数(类似于括号匹配中的左括号)。3.right记录挤奶结束时间的个数(类似于右括号)。
如果当前时间段left=right,则表示当前时间段有left个奶农正在挤奶。我们计算出当前时间段的维持时间与maxDuarance比较,记录当前时间段与上一个时间段之间的间隔与maxInterval比较。
上述操作做完后,开始计算下一个时间段(更新index,left,right变量)。
3. 启示:
这道题与有道的笔试题是类似的,可以一起记忆,积累这种求区间相交题目的思路。
三. 代码
package session_1_2_1; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; //特别注意有相同的开始、结束的点的问题。 //关注一下其他的算法 public class milk2 { public static void main(String[] args) { try { Scanner in = new Scanner(new BufferedReader(new FileReader("F:\\UCASO\\temp\\milk2.in"))); PrintWriter pw = new PrintWriter(new FileWriter("F:\\UCASO\\temp\\milk2.out")); int num = in.nextInt(); Block[] blocks = new Block[2*num]; for (int i=0;i<num;i++){ blocks[2*i] = new Block(in.nextInt(),0); blocks[2*i+1] = new Block(in.nextInt(),1); } Arrays.sort(blocks,new Compare()); int index = 0; int maxDuarance = 0; int maxInterval = 0; int left = 0; int right = 0; for (int i=0;i<blocks.length;i++){ if (blocks[i].type == 0){ left ++; } else { right ++; } if (left == right){ maxDuarance = blocks[i].point-blocks[index].point>maxDuarance?blocks[i].point-blocks[index].point:maxDuarance; if (index == 0){ maxInterval = 0; } else { maxInterval = blocks[index].point-blocks[index-1].point>maxInterval?blocks[index].point-blocks[index-1].point:maxInterval; } index = i+1; left = 0; right = 0; } } System.out.println(maxDuarance+" "+maxInterval); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Compare implements Comparator<Block>{ @Override public int compare(Block o1, Block o2) { if (o1.point > o2.point){ return 1; } else if (o1.point < o2.point){ return -1; } else { if (o1.type == o2.type){ return 0; } else if (o1.type < o2.type){ return -1; } else { return 1; } } } } class Block { int point; int type ; Block (int point , int type ){ this.point = point; this.type =type ; } }
发表评论
-
USACO - 3.2.2 - Stringsobits
2012-08-23 16:02 837原创文章转载请注明 ... -
USACO - 3.2.1 - Factorials
2012-08-23 16:01 730原创文章转载请注明出处 摘要:动态规划 ... -
USACO - 3.1.6 - Stamps
2012-08-23 16:01 1084原创文章转载请注明 ... -
USACO - 3.1.5 - Contact
2012-08-23 16:01 952原创文章转载请注明出处 摘要:二叉树的应用 , ... -
USACO - 3.1.3 - Humble Numbers
2012-08-23 16:00 748原创文章转载请注明 ... -
USACO - 3.1.2 - Score Inflation
2012-08-22 10:05 946原创文章转载请注明出处 摘要:动态规划 ... -
USACO - 3.1.1 - Agri-Net
2012-08-22 10:04 899原创文章转载请注明出处 摘要:Prim算法 , ... -
USACO - 2.4.5 - Fractions to Decimals
2012-08-22 10:04 990原创文章转载请注明出处 摘要:模拟 , 数论 ... -
USACO - 2.4.4 - Bessie Come Home
2012-08-22 10:04 984原创文章转载请注明出处 摘要:Dijkstra ... -
USACO - 2.4.2 - Overfencing
2012-08-22 10:03 1036原创文章转载请注明 ... -
USACO - 2.4.1 - The Tamworth Two
2012-08-21 10:37 754原创文章转载请注明出处 摘要:模拟 ... -
USACO - 2.3.5 - Controlling Companies
2012-08-21 10:37 1344原创文章转载请注明出处 摘要:BFS , 模拟 ... -
USACO - 2.3.4 - Money Systems
2012-08-21 10:37 894原创文章转载请注明 ... -
USACO - 2.3.3 - Zero Sum
2012-08-21 10:36 767原创文章转载请注明出处 摘要:dfs , 枚举 ... -
USACO - 2.3.2 - Cow Pedigrees
2012-08-21 10:36 1032原创文章转载请注明 ... -
USACO - 2.3.1 - Longest Prefix
2012-08-20 20:31 1066原创文章转载请注明 ... -
USACO - 2.2.4 - Party Lamps
2012-08-20 20:30 1246原创文章转载请注明出处 摘要:枚举,三星 ... -
USACO - 2.2.3 - Runaround Numbers
2012-08-20 20:30 686原创文章转载请注明 ... -
USACO - 2.2.2 - Subset Sums
2012-08-20 20:30 732原创文章转载请注明出处 摘要:动态规划 ,0- ... -
USACO - 2.2.1 - Preface Numbering
2012-08-20 20:29 917原创文章转载请注明出处 摘要:模拟 , 数学分析 ...
相关推荐
### USACO 题目解析:Milking Cows #### 题目背景与要求 本题目来源于美国计算机奥林匹克竞赛(USACO),题目名为“Milking Cows”。题目描述了一个有趣的场景:三位农民每天早上给三头牛挤奶,并给出了各自的挤奶...
【标题】USACO-Bessie-Come-Home.zip_Home Home 【正文】 这个压缩包文件中的内容是关于USACO(美国计算机奥林匹克)竞赛中一个名为"Bessie Come Home"的问题的C++解决方案。USACO是一个针对高中生的在线编程竞赛...
【标题】USACO-beads.rar_usaco bea 【正文】 USACO(美国计算机奥林匹克竞赛)是一项针对中学生举办的编程比赛,旨在培养和选拔未来的计算机科学家。在这个特定的题目"beads"中,我们需要解决的问题是找到最长的...
《USACO魔法方阵:C++编程解析》 USACO(美国计算机奥林匹克)是一项旨在培养高中生计算机科学技能的竞赛。在这个问题中,我们关注的是“Magic Squares”,这是一个经典的数学概念,与C++编程相结合,构成了一个...
"USACO-Chapter2.rar_beginners" 是针对USACO第二章内容的压缩包,特别适合编程新手入门。 在USACO的第二章,主要涉及基础的算法和数据结构,这对于构建扎实的编程基础至关重要。让我们逐一解析这个压缩包中的四个...
【标题】"usaco-1.rar_barn1" 涉及的是USACO(美国计算机奥林匹克)竞赛中的一道编程题目,名为“Barn1”。USACO是一个旨在提升中学生计算机科学技能的比赛,主要关注算法和编程。在本题中,参赛者需要解决与农业或...
《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...
USACO(USA Computing Olympiad)是一项面向美国高中生的在线编程竞赛,旨在培养参赛者的算法设计和编程技能。在"Greedy Gift Givers"这个题目中,我们面对的是一个贪心算法的应用问题。贪心算法是一种解决问题的...
资源包包括USACO 2001-2007年月赛的测试数据;usaco月赛十年题典(2000-2009),usaco月赛2002-2008题解。单独下载需资源分30分以上。为了方便编程爱好者,我这边统一下载打包。欢迎下载。
这个名为"USACO-Training-Website:我的USACO培训网站解决方案"的压缩包文件,显然包含了作者对USACO训练网站上部分或所有章节的练习题目的解答。这些解答可能以源代码的形式存在,每个文件顶部可能带有详细的USACO...
这个"USACO-Practice"压缩包文件显然是为了帮助参赛者或者对算法有兴趣的学生准备的实践资源。以下我们将深入探讨USACO竞赛的相关知识点以及可能在压缩包中包含的编程内容。 1. **基础算法**:USACO竞赛通常会涉及...
在这个“USACO-Training-Pages”压缩包中,我们可以期待找到与USACO竞赛相关的各种资料,尤其是针对Java语言的学习材料。Java作为一种广泛应用于计算机科学领域的面向对象的编程语言,因其强大的跨平台能力和简洁的...
本压缩包“Notes-USACO-2021-Spring”中的笔记主要聚焦于2021年春季训练营和比赛的知识点,对于想要深入学习算法和提升编程能力的爱好者来说,具有极高的学习价值。 笔记内容可能包括但不限于以下几个方面: 1. **...
"C-Usaco-Work"指的是一个针对Usaco(美国计算机奥林匹克)教程的项目,这个项目专门用于帮助参赛者学习如何在C语言环境下进行竞赛编程。Usaco是一项面向高中生的国际性计算机科学竞赛,旨在提高参赛者的算法设计、...
【USACO-Cpp】是针对USACO(美国计算机奥林匹克竞赛)的C++编程教程资源,主要面向参赛者提供C++语言的学习材料,帮助他们在比赛中解决算法和数据结构问题。USACO是一项旨在提升高中生计算机科学技能的比赛,强调...
这是USACO2001-2007月赛全集。 usaco是美国中学生的官方竞赛网站。是美国著名在线题库,专门为信息学竞赛选手准备。推荐直接阅读英语原文,既准确可靠又可提高英语水平。做题方式模拟正式比赛,采用标准测评机、文件...
在这个“usaco-java-gold”主题中,我们将深入探讨Java在USACO黄金级别比赛中的应用,以及如何解决相关问题。 一、Java语言基础 1. 类与对象:Java是一种面向对象的语言,理解和熟练运用类和对象是解决USACO问题的...
[USACO 1.2.1]挤牛奶答案 想要完整思路请关注+私信
### USACO 2010-2011 季度竞赛概览与关键信息 #### 一、概述 美国计算机奥林匹克(USACO)是面向全球中学生的计算机科学竞赛,旨在发掘并培养计算机科学领域的年轻人才。USACO 2010-2011 季度竞赛于 2010 年 11 月...
USACO-TurtleCamera 该存储库包含我对USACO问题的所有解决方案。 CSE 199工作区目录将是我用来帮助开发USACO课程的主要目录。