`
bmqnc
  • 浏览: 127469 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SRM 499 DIV2

 
阅读更多
250的和500的偏简单,就不说了,500的想明白了很简单,代码如下:
import java.util.Arrays;

public class ColorfulRabbits {

	//easy problem!
	public int getMinimum(int[] replies) {
		int ans=0;
		
		Arrays.sort(replies);
		int n=replies.length;
		for(int i=0;i<n;){
			int count=replies[i];
			int j=0;
			for(;j<count+1&&i+j<n;j++){
				if(replies[i+j]!=count){
					break;
				}
			}
			
			i+=j;
			ans+=count+1;
		}
		
		return ans;
	}

}


950pts的题,我感觉有点考查数据结构,定义好了数据结构,想明白其实就很简单,代码如下:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Vector;

public class PalindromeGame {

	public int getMaximum(String[] front, int[] back) {
		HashMap<String,FrontBack> hm=new HashMap<String,FrontBack>();
		int n=front.length;
		for(int i=0;i<n;i++){
			String f=front[i];
			int b=back[i];
			Node node=new Node(f,b);
			StringBuffer sb=new StringBuffer(f);
			FrontBack matched=hm.get(f);
			if(matched==null){
				matched=hm.get(sb.reverse().toString());
			}
			if(matched ==null){
				FrontBack frontBack=new FrontBack();
				frontBack.mark=f;
				frontBack.isPalmeString=isPalmeString(f);
				matched=frontBack;
				hm.put(f, frontBack);
			}
			matched.add(node);
		}//for
		
		int ans=0;
		Vector<Integer> vec=new Vector<Integer>();
		FrontBack frontBacks[]=hm.values().toArray(new FrontBack[0]);
		for(FrontBack fb:frontBacks){
			Node nodes1[] = fb.queue1.toArray(new Node[0]);
			Node nodes2[] = fb.queue2.toArray(new Node[0]);
			Arrays.sort(nodes1);
			Arrays.sort(nodes2);
			if(fb.isPalmeString){
				if(nodes1.length%2==0){
					for(Node node:nodes1)
						ans+=node.back;
				}else{
					for(int i=0;i<nodes1.length-1;i++){
						ans+=nodes1[i].back;
					}
					vec.add(nodes1[nodes1.length-1].back);
				}
				
				if(nodes2.length%2==0){
					for(Node node:nodes2)
						ans+=node.back;
				}else{
					for(int i=0;i<nodes2.length-1;i++){
						ans+=nodes2[i].back;
					}
					vec.add(nodes2[nodes2.length-1].back);
				}
			}else{
				int min = Math.min(nodes1.length, nodes2.length);
				for (int i = 0; i < min; i++) {
					ans += nodes1[i].back + nodes2[i].back;
				}
			}
		}//for
		
		Integer[] ins=vec.toArray(new Integer[0]);
		Arrays.sort(ins);
		if(ins!=null&&ins.length>0){
			return ans+ins[ins.length-1];
		}else{
			return ans;
		}
	}

	public boolean isPalmeString(String str){
		char[] chs=str.toCharArray();
		int n=chs.length;
		for(int i=0;i<n/2;i++){
			if(chs[i]!=chs[n-1-i])
				return false;
		}
		
		return true;
	}
}

class FrontBack{
	ArrayList<Node> queue1=new ArrayList<Node>();
	ArrayList<Node> queue2=new ArrayList<Node>();
	String mark=null;
	boolean isPalmeString=false;
	
	public void add(Node node){
		if(mark.equals(node.front)){
			queue1.add(node);
		}else{
			queue2.add(node);
		}
	}
}

class Node implements Comparable<Node>{

	String front=null;
	int back=-1;
	
	public Node(String front, int back) {
		super();
		this.front = front;
		this.back = back;
	}

	public int compareTo(Node node) {
		if(back>node.back)
			return -1;
		
		if(back<node.back)
			return 1;
		
		return 0;
	}
}

分享到:
评论

相关推荐

    TC SRM 388 div 2 problem 3

    topcoder的数学类算法题目。一个整数被称为k-smooth当且仅当它的最大素因子不大于k,给定N和K,计算出1 - N中有多少个整数是k-smooth。1 , 1 &lt;= K &lt;= 1000.

    Topcoder SRM 499 的第一道题,如果对topcoder还不是很了解的可以拿来看看

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

    SRM2Mult_1.2_srm2_compositionqw7_

    SRM2Multi dumper for hsap

    VMWARE SRM快速部署手册

    2. **SRM服务器**:运行SRM软件的物理或虚拟服务器,操作系统需为Server 2008 x64。 3. **支持SRM的数据库**:这里指能够被SRM兼容的数据库系统,例如SQL Server 2005。该数据库用于存储SRM的相关配置信息。 4. **...

    SRM SRM 平台功能介绍.pdf

    SAP SRM 介绍

    HASP-SRM-emulator-D.rar_SRM_SRM emulator_emulator_emulator hasp_

    Driver HASP SRM emulator (x86)

    SRM.zip_SRM_SRM 分析_steganalysis_隐写分析_集成分类器

    SRM空间富模型隐写分析算法,选区高维特征,使用集成分类器进行训练

    SRM-MDM Catalog Setup – Ready Reference

    2. **目录数据准备**:准备将要导入MDM系统的目录数据,通常包括产品信息、价格和供应商详情。 3. **目录数据导入**:使用MDM Import Manager将数据导入MDM系统。 4. **Web UI配置**:设置SRM-MDM Catalog Web UI,...

    srm image segmentation code

    2. **边界长度**:`srm_boundarylen.cpp`可能是用于计算相邻区域边界的长度,这是评估区域合并代价的另一个因素。较长的边界通常意味着更高的合并成本,因为这会引入更多的不确定性。 3. **SRM主程序**:`srm.m`是...

    HASP SRM加密狗简介

    HASP SRM加密狗简介 HASP SRM加密狗是一种软件保护解决方案,由阿拉丁公司开发。它提供了多种型号,以满足不同业务需要。下面将对HASP SRM加密狗的各种型号进行详细介绍。 首先是HASP HL基本型,这是阿拉丁公司最...

    SAP-SRM模块快速指南及学习基本知识

    SAP SRM(供应商关系管理)是一种 SAP 产品,有助于通过基于 Web 的平台采购货物。 组织可以采购所有类型的产品,如直接和间接材料,服务,这可以与 SAP ERP 模块和其他非 SAP 后端系统集成,用于会计和计划。 SAP...

    VSAN和SRM.rar

    【标题】"VSAN与SRM"涉及到的是VMware虚拟化环境中的两个关键组件:Virtual SAN(VSAN)和Site Recovery Manager(SRM)。这两个工具在企业级数据中心中发挥着至关重要的作用,确保业务连续性和灾难恢复能力。 VSAN...

    SRM系统框架

    多年SRM实施经验总结,对希望从事SRM实施或规划的同学们有帮助

    SRM系统框架图设计

    分块描述SRM系统的作用:寻源、协同和考核 涉及具体的业务用途,供前期规划作参考,可根据实际情况调整,再考虑如何实现

    SAP SRM 最新资料

    根据给定的文件信息,我们可以提炼出以下关于SAP SRM(Supplier Relationship Management)的知识点,这主要聚焦于SAP SRM的配置、组件、版权信息以及先修课程建议。 ### SAP SRM概述 SAP SRM是SAP提供的一款用于...

    srm后端JAVA 供应商平台管理

    srm后端JAVA 供应商平台管理 标准物资开票表 bus_standard_invoice_out增加freeze_quantity(冻结数量这一列)。 标准物资开票表 bus_standard_invoice_out的主键为{行项目、采购订单号、物料凭证}。 标准物资...

    SRM 210 供应商关系管理

    2. **角色和权限**:根据不同的职责分配用户角色,比如采购员、审批者等,确保安全性和合规性。每个角色都有相应的访问权限,例如查看、编辑和批准采购请求。 3. **采购组织结构**:定义采购组织、采购组、采购办公...

    SRM系统资源管理器

    **SRM系统资源管理器详解** SRM(System Resource Manager)系统资源管理器是一个专为Linux环境设计的工具,它的主要功能是作为一个守护进程在后台持续监控非root用户的进程,以便控制系统的CPU和内存(MEM)资源...

    手把手教你玩SRM

    2. **合同管理**:制定明确的合同条款,确保双方权益,同时设定性能指标和违约处理机制。 3. **供应链协同**:通过信息共享,提高供应链的透明度,实现供需同步,减少库存和响应时间。 4. **供应商绩效评估**:...

    SRM需求分析.doc

    **2. 任务概述** 2.1 现状与目标:当前,企业在供应商管理上存在信息不统一、流程复杂等问题。目标是通过SRM系统实现采购流程自动化,提高数据准确性和决策效率。 2.2 项目运行环境:系统需适应企业现有的IT基础设施...

Global site tag (gtag.js) - Google Analytics