poj_2739 尺取法
题目大意
给定一个数字N,N可能由1个或多个连续的素数求和得到,比如41 = 2+3+5+7+11+13, 41 = 11+13+17, 41 = 41。求出对于N,所有可能的组合形式。
题目分析
先求出所有可能构成加数的素数,使用埃氏筛选法。然后求出所有的可能形式,由于所选择的是一个连续的区间,可以使用一个头指针,一个尾指针,区间选择为头尾指针内部的区域,通过头尾指针的移动来更改区间。即尺取法。
尾部保持不动,不断增加头部,并加上头部数据,记录区间内的和,若恰好等于n,则计数加1,若大于等于n,则不断的减去尾部的数据....
实现(c++)
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
bool is_primes[10005];
int primes[10005];
int prime_count;
//埃氏筛法 求质数
void GetPrimes(int n){
int k = 0;
memset(is_primes, true, sizeof(is_primes));
for (int i = 2; i <= n; i++){
if (!is_primes[i])
continue;
primes[k++] = i;
for (int m = 1; m*i <= n; m++)
is_primes[m*i] = false;
}
prime_count = k;
}
int main(){
int n;
GetPrimes(10000); //获得10000 以内的所有质数 while (scanf("%d", &n) && n){
int sum = 0;
int s = 0, t = 0;
int count = 0;
//尺取法
for (;;){
while (primes[t] <= n && sum < n){ //若小于n则头部一直增加,直到大于等于n
sum += primes[t++];
}
if (sum == n) //计数
count++; sum -= primes[s++]; //减去头部 if (sum <= 0) //说明尾部一直没有增加,且头部赶上了尾部,结束
break;
}
printf("%d\n", count);
}
return 0;
}
poj_2739 尺取法的更多相关文章
- 5806 NanoApe Loves Sequence Ⅱ(尺取法)
传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K ...
- POJ3061 尺取法
题目大意:从给定序列里找出区间和大于等于S的最小区间的长度. 前阵子在zzuli OJ上见过类似的题,还好当时补题了.尺取法O(n) 的复杂度过掉的.尺取法:从头遍历,如果不满足条件,则将尺子尾 部增 ...
- POJ 2739 Sum of Consecutive Prime Numbers(尺取法)
题目链接: 传送门 Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Description S ...
- CF 701C They Are Everywhere(尺取法)
题目链接: 传送门 They Are Everywhere time limit per test:2 second memory limit per test:256 megabytes D ...
- nyoj133_子序列_离散化_尺取法
子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给定一个序列,请你求出该序列的一个连续的子序列,使原串中出现的所有元素皆在该子序列中出现过至少1次. 如2 8 ...
- Codeforces 676C Vasya and String(尺取法)
题目大概说给一个由a和b组成的字符串,最多能改变其中的k个字符,问通过改变能得到的最长连续且相同的字符串是多长. 用尺取法,改变成a和改变成b分别做一次:双指针i和j,j不停++,然后如果遇到需要改变 ...
- POJ 3061 (二分+前缀和or尺取法)
题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...
- POJ 3320 尺取法,Hash,map标记
1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...
- HDU 5358 尺取法+枚举
题意:给一个数列,按如下公式求和. 分析:场上做的时候,傻傻以为是线段树,也没想出题者为啥出log2,就是S(i,j) 的二进制表示的位数.只能说我做题依旧太死板,让求和就按规矩求和,多考虑一下就能发 ...
随机推荐
- 【C#】获取桌面分辨率宽高(是否包含任务栏)
原文转自:http://120.77.66.71/blog/?p=176 在使用WPF进行桌面APP开发时,通常需要用到屏幕分辨率以及屏幕的宽高进行界面的自适应显示. C#中,类SystemParam ...
- 【WPF】获取下拉列表(ComboBox)的选项(ComboBoxItem)的内容
需求:给下拉列表ComboBox注册一个选项改变时触发的事件,想要获取到当前选中的选项的内容. // 给ComboBox注册一个选项改变的事件 myComboxBox.SelectionChanged ...
- 关于Java的Properties类
Properties类 先来学习下Properties类吧. Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. ...
- Extjs Toolbar 当做弹出菜单
menuAlign: 'tl-tr', listeners: { mouseover: function(btn) { btn.toolb.showBy(btn,btn.menuAlign); } } ...
- Win10系统设置专用网络和公用网络
打开设置界面或者按Win+I组合键打开设置界面,打开后点击“网络和Internet”; 在网络和Internet界面,点击左侧“拔号”(有些是以太网),在右侧窗口点击“宽带连接”(大家基本都是以太网连 ...
- [转]RabbitMQ,ActiveMQ,ZeroMQ,Kafka之间的比较与资料汇总
MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...
- 【转】Mac下升级python2.7到python3.6
1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...
- 远程桌面能连接到服务器,但PING不通
解决方法:
- C++函数的高级特性
对比于 C 语言的函数,C++增加了重载(overloaded).内联(inline).const 和 virtual 四种新机制.其中重载和内联机制既可用于全局函数也可用于类的成员函数,const ...
- C++ 类 & 对象
C++ 类 & 对象C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型. 类用于指定对象的形式,它包含了数据表示法 ...