鸽巢原理

 

鸽巢原理: n+1个鸽子放入n个窝中,至少有一个窝含有两只鸽子 

Find a multiple
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 5590 Accepted: 2434 Special Judge

Description

The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each of that numbers is not greater than 15000. This numbers are not necessarily different (so it may happen that two or more of them will be equal). Your task is to choose a few of given numbers ( 1 <= few <= N ) so that the sum of chosen numbers is multiple for N (i.e. N * k = (sum of chosen numbers) for some natural number k).

Input

The first line of the input contains the single number N. Each of next N lines contains one number from the given set.

Output

In case your program decides that the target set of numbers can not be found it should print to the output the single number 0. Otherwise it should print the number of the chosen numbers in the first line followed by the chosen numbers themselves (on a separate line each) in arbitrary order.

If there are more than one set of numbers with required properties you should print to the output only one (preferably your favorite) of them.

Sample Input

5
1
2
3
4
1

Sample Output

2
2
3
题意:
一个集合一共有N个数字 ,从中选取任意一个数字集合,使集合中的数字的和是N的倍数
解题思路:
首先,一定存在这样的集合,它是集合中的一串连续数字,且其和为 N的倍数
证明:
设集合中的数字为 a1,a2,a3,a4,……ai,则设:
S1 = a1
S2 = a1+a2
S3 = a1+a2+a3
Sn = a1+a2+a3+……+an
若 Sn % N = 0,则 Sn 即为所求,
若 Sn % N != 0 ,Sn % N 的 范围 在 【1,N-1】之间 , 又一共有 N 个余数 ,根据鸽巢原理,一定有两个余数是相同的,
我们假设为Si 和 Sj,
即有:
Si % N = t
Sj % N = t
那么一定有:
(Si - Sj)% N = 0
所以一定存在符合要求的解,且其集合中的数字是连续的,范围是【ai,aj】。
证毕。
import java.util.Scanner;public class ACM16 {public static void main(String[] args) {Scanner cin = new Scanner(System.in);int num = cin.nextInt();int[] arr = new int[num], sum = new int[num], b = new int[num];for (int i = 0; i < num; i++) {arr[i] = cin.nextInt();b[i] = -1;}sum[0] = arr[0] % num;b[sum[0]] = 0;int temp = 0, temp1 = 0;for (int i = 1; i < num; i++) {sum[i] = sum[i - 1] + arr[i];sum[i] %= num;if (sum[i] == 0) {temp = -1;temp1 = i;break;}if (b[sum[i]] == -1) {b[sum[i]] = i;} else {temp = b[sum[i]];temp1 = i;break;}}System.out.println(temp1 - temp);for (int i = temp + 1; i <= temp1; i++) {System.out.println(arr[i]);}}
}

 

转载于:https://www.cnblogs.com/ZhangJinkun/p/3728592.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux命令:vim文件操作命令、新建用户,查看用户列表,chown命令

命令 简单说明 :w 保存编辑后的文件内容&#xff0c;但不退出vim编辑器。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。 :w! 强制写文件&#xff0c;即强制覆盖原有文件。如果原有文件的访问权限不允许写入文件&#xff0c;例如&#xff0c;原有的文件…

cocos2d-x android 环境搭配,cocos2d-x Android环境配置问题和解决方法

1.前提&#xff1a;下载安装Cygwin,并已经在cygwin\home\admin(计算机用户名)下的.bash_profile中完成如下配置&#xff1a;NDK_ROOT /cygdrive/d/cocos2dxdev/andrid-ndk-r8e//NDK安装位置export NDK_ROOT问题&#xff1a;运行cygwin.exe.录入如下的第一行数据后&#xff0c;没…

jQuery 1.9 移除了 $.browser 的替代方法

授权方式&#xff1a;署名&#xff0c;非商业用途&#xff0c;保持一致&#xff0c;转载时请务必以超链接(http://www.fwolf.com/blog/post/35)的形式标明文章原始出处和作者信息及本声明。 jQuery 从 1.9 版开始&#xff0c;移除了 $.browser 和 $.browser.version &#xff0…

基于QTcpSocket和QTcpServer的Tcp通讯以及QDataStream序列化数据

最近要在QT下开发Tcp通讯&#xff0c;发送序列化数据以便于接收。 这里涉及到几个问题&#xff1a; 1.QTcpSocket、QTcpServer的通讯 2.QDataStream序列化数据 多的不说&#xff0c;直接上干货&#xff01;&#xff01;&#xff01; 客户端&#xff1a; tcpclient.h 1 #ifndef …

android mina分析,Android与Mina整合

最近想在自己做的安卓手机应用中加入即时聊天功能&#xff0c;于是想到了用Mina来实现&#xff0c;也是由于自己想着偷懒&#xff0c;借用了官方的example中chat的相关代码&#xff0c;经过一番改造&#xff0c;很快就能在java环境中正常运行了。确认没问题后&#xff0c;将cli…

栈的应用--括号匹配的检验

算法中设置一个栈&#xff0c;每次读入一个括号&#xff0c;若是右括号&#xff0c;则或者与置于栈顶的括号匹配&#xff0c;或者是不合法的情况&#xff0c;若是左括号&#xff0c;则入栈。若算法结束&#xff0c;栈是空的&#xff0c;则括号合法。 括号匹配函数 Status bra…

node.js 初体验

node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为《Nodejs初阶之express》 ~ 2014/09/24 更新《Express 4.X 启航指南》 欢迎阅读和评论:) 最近写的文章收到许多朋友的反馈&#xff0c;感谢大家的支持和建议&#…

Qt之模型/视图(实时更新数据)

上两节简单介绍了Qt中对于模型/视图的编程&#xff0c;大部分助手里说的很清楚了&#xff0c;现在就开始实战部分吧&#xff01; 在实际应用中&#xff0c;视图展示的数据往往并非一成不变的&#xff0c;那么如何实时更新成了一个很重要的问题&#xff01;功能&#xff1a;&am…

android 动态生成fragment,Android动态加载fragment(fragment复用)

【实例简介】Android动态加载fragment(fragment复用)【实例截图】【核心代码】fm_reuse└── fm_reuse├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── classes│ │ └── com│ │ └── example│ │ └── fm_reuse│ …

Linux内核3.0移植并基于Initramfs根文件系统启动

Linux内核移植与启动 Target borad&#xff1a;FL2440 Bootloader&#xff1a;U-boot-2010.09 交叉编译器&#xff1a;buildroot-2012.08 1.linux内核基础知识 首先&#xff0c;磨刀不误砍柴工。在动手进行linux内核移植之前&#xff0c;我们有必要对linux内核进行一定的了解。…

操作系统上机作业--实现shell(2)(多进程)

sh2.c: 实现shell程序&#xff0c;要求在第1版的基础上&#xff0c;添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路&#xff1a; 和sh1.c相比&#xff0c;主要是修改了cmd函数的实现过程。通过循环找出重定向符号"&g…

当泛型方法推断,扩展方法遇到泛型类型in/out时。。。

说到泛型方法&#xff0c;这个是.net 2.0的时候引入的一个重要功能&#xff0c;c#2.0也对此作了非常好的支持&#xff0c;可以不需要显试的声明泛型类型&#xff0c;让编译器自动推断&#xff0c;例如&#xff1a; 1 void F<T>(T value){} 2 //... 3 int i 0; 4 F(i); 此…

AOP相关

实现AOP的技术&#xff0c;主要分为两大类&#xff1a;一是采用动态代理技术&#xff0c;利用截取消息的方式&#xff0c;对该消息进行装饰&#xff0c;以取代原有对象行为的执行&#xff1b;二是采用静态织入的方式&#xff0c;引入特定的语法创建“方面”&#xff0c;从而使得…

操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)

pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 1/5 - 1/7 1/9 - ... PI/4 • 主线程创建1个辅助线程 • 主线程计算级数的前半部分 • 辅助线程计算级数的后半部分 • 主线程等待辅助线程运行結束后,将前半部分和后半部分相加实现思路&#xff1…

四种途径将HTML5 web应用变成android应用

作为下一代的网页语言&#xff0c;HTML5拥有很多让人期待已久的新特性。HTML5的优势之一在于能够实现跨平台游戏编码移植&#xff0c;现在已经有很多公司在移动设备上使用HTML5技术。随着HTML5跨平台支持的不断增强和智能手机的迅速普&#xff0c;HTML5技术有着非常好的发展前景…

操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)

pi2.c: 使用N个线程根据莱布尼兹级数计算PI • 与上一题类似&#xff0c;但本题更加通用化&#xff0c;能适应N个核心&#xff0c;需要使用线程参数来实现 • 主线程创建N个辅助线程 • 每个辅助线程计算一部分任务&#xff0c;并将结果返回 • 主线程等待N个辅助线程…

html 16进制 转换成字符串,js 字符串和16进制的互相转换

字符串转16进制function strToHexCharCode(str) {if(str "")return "";var hexCharCode [];hexCharCode.push("0x");for(var i 0; i < str.length; i) {hexCharCode.push((str.charCodeAt(i)).toString(16));}return hexCharCode.join(&qu…

数组以及冒泡排序

数组 1、概念&#xff1a;可以帮我一次声明多个同类型的变量&#xff0c;这些变量再内存中是连续存储的。 2、声明语法&#xff1a;数据类型[] 数组名 new 数据类型[数组长度] 数组长度&#xff1a;一次要声明的同类型的变量个数。是在定义这个数组的时候就确定了&#xf…

jQuery触发a标签的点击事件无效

1 <a id"workFrame" href"pages/work.html" target"FrameBox">首页</a> 2 3 $("#workFrame").tigger("click"); 上述的代码&#xff0c;其实挺正常的&#xff0c;但是怎么也触发不了a标签的cli…

操作系统上机作业--多线程排序

sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序算法归并数组的前半部分和后半部分 实现思路&#xff1a; ARRAY_CO…