POJ 2356:

题目大意:

给定n个数,希望在这n个数中找到一些数的和是n的倍数,输出任意一种数的序列,找不到则输出0

这里首先要确定这道题的解是必然存在的

利用一个 sum[i]保存前 i 个数的和对n的取模

sum[0] = 0;

那么sum[0] ~ sum[n]有n+1个数据,这些数据的范围都是 0~n , 要是存在 sum[i] = 0,那么输出前 i 个数据即可

要是不存在那根据鸽巢原理可以说明必然能找到一个 sum[i] = sum[j]  ,那么说明 (sum[i+1] + sum[i+2] ...+sum[j])%n = 0的,把这j-i个数输出即可

那么说明我们总是能找到一段连续的数据使其和是n的倍数

  1. #include <cstdio>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5. const int N = ;
  6.  
  7. bool vis[N];
  8. int sum[N] , a[N] , pos[N];
  9.  
  10. int main()
  11. {
  12. // freopen("a.in" , "r" , stdin);
  13. int n;
  14. while(scanf("%d" , &n) != EOF)
  15. {
  16. for(int i= ; i<=n ; i++){
  17. scanf("%d" , a+i);
  18. }
  19. memset(vis , , sizeof(vis));
  20. vis[] = , pos[] = ;
  21. for(int i= ; i<=n ; i++){
  22. sum[i] = (sum[i-]+a[i])%n;
  23. if(vis[sum[i]]){
  24. int l = pos[sum[i]];
  25. printf("%d\n" , i-l);
  26. for(int j = l+ ; j<=i ; j++){
  27. printf("%d\n" , a[j]);
  28. }
  29. break;
  30. }
  31. pos[sum[i]] = i;
  32. vis[sum[i]] = ;
  33. }
  34. }
  35. return ;
  36. }

POJ3370:

  1. #include <cstdio>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5. #define N 100005
  6. bool vis[N];
  7. int sum[N] , a[N] , pos[N];
  8.  
  9. int main()
  10. {
  11. // freopen("a.in" , "r" , stdin);
  12. int c , n;
  13. while(scanf("%d%d" , &c , &n) , c||n)
  14. {
  15. for(int i= ; i<=n ; i++)
  16. scanf("%d" , a+i);
  17. memset(vis , ,sizeof(vis));
  18. sum[] = , vis[] = , pos[] = ;
  19. for(int i= ; i<=n ; i++){
  20. sum[i] = (sum[i-] + a[i])%c;
  21. if(vis[sum[i]]){
  22. int l = pos[sum[i]];
  23. for(int j=l+ ; j<=i ; j++){
  24. if(j == l+) printf("%d" , j);
  25. else printf(" %d" , j);
  26. }
  27. printf("\n");
  28. break;
  29. }
  30. vis[sum[i]] = ;
  31. pos[sum[i]] = i;
  32. }
  33. }
  34. return ;
  35. }

POJ 2356 && POJ 3370 鸽巢原理的更多相关文章

  1. Find a multiple POJ - 2356 容斥原理(鸠巢原理)

    1 /* 2 这道题用到了鸠巢原理又名容斥原理,我的参考链接:https://blog.csdn.net/guoyangfan_/article/details/102559097 3 4 题意: 5 ...

  2. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  3. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  4. POJ 3370 Halloween treats( 鸽巢原理简单题 )

    链接:传送门 题意:万圣节到了,有 c 个小朋友向 n 个住户要糖果,根据以往的经验,第i个住户会给他们a[ i ]颗糖果,但是为了和谐起见,小朋友们决定要来的糖果要能平分,所以他们只会选择一部分住户 ...

  5. poj 2356 Find a multiple(鸽巢原理)

    Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...

  6. POJ 3370 Halloween treats 鸽巢原理 解题

    Halloween treats 和POJ2356差点儿相同. 事实上这种数列能够有非常多,也能够有不连续的,只是利用鸽巢原理就是方便找到了连续的数列.并且有这种数列也必然能够找到. #include ...

  7. poj Find a multiple【鸽巢原理】

    参考:https://www.cnblogs.com/ACShiryu/archive/2011/08/09/poj2356.html 鸽巢原理??? 其实不用map但是习惯了就打的map 以下C-c ...

  8. POJ3370&amp;HDU1808 Halloween treats【鸽巢原理】

    题目链接: id=3370">http://poj.org/problem?id=3370 http://acm.hdu.edu.cn/showproblem.php?pid=1808 ...

  9. cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

随机推荐

  1. poj 1180:Batch Scheduling【斜率优化dp】

    我会斜率优化了!这篇讲的超级棒https://blog.csdn.net/shiyongyang/article/details/78299894?readlog 首先列个n方递推,设sf是f的前缀和 ...

  2. AutoCAD C# 利用反射导出所注册的命令

    主函数导出某一程序集AutoCAD 注册命令 /// <summary> ///提取所有的命令 /// </summary> /// <param name=" ...

  3. 基于.Net Core的API框架的搭建(3)

    5.加入缓存支持 我们希望为项目增加缓存支持,我们选择Redis做为缓存数据库. 首先,我们在Services目录增加一个缓存接口类ICacheService: using System; using ...

  4. Linux环境下修改MySQL数据库存储引擎

    今天在执行Oracle数据库迁移至MySQL数据库时报出了一个错误信息: Specified key was too bytes 百度发现,原来需要更改MySQL数据库的存储引擎为InnoDB,查询目 ...

  5. Python Turtle绘图

    1. 画布(canvas) 画布就是turtle为我们展开用于绘图区域, 我们可以设置它的大小和初始位置 1.1 设置画布大小 turtle.screensize(canvwidth=None, ca ...

  6. Kali Linux的介绍

    Kali Linux是什么? Kali Linux是一个渗透测试平台兼安全审计平台,它集成了多款漏洞检测.目标识别和漏洞利用工具. Kali Linux是专门用于渗透测试的Linux操作系统:基于De ...

  7. LN : leetcode 406 Queue Reconstruction by Height

    lc 406 Queue Reconstruction by Height 406 Queue Reconstruction by Height Suppose you have a random l ...

  8. Objective-C设计模式——单例Singleton(对象创建)

    单例 和其它语言的单例产不多,可以说是最简单的一种设计模式了.但是有几个点需要注意下,单例就是一个类只有一个实例. 所以我们要想办法阻止该类产生别的实例,一般语言中都会将构造函数写为private.但 ...

  9. Debug技巧(1)

    首先声明,以下有些是自己遇到的问题自己解决了,其它里面包括了网上看到的Debug经验和书里看到的经验,时间问题就不一一说明,如有侵权,私信我进行删除,我会道歉.我写这个的本意是记录我学习中遇到的问题, ...

  10. IPython、Notebook、qtconsole使用教程

    IPython.Notebook.qtconsole使用教程 上一篇为Python,IPython,qtconsole,Notebook,Jupyter快速安装教程 1. 使用IPython 自动补全 ...