这是一道简单的对鸽笼原理的运用;

题意:给出N个数,从中选出若干个数使得它们的和为N的倍数。

有一种简单的方法如下:

虽然题目没限制怎样选,但是我们可以证明:存在若干个这样的连续数,它们的和是N的倍数。为此,我们可以考察和Sk =a1+a2+...+ak.如果存在一个Sk是N的倍数,那么把前K个数选出来就可以了。否则所有N歌Sk除以N的余数只有1,2,3,4...N-1;这n-1种可能(n-1个盒子),由基本原理 知,必然有两个不同的和Si和Sj(i<j)除以N的余数相同,所以

Sj -Si = ai+1 + .... aj 是N的倍数;

View Code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<cstring>
#include<vector>
#include<string>
#define LL long long
using namespace std;int main(  )
{int num[10024];int N,a[10024];while( scanf( "%d",&N )==1 ){int sum = 0,flag = 0;memset( num , 0, sizeof( num ) );for( int i = 1 ; i <= N ; i++ ){scanf( "%d",&a[i] );if( flag ) continue;sum += a[i];int t =  sum % N;if( t== 0 ){flag = 1;printf( "%d\n",i );for( int j = 1 ; j <= i; j++  )printf( "%d\n",a[j] );        }else if( num[t] == 0 )num[t] = i;else{flag = 1;printf( "%d\n",i - num[t] );for( int j = num[t]+1 ; j <= i ; j ++ )printf( "%d\n",a[j] );}}}//system( "pause" );return 0;
}

转载于:https://www.cnblogs.com/bo-tao/archive/2012/07/27/2611306.html

poj 2356 Find a multiple相关推荐

  1. poj - 2356 Find a multiple

    http://poj.org/problem?id=2356 题意:给你n个数,找出几个数,使他们的和是n的倍数:有多少数组成 ,输出哪几个数 题解:鸽巢原理.(1)当前n项和对n取模为0 输出前n个 ...

  2. POJ 2356 Find a multiple 神题 传说中的经典.

    题目 Description The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each ...

  3. POJ 2356 Find a multiple (抽屉原理)

    感觉这个题很不错,至少开始真的没想道可以用抽屉原理推出一个结论,然后把这题秒掉.... 已知有n个元素,sum[i]表示从1到i所有数的和...sum[i]%n可以得到一个剩余系,如果出现0,那么结果 ...

  4. poj 1426 Find The Multiple (简单搜索dfs)

    题目: Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal ...

  5. POJ 1426 Find The Multiple

    解题思路: 1)每5位为一个基数,枚举5位所有只包含0,1的数ans[],map[i][j]保存(ans[j]*100000^i)%n的值 2)BFS计算所有组合出现的模,直到出现0 代码 #incl ...

  6. POJ 2356 (抽屉原理)

    题目中说:随便输出一组.抽屉原理可以求出取出的数连续的情况. #include <iostream> #include<cstdio> using namespace std; ...

  7. POJ 1426 Find The Multiple BFS

    没什么好说的 从1开始进行广搜,因为只能包涵0和1,所以下一次需要搜索的值为next=now*10 和 next=now*10+1,每次判断一下就可以了,但是我一直不太明白我的代码为什么C++提交会错 ...

  8. 翻译D26(附AC码 POJ 24:Divisor and Multiple)

    " Ctrl AC!一起 AC!" 原题: Divisor and Multipley 我的翻译: 描述 给定D和M.D是A和B的除数,M是A和B的倍数.求A和B. 输入 两个正整 ...

  9. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  10. POJ 动态规划题目列表

    1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号: 容易:  1018, 1050 ...

最新文章

  1. 近期活动盘点:AI Time:论道AI安全与伦理、大数据、AI在中国金融保险业的应用案例分享讲座...
  2. 基于senparc实现的微信AccessToken接口全局统一获取
  3. 8-[多线程] 进程池线程池
  4. Flowable 数据库表结构 ACT_ID_USER
  5. Windows服务器学习篇:服务器连接与退出
  6. Hive常见的存储格式文件比较
  7. python 循环语句结果存储_Hello,Python!小鲸教你学Python(八)条件语句和循环
  8. WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba
  9. adt变频器故障代码ol2_误诊实例换来的变频器维修经验
  10. jquery 跨域_springboot解决js前端跨域问题,javascript跨域问题解决
  11. 作为一个linux系统运维师必须掌握的定期任务执行命令cront
  12. SSAO + FXAA
  13. pytorch求范数函数——torch.norm
  14. [评价体系] 2、层次分析法AHP原理、例题
  15. 佛系程序员之歌 - 和我一起减减压
  16. 区块链骇客第二讲: 自毁攻击
  17. Flash 0day漏洞(CVE-2018-5002)千万不要乱打开Excel文档!
  18. 概率论-小记录(矩估计)
  19. 教你如何提高网站排名
  20. MIT计算机科学录取分数线,美国麻省理工学院分数线 美国麻省理工学院录取要求...

热门文章

  1. 独家 | 全球 AI 量化金融机构全景图(附完整分析)
  2. HPC+AI融合发展的挑战和应对方法探讨
  3. 气候遇上AI:从此天有可测风云
  4. 又一次全球第一!| 凌云时刻
  5. 聚焦开源技术 第八届开源云黑客松活动举办在即
  6. 【语音采集】基于matlab语音采集及处理【含Matlab源码 1737期】
  7. 新手坐高铁怎么找车厢_坐动车怎么找车厢
  8. python函数式编程模式_Python 函数式编程
  9. 抖音自动清关注服务器,各位有保留抖音自动关注的代码吗
  10. java new char 初始化_java考试复习