POJ 2356 && POJ 3370 鸽巢原理
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的倍数
#include <cstdio>
#include <cstring> using namespace std;
const int N = ; bool vis[N];
int sum[N] , a[N] , pos[N]; int main()
{
// freopen("a.in" , "r" , stdin);
int n;
while(scanf("%d" , &n) != EOF)
{
for(int i= ; i<=n ; i++){
scanf("%d" , a+i);
}
memset(vis , , sizeof(vis));
vis[] = , pos[] = ;
for(int i= ; i<=n ; i++){
sum[i] = (sum[i-]+a[i])%n;
if(vis[sum[i]]){
int l = pos[sum[i]];
printf("%d\n" , i-l);
for(int j = l+ ; j<=i ; j++){
printf("%d\n" , a[j]);
}
break;
}
pos[sum[i]] = i;
vis[sum[i]] = ;
}
}
return ;
}
POJ3370:
#include <cstdio>
#include <cstring> using namespace std;
#define N 100005
bool vis[N];
int sum[N] , a[N] , pos[N]; int main()
{
// freopen("a.in" , "r" , stdin);
int c , n;
while(scanf("%d%d" , &c , &n) , c||n)
{
for(int i= ; i<=n ; i++)
scanf("%d" , a+i);
memset(vis , ,sizeof(vis));
sum[] = , vis[] = , pos[] = ;
for(int i= ; i<=n ; i++){
sum[i] = (sum[i-] + a[i])%c;
if(vis[sum[i]]){
int l = pos[sum[i]];
for(int j=l+ ; j<=i ; j++){
if(j == l+) printf("%d" , j);
else printf(" %d" , j);
}
printf("\n");
break;
}
vis[sum[i]] = ;
pos[sum[i]] = i;
}
}
return ;
}
POJ 2356 && POJ 3370 鸽巢原理的更多相关文章
- Find a multiple POJ - 2356 容斥原理(鸠巢原理)
1 /* 2 这道题用到了鸠巢原理又名容斥原理,我的参考链接:https://blog.csdn.net/guoyangfan_/article/details/102559097 3 4 题意: 5 ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 3370 Halloween treats( 鸽巢原理简单题 )
链接:传送门 题意:万圣节到了,有 c 个小朋友向 n 个住户要糖果,根据以往的经验,第i个住户会给他们a[ i ]颗糖果,但是为了和谐起见,小朋友们决定要来的糖果要能平分,所以他们只会选择一部分住户 ...
- poj 2356 Find a multiple(鸽巢原理)
Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...
- POJ 3370 Halloween treats 鸽巢原理 解题
Halloween treats 和POJ2356差点儿相同. 事实上这种数列能够有非常多,也能够有不连续的,只是利用鸽巢原理就是方便找到了连续的数列.并且有这种数列也必然能够找到. #include ...
- poj Find a multiple【鸽巢原理】
参考:https://www.cnblogs.com/ACShiryu/archive/2011/08/09/poj2356.html 鸽巢原理??? 其实不用map但是习惯了就打的map 以下C-c ...
- POJ3370&HDU1808 Halloween treats【鸽巢原理】
题目链接: id=3370">http://poj.org/problem?id=3370 http://acm.hdu.edu.cn/showproblem.php?pid=1808 ...
- cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
随机推荐
- E20170611-hm
ascending adj. 上升的,向上的; ascend vt. 攀登; 继承; 占领; vi. 上升; 爬坡; 追溯; descending n. 递减; descend v ...
- bzoj 1673: [Usaco2005 Dec]Scales 天平【dfs】
真是神奇 根据斐波那契数列,这个a[i]<=c的最大的i<=45,所以直接搜索即可 #include<iostream> #include<cstdio> usin ...
- magento getUrl函数跳转admin模块问题
在用以下代码时,跳转后的url里面会是空的,即没有admin这个值 $this->getUrl('admin/catalog_product/edit', array('id' => $c ...
- ftp获取mysql数据库方法
我说的这种情况是针对mysql数据库的,首先下载一个mysql通过ftp放到站点里面,然后通过配置文件找到数据库的名字和密码,然后通过浏览器访问数据库,直接在域名后面加上下载的mysql文件的名字就可 ...
- 创建对象——单例(Singleton)模式
单例(Singleton)模式: 保证一个类在系统里只能有一个对象被实例化. 如:缓存池.数据库连接池.线程池.一些应用服务实例等. 难点:在多线程环境中,保证实例的唯一性. ...
- div常用效果方法-transform
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 《CSS世界》学习笔记(一)
<CSS世界>,张鑫旭著,人民邮电出版社,2017年12月第一版. 1.P9二维码链接文章的demo值得一看,可以实现有关“某些区域颜色始终保持一致”的效果. P9二维码所链接文章的一个d ...
- Atmel studio 7.0 安装成功
Atmel studio 7.0 安装成功 转载: http://www.eeworld.com.cn/mcu/article_2017112436241.html 2018-07-2610:27 ...
- LR接口测试---Java Vuser之增删改查
import lrapi.lr; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...
- Java图片上查找图片算法
之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就是在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找 ...