51nod 1103 N的倍数 思路:抽屉原理+前缀和
题目:
这是一道很神奇的题目,做法非常巧妙。巧妙在题目要求n个数字,而且正好要求和为n的倍数。
思路:用sum[i]表示前i个数字的和%n。得到sum[ 1-N ]共N个数字。
N个数字对N取模,每个数字都在0-( N-1 )之间。
可能出现两种情况 1:有一个数字等于0。(都不相等) 2:至少有两个数字相等。
1.如果sum数组中有一个数字sum[i]=0,说明前i个数字的和为N的倍数。
2.如果sum[i]==sum[j],说明第i-( j-1 )或者( i+1 )-j的和为N的倍数。
只有1、2两种情况,不用考虑无解的情况。
#include <bits\stdc++.h> using namespace std;int a[50005]; int visit[50005]; //visit[sum%n] != 0 说明有一个前缀和相等的,visit[sum%n]即为索引。 int main(){int n; cin >> n;for(int i = 1;i <= n; i++){cin >> a[i];}long long sum = 0; //前缀和 for(int i = 1;i <= n; i++){sum = (sum + a[i])%n; //前缀和%n if(sum != 0 && visit[sum] == 0){ visit[sum] = i; // 不等于0并且没有出现过,存在visit中 }else{//等于0或者有相等的,开始输出结果,并结束程序 cout << i-visit[sum] << endl;for(int j = visit[sum]+1 ;j <= i; j++){ // cout <<"j:"<<j<<" "<< a[j] << " ";cout << a[j] << endl;}break;}}return 0; } //writed by zhangjiuding
51nod 1103 N的倍数 思路:抽屉原理+前缀和相关推荐
- N的倍数(抽屉原理)
一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数. Input ...
- 抽屉原理(鸽巢原理)
一.抽屉原理初介绍: 桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果.这一现象就是我们所说的"抽屉原理". 抽屉原理的一般含 ...
- 抽屉原理及其例题应用介绍
转载自这位大佬!!! 抽屉原理(鸽巢原理)--一定要多做题 介绍一下抽屉原理,又名鸽巢原理,反正它的名字好多的,自己百度吧(ฅ>ω<ฅ)* 由于下面给大家的锻炼思维的题目比较多,想看代码的 ...
- 【51Nod - 1103】N的倍数 (思维,鸽巢原理也叫抽屉定理,求倍数问题取模)
题干: 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数. I ...
- poj2356(抽屉原理)
题意:从输入的N个元素中找出是N的倍数的元素并且输出: 因为这个要求的是连续的数之和,先用sum数组求和:sum[1],sum[1]+sum[2],--,sum[1]+sum[2]+--+sum[n] ...
- 牛客算法周周练2 B Music Problem(DP,抽屉原理,二进制拆分)
链接:https://ac.nowcoder.com/acm/contest/5203/B 来源:牛客网 题目描述 Listening to the music is relax, but for o ...
- 鸽巢原理(抽屉原理)的详解
抽屉原理 百科名片 桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面放两个苹果.这一现象就是我们所说的"抽屉原理". 抽屉原理的一般含义为: ...
- hdu 3303(线段树+抽屉原理)
解题思路:这题利用了抽屉原理,即1-M之间的所有数与M+1的模都不相同.那么可以利用它将要查找所有区间分成[1,Y-1],[Y,2*Y-1],[2*Y,3*Y-1].........一直下去,直到所有 ...
- 抽屉远离在计算机的应用,抽屉原理的应用及其推广优秀毕业论文
抽屉原理的应用及其推广优秀毕业论文 抽屉原理的应用及其推广 数学与计算机科学学院 数学与应用数学 指导老师: 王美能 摘要:抽屉原理也叫鸽巢原理,是研究如何将元素分类的一个原理,也是组合数学里最简单. ...
最新文章
- Visual Studio 2013开发 mini-filter driver step by step 获取可执行文件名称 - 实现process monitor的一个功能 (10)
- python第三方插件登录网易音乐_python3-使用requests模拟登录网易云音乐
- 四象限法推导lm曲线_IS曲线推导
- 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案
- 2021高考达州二诊成绩查询,2021二诊成绩怎样换算高考分 分数相差多少
- Linux 边角料(一)—— ./ 的含义
- Java知识点总结(JavaIO-File类)
- NB-IOT物联网模块BC26问题合集
- JAVA编程语言基础第六章
- 为什么选择WordPress作为企业CMS?
- Clouda安装和使用过程详解
- pytorch 入门教程 常用知识整理
- php apply filters,apply_filters()应用过滤器
- Linux监控服务之zabbix
- zabbix3.4接入微信报警
- vtkPropPicker拾取功能
- 什么是lims系统,lims(实验室管理系统)
- 安装docker与docker镜像和容器基本的基本操作
- 学习倍福BECKHOFF PLC可利用的资源
- 数字IP和iP的转化
热门文章
- Java黑皮书课后题第9章:9.1 (Rectangle类)遵照9.2节中Circle类的例子,设计一个名为Rectangle的类表示矩形
- C语言学习之分别用while、 for双重循环的方式编程绘制如下图形
- 中文手机评论情感分类系列(一)
- Python 批量处理特定格式文件
- 配置 docker0 网桥
- TeeChart中 Line的Clear方法
- 第二轮冲刺-Runner站立会议03
- MySql连接——内连接、外连接(左连接、右连接、全连接)
- 来首都初次就医的感受
- asp.net出现:当前标识(NT AUTHORITY\NETWORK SERVICE)没有对' '的写访问权限。