`
lylegend13
  • 浏览: 83947 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

未通过的1011——自定义结构

阅读更多

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeMap;

public class Main1 {
	public static void main(String[] args) {
		new Main1();
	}

	int l;

	public Main1() {

		Scanner s = new Scanner(System.in);
		while (s.hasNextInt()) {
			int count = s.nextInt();
			if (count == 0) {
				break;
			}
			NumNum nn = new NumNum();
			int sum = 0;
			for (int i = 0; i < count; i++) {
				int num = s.nextInt();
				sum += num;
				nn.add(num, 1);
			}

			int max = nn.map.keySet().iterator().next();

			for (int i : getList(max, sum)) {
				l = i;
				if (exec(nn, i)) {
					System.out.println(i);
					break;
				}
			}
		}

		s.close();

	}

	public List<Integer> getList(int max, int n) {
		List<Integer> list = new ArrayList<Integer>();
		for (int i = max; i <= Math.sqrt(n); i++) {
			if (n % i == 0) {
				list.add(i);
				if (i * i != n) {
					list.add(n / i);
				}
			}
		}
		Collections.sort(list);
		return list;
	}

	public boolean exec(NumNum nn, int length) {
		for (Iterator<Integer> i = nn.map.keySet().iterator(); i.hasNext();) {
			int num = i.next();
			int allCount = nn.map.get(num);
			if (allCount == 0) {
				continue;
			}
			int needCount = length / num;
			if (needCount == 0) {
				continue;
			}
			int count = Math.min(allCount, needCount);

			nn.del(num, count);
			int left = length - num * count;
			if (left == 0) {
				if (nn.isEmpty()) {
					return true;
				} else {
					if (!exec(nn, l)) {
						nn.add(num, count);
					} else {
						return true;
					}
				}
			} else {
				if (!exec(nn, left)) {
					nn.add(num, count);
				} else {
					return true;
				}
			}
		}
		return false;
	}
	
	
}

class NumNum {

	TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>(new Comparator<Integer>() {

		@Override
		public int compare(Integer arg0, Integer arg1) {
			return arg1 - arg0;
		}
	});

	public void add(int i, int j) {
		if (map.containsKey(i)) {
			map.put(i, map.get(i) + j);
		} else {
			map.put(i, j);
		}
	}

	public void del(int i, int j) {
		map.put(i, map.get(i) - j);
	}

	public boolean isEmpty() {
		for (Iterator<Integer> i = map.values().iterator(); i.hasNext();) {
			if (0 != i.next()) {
				return false;
			}
		}
		return true;
	}
}
 
分享到:
评论

相关推荐

    C# ——自定义线程池

    标题中的"C# ——自定义线程池",意味着我们将探讨如何利用C#语言构建一个自定义的线程池系统。这涉及到对.NET Framework的深入理解,特别是`System.Threading`命名空间下的类和接口,如`ThreadPool`、`Thread`、`...

    小程序——自定义组件.rar

    本压缩包"小程序——自定义组件.rar"可能包含了一系列关于如何创建、使用和优化自定义组件的教程、示例代码和相关资源。 首先,自定义组件的创建是通过继承微信小程序提供的`Component`对象来实现的。开发者需要在`...

    IOS应用源码——自定义Cell.rar

    此"IOS应用源码——自定义Cell.rar"文件提供了一种实践方法,帮助开发者深入理解并掌握自定义UITableViewCell的过程。以下是对这个主题的详细解释: 一、自定义Cell的必要性 在标准的iOS表格视图(UITableView)中...

    安卓Android源码——自定义时钟.zip

    "安卓Android源码——自定义时钟.zip"这个压缩包就是一个专注于讲解如何在Android应用中自定义时钟视图的教程资源。通过分析提供的源码和文档,我们可以深入理解Android系统的时钟组件工作原理,并学习如何构建自己...

    IOS应用源码——自定义Cell.zip

    这个压缩包“IOS应用源码——自定义Cell.zip”显然包含了一个示例项目,展示了如何在iOS应用中自定义UITableViewCell。下面将详细探讨自定义Cell的关键知识点。 首先,了解UITableViewCell的基本结构是必要的。...

    Hibernate使用——自定义数据类型

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,通过面向对象的方式处理数据。在实际项目开发中,有时我们可能需要对数据库中的某些字段使用自定义的...

    IOS应用源码——自定义的tab bar 视图.rar

    本资源"IOS应用源码——自定义的tab bar 视图.rar"提供了一个关于如何自定义Tab Bar视图的实例,对于学习iOS开发特别是界面设计和用户体验优化的开发者来说,这是一个非常有价值的学习材料。 在iOS中,系统的...

    安卓Android源码——自定义表格自动刷新数据.rar

    这个“安卓Android源码——自定义表格自动刷新数据.rar”压缩包提供了实现这一功能的示例源码,帮助开发者了解如何在Android环境中高效地处理动态更新的数据。 首先,我们来看“JavaApk源码说明.txt”。这个文件很...

    博客《鱼眼索引控件详解之一 —— 自定义索引器 》源码

    本资源是博客《鱼眼索引控件详解之一 —— 自定义索引器》的源码,通过分析和学习,开发者可以深入理解如何在Android中自定义这种索引器。 首先,我们来探讨一下Android中自定义索引器的基本概念。在Android的...

    IOS应用源码——自定义action sheet效果库.rar

    这个“IOS应用源码——自定义action sheet效果库.rar”显然包含了用于实现自定义Action Sheet效果的源代码。以下是对这个库可能包含的关键知识点的详细解释。 1. **UIActionSheet**: UIActionSheet是Apple提供的...

    安卓Android源码——自定义头部控件,简单易用.zip

    本资源包“安卓Android源码——自定义头部控件,简单易用.zip”提供了一个实现这一功能的示例,帮助开发者快速理解和创建自己的自定义头部组件。 1. **自定义头部控件的基本概念**: 在Android中,自定义头部控件是...

    IOS应用源码——自定义的马赛克时间风格.rar

    "IOS应用源码——自定义的马赛克时间风格.rar"这个压缩包文件提供了一个独特的案例,展示了如何在iOS应用中创建一个自定义的马赛克时间显示样式。通过分析和学习这个源码,开发者可以深入理解iOS UI设计和自定义控件...

    安卓Android源码——自定义适配器的ExpandableListView.zip

    这个压缩包文件"安卓Android源码——自定义适配器的ExpandableListView.zip"包含了一份关于如何在Android应用中自定义适配器以实现`ExpandableListView`功能的详细教程和示例代码。 首先,我们要理解`...

    安卓Android源码——自定义适配器的ExpandableListView.rar

    这个压缩包文件"安卓Android源码——自定义适配器的ExpandableListView.rar"包含了一份关于如何在Android应用中自定义`ExpandableListView`适配器的详细文档(自定义适配器的ExpandableListView.doc)以及一个实际的...

    IOS应用源码——自定义的马赛克时间风格.zip

    "IOS应用源码——自定义的马赛克时间风格.zip"这个压缩包包含了一种独特的马赛克时间显示风格的源代码,适合那些希望在自己的iOS应用中添加个性化时间显示功能的开发者。以下是关于这个主题的详细知识点: 1. **...

    小程序模块化开发——自定义组件.zip

    本压缩包文件“小程序模块化开发——自定义组件.zip”聚焦于小程序的模块化开发,尤其是自定义组件的使用,这是一项关键技能,可以帮助开发者更高效地构建和维护复杂的小程序项目。 自定义组件是小程序模块化开发的...

    IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.zip

    本示例代码“IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.zip”专注于如何个性化定制Tab Bar,包括文字、颜色以及添加箭头效果,为用户提供更具特色的交互体验。 首先,我们要理解Tab Bar的基础结构。Tab ...

    android dialog —— 自定义数据源的单选列表对话框

    在这种情况下,使用自定义数据源的单选列表对话框(Dialog)是一种理想的选择。本文将详细介绍如何在Android中实现这样一个功能。 首先,我们来理解“单选对话框”是什么。单选对话框,通常以列表形式呈现,用户...

    安卓Android源码——自定义本地相册的功能,可以多选图片用.zip

    本项目提供的"安卓Android源码——自定义本地相册的功能,可以多选图片用.zip"就是一个解决此类问题的示例。下面将详细解析其中涉及的关键知识点。 首先,我们需要理解Android系统的存储结构和权限管理。在Android...

    安卓Android源码——自定义seekbar源码.zip

    在提供的压缩包中,可能包含了一个自定义 SeekBar 的示例源码,通过阅读 `源码说明.txt` 文件,你可以了解作者如何实现自定义效果。`3-130501_1.jpg` 和 `3-130501_2.jpg` 可能是展示自定义 SeekBar 效果的截图,...

Global site tag (gtag.js) - Google Analytics