算法复杂度:O(m+n)(假定girl和enemy都有序,实际题目,不记得,如果不是有序,那么先排序,采用计数排序的话,如果范围不大还可以进一步减小算法复杂度)
O(MlogM+nlogN)
实际过程是:采用归并排序过程中合并计算移动平均数
public class SpaceWarDiv1 { /** * 实际上是求移动平均数(实际计算只需要2个变量,而不是sum变量个数) * a<sub>i</sub>表示第i个girl,b<sub>j</sub>表示第i个enemy * 用sum[i]表示倒数第i个girl能打死的enemy总数sum[0]表示最强girl可以打死的人数 * 实际求的是max{sum[0],sum[0:1]/2,sum[0:3]/3..... * @param magicalGirlStrength * @param enemyStrength * @param enemyCount * @return */ public long minimalFatigue(int[] magicalGirlStrength, int[] enemyStrength, long[] enemyCount) { int i=magicalGirlStrength.length-1; int j = enemyStrength.length-1; if(enemyStrength[j]>magicalGirlStrength[i]) return -1L; long sum[]=new long[2]; sum[0]=0; sum[1]=0; long maxVal = 0; int count=0; while(i>=0&&j>=0) { while(i>=0 && magicalGirlStrength[i]>=enemyStrength[j]) i--; if(i<0) break; while(j>=0&&magicalGirlStrength[i]<enemyStrength[j]) { sum[1] += enemyCount[j]; j--; } //girl >=enemy;calc last gir sum //sum[i+1] { //average count = magicalGirlStrength.length-i-1; long average = (sum[1]+sum[0]+count-1)/(count); maxVal = (maxVal>average)?maxVal:average; } sum[0] = sum[0]+sum[1]; sum[1]=0; } while(j>=0){ sum[1] += enemyCount[j]; j--; } { //average count = magicalGirlStrength.length-i-1; long average = (sum[1]+sum[0]+count-1)/count; maxVal = (maxVal>average)?maxVal:average; } return maxVal; } public static void main(String args[]) { int []magicalGirlStrength=new int[]{2,3,5}; int[] enemyStrength = new int[]{1,3,4}; long[] enemyCount =new long[]{2,9,4}; // int []magicalGirlStrength=new int[]{2,3,5}; // int[] enemyStrength = new int[]{1,1,2}; // long[] enemyCount =new long[]{2,9,4}; System.out.println(new SpaceWarDiv1().minimalFatigue(magicalGirlStrength, enemyStrength, enemyCount)); } }
相关推荐
"Topcoder SRM 499 第一题详解" Topcoder SRM 499 的第一题是一道简单的 Addition Game 题目,旨在考察程序员对问题的理解和算法设计能力。本文将详细讲解该题目的知识点和解题思路。 题目分析 该题目中,Fox ...
【标题】"topcoder-srm:Topcoder SRM竞赛解决方案" 这个标题暗示了这是一个与Topcoder平台上的Single Round Matches (SRM)竞赛相关的资源集合。Topcoder SRM是全球知名的在线编程竞赛,参赛者需要在限定时间内解决...
TopCoder是一个全球知名的在线编程竞赛平台,它提供了多种类型的比赛,包括SRM(Single Round Matches)算法竞赛、Bug Race以及软件设计比赛等。 SRM是TopCoder平台的核心部分,它定期举办算法竞赛,参赛者需要在...
TopCoder SRM程序 我尝试过的TopCoder SRM程序列表。 在大多数时候,比赛时间与我的工作/其他活动冲突,因此我对TopCoder不太活跃。 但是我尽力去参加比赛,因为这很有趣。 就像在任何在线比赛中所期望的那样,代码...
《顶级编码器SRM问题集锦》是针对Java开发者,特别是热衷于参加TopCoder算法竞赛的程序员们的一份宝贵资源。这个压缩包文件“topcoder-srm-master”包含了丰富的编程挑战,旨在提升你的编程技能,尤其是对于解决复杂...
【TOPCODER算法PPT1】是一份关于2007年TopCoder竞赛算法讲座的机密文件,它揭示了这个全球知名的编程竞赛平台的核心特点和价值。TopCoder社区是其核心,拥有遍布全球的会员,包括众多活跃的参赛者,涵盖了学生和专业...
"手把手教你玩SRM"很显然是一份旨在帮助参赛者提升技能的教程资料,SRM通常指的是TopCoder平台上的Single Round Matches,是ACM类在线编程竞赛的一种形式。下面将分别解析两个压缩包子文件的文件内容,它们都是关于...
TOPCODER算法ppt2 TOPCODER算法讲座ppt是一个关于TopCoder算法竞赛的讲座ppt,涵盖了TopCoder竞赛的概述、Component Based Methodology、组件目录、软件需求等内容。 在Component Based Methodology中,讲座强调了...
2. 教程:关于算法、数据结构、编程语言的基础教程,帮助初学者建立坚实的理论基础。 3. 实战指南:针对Topcoder比赛的策略指导,如如何高效地阅读和理解题目,如何选择合适的算法等。 4. 代码模板:常用算法的代码...
2. **CodeProcessor.jar**:这是一个Java归档(JAR)文件,包含了topcoder arena中的代码处理逻辑。在比赛中,参赛者编写代码,CodeProcessor会负责编译、测试和评估这些代码,以确定其正确性和性能。 3. **File...
Topcoder软件比赛注册方法和平台使用 Topcoder算法大赛客户端安装流程 Topcoder算法大赛客户端登陆及使用 Topcoder算法大赛注册流程 Topcoder图形比赛注册方法和平台使用
在IT领域,TopCoder是一个知名的在线编程竞赛平台,它为程序员提供了一个展示技术才华、提升编程技能以及与全球开发者竞技的舞台。注册并参与TopCoder的比赛,不仅能提高自己的编程能力,还能有机会接触到实际项目...
适合topcoder新手
而在Division 2的比赛中,奖金总额的30%会被分配,每个房间的前两名可以获得奖金。 TopCoder还为用户提供了一些学习资源,比如如何使用Arena进行练习的详细说明,以及如何在coding window中编写代码的指导。这些...
TopCoder比赛登录使用的客户端,需要配置Java环境
年度赛事中,参赛者会被分为Div1和Div2两组,每个组别又分为多个房间进行SRM(Single Round Matches)。每个SRM包含三个难度不同的问题,参赛者需在规定时间内编写代码解决问题。 比赛支持的编程语言有Java、C++、...
2. **TopCoder广东社区第一次竞赛华工赛区竞赛指南.doc**:这份文档可能针对特定的地区性竞赛,比如广东社区的首次比赛,并且可能包含华工(华南理工大学)赛区的具体信息,包括比赛规则、时间安排、评分标准和参赛...
2. "point-250.cpp":这是一个C++源代码文件,命名中的“250”可能同样对应了另一个问题的分数。C++是编程竞赛中常用的编程语言之一,以其高效和灵活性而受青睐。这个文件很可能是参赛者为解决特定问题编写的代码。 ...