POJ- Find a multiple -(抽屉原理)
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 6452 | Accepted: 2809 | Special Judge | ||
Description
Input
Output
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的数,并且输出该数的个数以及连续数*/
/*
抽屉原理:主要是用来求数列的某一段连续和能够整除该数列个数的问题;
先累每一个数,记录在Sum中,设i>j,则sum[i]-sum[j]则表示位置i到位置j这一段区间的和,
题目既可以简化为求(sum[i]-sum[j])%N==0的满足条件即可
所以设q,p(倍数),r1,r2(余数)为整数,
sum[i]=q*N+ri,sum[i]=p*N+rj;
ri=Sum[i]%N (ri为余数)
(sum[i]-sum[j])=>(q*N+ri)-(p*N+rj)=>(q-p)*N+(ri-rj)
既为:(sum[i]-sum[j])%N==0=>((q-p)*N+(ri-rj))%N==0
=>(ri-rj)%n==0=>ri=rj可以使得等式成立,可满足条件;
所以只需要求解存在两个ri和rj相等,就可以知道,该段位置从i+1累加到j能够被N整除
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int Num[]; /*记录输入数据*/
int Sum[]; /*记录数据的累加和*/
int Sign[]; /*记录该数据累加和取余后的情况,sign[i],0<=i<N*/
int ID[]; /*ID[i]表示该余数是否被出现过了,记录每一个余数第一次产生i的位置,且ID[0]=0*/
int Begin,End,Flat,i,N; /*Flat标记是否完成任务*/
while(scanf("%d",&N)!=EOF)
{
memset(Sum,,sizeof(Sum));
memset(ID,-,sizeof(ID)); /*因为ID存放的是该数的位置,需要初始化为-1,*/
ID[]=;/*记得标记初始位置的*/
for(i=,Flat=;i<=N;i++)
{
scanf("%d",&Num[i]);
Sum[i]=Sum[i-]+Num[i]; /*求累加和*/
Sign[i]=Sum[i]%N; /*求累加和的余数*/
if(ID[Sign[i]]>=&&Flat) /*判断该位置是否被使用过,且是否完成任务*/
{
Begin=ID[Sign[i]]; /*记录开始点*/
End=i; /*记录结束点*/
Flat=;
}
else if(Flat)
ID[Sign[i]]=i; /*如果该余数未被产生,则记录下该余数第一次出现的位置*/
}
printf("%d\n",End-Begin);
for(i=Begin+;i<=End;i++)
{
printf("%d\n",Num[i]);
} }
return ;
}
POJ- Find a multiple -(抽屉原理)的更多相关文章
- POJ 2356 Find a multiple 抽屉原理
从POJ 2356来体会抽屉原理的妙用= =! 题意: 给你一个n,然后给你n个数,让你输出一个数或者多个数,让这些数的和能够组成n: 先输出一个数,代表有多少个数的和,然后再输出这些数: 题解: 首 ...
- poj2356 Find a multiple(抽屉原理|鸽巢原理)
/* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...
- POJ2356 Find a multiple 抽屉原理(鸽巢原理)
题意:给你N个数,从中取出任意个数的数 使得他们的和 是 N的倍数: 在鸽巢原理的介绍里面,有例题介绍:设a1,a2,a3,……am是正整数的序列,试证明至少存在正数k和l,1<=k<=l ...
- POJ 3370 Halloween treats(抽屉原理)
Halloween treats Every year there is the same problem at Halloween: Each neighbour is only willing t ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- Find a multiple POJ - 2356 (抽屉原理)
抽屉原理: 形式一:设把n+1个元素划分至n个集合中(A1,A2,…,An),用a1,a2,…,an分别表示这n个集合对应包含的元素个数,则:至少存在某个集合Ai,其包含元素个数值ai大于或等于2. ...
- poj 2356 (抽屉原理)
题目链接:http://poj.org/problem?id=2356 题目大意:给你n个数,要你从n个数选出若干个数,要求这若干个数的和是n的倍数,输出选择数的个数,以及相应的数. 解题思路: 以下 ...
- POJ-2356 Find a multiple(DFS,抽屉原理)
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7133 Accepted: 3122 Speci ...
随机推荐
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Collector
安装 参考安装文章 创建项目project 转到你创建的目录,运行命令 django-admin.py startproject collector 生成下列文件 collector/ __ini ...
- ServiceContract,OperationContract
代码如下 [ServiceContract] //服务协定定义 using System.ServiceModel; public interface IInterface1 { [Operation ...
- 拔高课程_day14_课堂笔记
今日大纲 Redis的持久化 Redis的主从 Redis的集群 mysql 优化 tomcat优化 Redis的持久化 持久化 持久化,就是将数据保存到磁盘,机器宕机或者重启数据不丢失,如果存储到内 ...
- HDU 2601 An easy problem
(i+1)*(j+1)=n+1 转换成上面这个式子,也就是问n+1的因子有几个 #include<cstdio> #include<cstring> #include<c ...
- jQuery第九章
第九章 jQuery Mobile 一.HTML5.0简介 谈到Web设计,我们经常把Web分为三个层: (1)结构层:(2)表现层:(3)行为层. 对应的技术分别是: (1)HTML:(2)CSS: ...
- iOS开发之即时通讯之Socket(AsyncSocket)
1.AsyncSocket介绍 如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯. iOS中Socket编程的方式: BSD Socket: BSD Socket 是UNIX系统中 ...
- uhttpd配置文件分析
文件位于 /etc/config/uhttpd. root@hbg:/etc/config# cat uhttpd config uhttpd 'main' list listen_ht ...
- NOIP2005-普及组复赛-第三题-采药
题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山 ...
- Openjudge-计算概论(A)-谁考了第k名
描述: 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. 输入第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n). ...