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[];
int visit[]; //visit[sum%n] != 0 说明有一个前缀和相等的,visit[sum%n]即为索引。
int main(){
int n;
cin >> n;
for(int i = ;i <= n; i++){
cin >> a[i];
} long long sum = ; //前缀和
for(int i = ;i <= n; i++){
sum = (sum + a[i])%n; //前缀和%n
if(sum != && visit[sum] == ){
visit[sum] = i; // 不等于0并且没有出现过,存在visit中
}else{
//等于0或者有相等的,开始输出结果,并结束程序
cout << i-visit[sum] << endl;
for(int j = visit[sum]+ ;j <= i; j++){
// cout <<"j:"<<j<<" "<< a[j] << " ";
cout << a[j] << endl;
}
break;
}
}
return ;
}
//writed by zhangjiuding
51nod 1103 N的倍数 思路:抽屉原理+前缀和的更多相关文章
- 51nod 1103 N的倍数(抽屉原理)
1103 N的倍数 题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍 ...
- 51nod 1103 N的倍数 (鸽巢原理)
1103 N的倍数 题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为N的数组A,从A中选出若干个数,使得这 ...
- 51nod 1103 N的倍数
1103 N的倍数 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8, ...
- AC日记——N的倍数 51nod 1103
1103 N的倍数 思路: 先计算出前缀和: 然后都%n: 因为有n个数,所以如果没有sum[i]%n==0的化,一定有两个取模后的sum相等: 输出两个sum中间的数就好: 来,上代码: #incl ...
- 51nod 1103:N的倍数 抽屉原理
1103 N的倍数 题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个长度为N的数组A,从A中选出若干个数,使得这 ...
- 51nod1103(抽屉原理)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1103 题意:中文题诶- 思路:抽屉原理 对于两个数a, b, ...
- poj2356 Find a multiple(抽屉原理|鸽巢原理)
/* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...
- poj 2356 (抽屉原理)
题目链接:http://poj.org/problem?id=2356 题目大意:给你n个数,要你从n个数选出若干个数,要求这若干个数的和是n的倍数,输出选择数的个数,以及相应的数. 解题思路: 以下 ...
- HDU 1808 Halloween treats(抽屉原理)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=1808 Problem Description Every year there is the same ...
随机推荐
- 数据结构之B进制(确定进制)
#include <cstdio> int max_num(int n) { int max=0; while(n) { int k=n%10; if(k>max) max=k; n ...
- Android滑动控件.md
1.概述 最近写代码临时加了个功能主要是滑动选择的功能效果图如下: 2.代码 这里主要是用属性动画做的 <ImageButton android:id="@+id/fab" ...
- centos 7 mariadb 启动问题
安装完了 mariadb 后 有一天重启机器发现 启动不了 mariadb.service systemctl start mariadb.service //然后发现下面的问题 job for ma ...
- python3 安装及项目管理安装
python3 一.下载安装 地址:https://www.python.org/downloads/ 安装:傻瓜式安装:我的目录如下 二.环境配置 [右键计算机]-->[属性]-->[高 ...
- py2 HTMLTestRunner报告
直接上代码吧. #coding:utf-8 #__author__ = 'carry' import unittest,HTMLTestRunner class Hello(unittest.Test ...
- ThinkPhp5源码剖析之Cache
为什么需要Cache(缓存)? 假设现在有一个小说网,有非常多的读者,有一篇新的章节更新了,那么可能一分钟内有几万几十万的访问量. 如果没有缓存,同样的内容就要去数据库重复查询,那可能网站一下就挂掉了 ...
- Apache2 httpd.conf 配置详解(一)
常用配置指令说明 ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录.默认为安装目录,不需更改. 语法:ServerRoot di ...
- Centos 6系统修复grub
author:JevonWei 版权声明:原创作品 错误界面如下时,应该是grub的stage数据有缺失,应该从新安装grub GRUB引导的stage1阶段损坏,系统启动会直接进入光盘引导界面,st ...
- Windows下Docker承载ASP.NET Core 应用
基本配置: Win7 64系统,Docker Toolbox, 主要步骤: [1]发布ASP.NET Core MVC应用,CD到项目根目录,执行dontnet publish [2]新建一个Dock ...
- eclipse如何把多个项目用不同的文件夹分隔开
我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...