`

TopCoder SRM 582 SpaceWarDiv2

阅读更多

算法复杂度: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还不是很了解的可以拿来看看

    "Topcoder SRM 499 第一题详解" Topcoder SRM 499 的第一题是一道简单的 Addition Game 题目,旨在考察程序员对问题的理解和算法设计能力。本文将详细讲解该题目的知识点和解题思路。 题目分析 该题目中,Fox ...

    topcoder-srm:Topcoder SRM竞赛解决方案

    【标题】"topcoder-srm:Topcoder SRM竞赛解决方案" 这个标题暗示了这是一个与Topcoder平台上的Single Round Matches (SRM)竞赛相关的资源集合。Topcoder SRM是全球知名的在线编程竞赛,参赛者需要在限定时间内解决...

    TopCoder中文指导

    TopCoder是一个全球知名的在线编程竞赛平台,它提供了多种类型的比赛,包括SRM(Single Round Matches)算法竞赛、Bug Race以及软件设计比赛等。 SRM是TopCoder平台的核心部分,它定期举办算法竞赛,参赛者需要在...

    SRMPrograms:我尝试过的TopCoder SRM程序列表。 我在TopCoder上不太活跃,因为大多数时候比赛时间与我的其他工作冲突。 但是我尽力去参加比赛,因为这很有趣

    TopCoder SRM程序 我尝试过的TopCoder SRM程序列表。 在大多数时候,比赛时间与我的工作/其他活动冲突,因此我对TopCoder不太活跃。 但是我尽力去参加比赛,因为这很有趣。 就像在任何在线比赛中所期望的那样,代码...

    topcoder-srm:顶级编码器srm问题集锦

    《顶级编码器SRM问题集锦》是针对Java开发者,特别是热衷于参加TopCoder算法竞赛的程序员们的一份宝贵资源。这个压缩包文件“topcoder-srm-master”包含了丰富的编程挑战,旨在提升你的编程技能,尤其是对于解决复杂...

    TOPCODER 算法PPT1

    【TOPCODER算法PPT1】是一份关于2007年TopCoder竞赛算法讲座的机密文件,它揭示了这个全球知名的编程竞赛平台的核心特点和价值。TopCoder社区是其核心,拥有遍布全球的会员,包括众多活跃的参赛者,涵盖了学生和专业...

    手把手教你玩SRM

    "手把手教你玩SRM"很显然是一份旨在帮助参赛者提升技能的教程资料,SRM通常指的是TopCoder平台上的Single Round Matches,是ACM类在线编程竞赛的一种形式。下面将分别解析两个压缩包子文件的文件内容,它们都是关于...

    TOPCODER算法ppt2

    TOPCODER算法ppt2 TOPCODER算法讲座ppt是一个关于TopCoder算法竞赛的讲座ppt,涵盖了TopCoder竞赛的概述、Component Based Methodology、组件目录、软件需求等内容。 在Component Based Methodology中,讲座强调了...

    Topcoder入门

    2. 教程:关于算法、数据结构、编程语言的基础教程,帮助初学者建立坚实的理论基础。 3. 实战指南:针对Topcoder比赛的策略指导,如如何高效地阅读和理解题目,如何选择合适的算法等。 4. 代码模板:常用算法的代码...

    topcoder客户端及相关插件

    2. **CodeProcessor.jar**:这是一个Java归档(JAR)文件,包含了topcoder arena中的代码处理逻辑。在比赛中,参赛者编写代码,CodeProcessor会负责编译、测试和评估这些代码,以确定其正确性和性能。 3. **File...

    TopCoder入门相关介绍

    Topcoder软件比赛注册方法和平台使用 Topcoder算法大赛客户端安装流程 Topcoder算法大赛客户端登陆及使用 Topcoder算法大赛注册流程 Topcoder图形比赛注册方法和平台使用

    TopCoder注册指南

    在IT领域,TopCoder是一个知名的在线编程竞赛平台,它为程序员提供了一个展示技术才华、提升编程技能以及与全球开发者竞技的舞台。注册并参与TopCoder的比赛,不仅能提高自己的编程能力,还能有机会接触到实际项目...

    Topcoder介绍及Arena使用方法

    适合topcoder新手

    TopCoder新手指南

    而在Division 2的比赛中,奖金总额的30%会被分配,每个房间的前两名可以获得奖金。 TopCoder还为用户提供了一些学习资源,比如如何使用Arena进行练习的详细说明,以及如何在coding window中编写代码的指导。这些...

    TopCoder比赛登录客户端

    TopCoder比赛登录使用的客户端,需要配置Java环境

    TopCoder注册及入门介绍

    年度赛事中,参赛者会被分为Div1和Div2两组,每个组别又分为多个房间进行SRM(Single Round Matches)。每个SRM包含三个难度不同的问题,参赛者需在规定时间内编写代码解决问题。 比赛支持的编程语言有Java、C++、...

    TopCoder竞赛资料

    2. **TopCoder广东社区第一次竞赛华工赛区竞赛指南.doc**:这份文档可能针对特定的地区性竞赛,比如广东社区的首次比赛,并且可能包含华工(华南理工大学)赛区的具体信息,包括比赛规则、时间安排、评分标准和参赛...

    TOPCODER比赛作品

    2. "point-250.cpp":这是一个C++源代码文件,命名中的“250”可能同样对应了另一个问题的分数。C++是编程竞赛中常用的编程语言之一,以其高效和灵活性而受青睐。这个文件很可能是参赛者为解决特定问题编写的代码。 ...

Global site tag (gtag.js) - Google Analytics