[洛谷P1062/NOIP2006普及组] 数列
首先题面是这样的:
给定一个正整数 k(3≤k≤15) ,把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当 k=3 时,这个序列是:
1,3,4,9,10,12,13,…
因为所有的底数k都是相同的,所以自然要想到把他们的指数分离出来~~。
例如这样
然后把指数分离出来:
0,1,0+1,2,0+2,1+2,0+1+2,3....
这时候看可能没什么头绪,但是再看一遍题目,你会发现题目中强调了两个字qwq——————— 递增。也就是说我们在确定第n项时,要从之前确定的n-1项中选出一项:
大于第n-1项但是小于目前能生成的任意一项,所以很容易想到:每确立一个数,就从数列的第一项开始逐个加上这一项,就造成了递增的效果。
但是这样做还有很大的缺陷,因为在前n-1项中,难免会有重复的项,举个最简单的例子:
0,1,0+1,2,0+2,1+2;
如果确立了第三项(0+1)的时候,对前面2项进行加法操作,明显会造成重复,并且不符合题目要求(递增和互不相等的方幂)。
那么这个算法就要进行改进。
在这里定义一下:
单独数:就是不是由加法操作得到的数(k的n次方那种qwq)
合成数:由单独数+合成数或由合成数+合成数组成的数
所以对于每一个合成数都有单独数的参与,我们想,可不可以先预处理出k的1-n次方,显然一个快速幂就可以了,那么再想想,如果每读入到一个单独数,就可以用这个单独数按照刚才的方式来得到后面的n-1项。
经过验证显然是可以的。
如样例:k=3,n=100时:
用f[i]代表第i项,有:
令v=每一个单独数f[i]
f[++i]=k(1 to n) v+f[k]
至此这个题目的分析就好了.....
下面是代码~
#include<bits/stdc++.h>
#define re register
#define ull unsigned long long
using namespace std;
int k,n,p;
ull a[1000],f[2000000];
inline int read() //读入优化
{
int k=1;
int sum=0;
char c=getchar();
for(;'0'>c || c>'9';c=getchar())
if(c == '-') k = -1;
for(; '0' <= c && c <= '9'; c = getchar())
sum = sum * 10 + c - '0';
return sum * k;
}
inline void out(int x) //输出优化
{
if(x < 0) { putchar('-'); x *= -1; }
if(x > 9) out(x / 10);
putchar(x % 10 + '0');
}
inline ull quick_pow(int r,int k) //快速幂
{
ull base=r,ans=1;
while(k!=0)
{
if(k&1) ans=ans*base;
base=base*base;
k/=2;
}
return ans;
}
int main()
{
//freopen("sequence.in","r",stdin);
//freopen("sequence.out","w",stdout);
k=read();n=read();
a[0]=1;a[1]=k;
for(re int i=2;i<=n;i++) a[i]=quick_pow(k,i); //预处理k的1-n(保险) 次幂
for(re int i=1;i<=n;i++)
{
f[i]=a[p];p++; //对于每一个单独数的赋值
ull tmp=f[i]; //记录v值(单独数)
int h=i; //确立i-1项(避免后来i的更新)
if(i>1)
{
for(re int j=1;j<h;j++)
{
f[++i]=tmp+f[j];
if(i>=n)
{
cout<<f[n]; //输出
return 0;
}
}
}
}
out(f[n]);
return 0;
}
[洛谷P1062/NOIP2006普及组] 数列的更多相关文章
- 洛谷 1062 NOIP2006普及T4 数列
[题解] 鲜活的水题..我们把数列换成k进制的,发现数列是001,010,011,100,101,110,111...,而第m项用k进制表示的01串刚好就是m的二进制的01串.于是我们预处理k的幂,把 ...
- 动态规划 洛谷P1048 [NOIP2005 普及组] 采药
洛谷P1048 [NOIP2005 普及组] 采药 洛谷的一个谱架-的题目,考的是01背包问题,接下来分享一下我的题解代码. AC通过图: 我的代码: 1 //动态规划 洛谷P1048 [NOIP20 ...
- 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截
先给出例题:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大佬题解:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 ...
- 洛谷 P1045 & [NOIP2003普及组] 麦森数
题目链接 https://www.luogu.org/problemnew/show/P1045 题目大意 本题目的主要意思就是给定一个p,求2p-1的位数和后500位数. 解题思路 首先看一下数据范 ...
- 洛谷P1077 [NOIP2012普及组]摆花 [2017年四月计划 动态规划14]
P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能 ...
- 洛谷——P1980 [NOIP2013 普及组] 计数问题
题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2, ...
- noip-2006普及组-数列- 【模拟-找规律-快速幂】
链接:https://ac.nowcoder.com/acm/contest/153/1047 来源:牛客网 题目描述 给定一个正整数k( ≤ k ≤ ),把所有k的方幂及所有有限个互不相等的k的方幂 ...
- 洛谷 1067 NOIP2009 普及组 多项式输出
[题解] 一道简单的模拟题.需要判一些特殊情况:第一项的正号不用输出,x的一次项不用输出指数,系数为0的项不用输出等等,稍微细心一下就好. #include<cstdio> #includ ...
- [洛谷P1095]NOIP2007 普及组T3 守望者的逃离
问题描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...
随机推荐
- Spring+Mybatis整合的练手小项目(一)项目部署
声明:教程是网上找的,代码是自己敲的 项目目录大致如下: 1. 首先创建Maven工程,在pom.xml中加入项目所需依赖: <?xml version="1.0" enco ...
- 基于LeNet的手写汉字识别(caffe)
我假设已经成功编译caffe,如果没有,请参考http://caffe.berkeleyvision.org/installation.html 在本教程中,我假设你的caffe安装目录是CAFFE_ ...
- Go微服务容错与韧性(Service Resilience)
Service Resilience是指当服务的的运行环境出现了问题,例如网络故障或服务过载或某些微服务宕机的情况下,程序仍能够提供部分或大部分服务,这时我们就说服务的韧性很强.它是微服务中很重要的一 ...
- CentOS 8 正式发布
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net] 本文地址:https://www.oschina.net/news/110111/centos-8-re ...
- 打印方案之web打印
前言: 前一段时间在工作中,遇到需要通过打印实现对报表或者工作流清单等事情时,都需要运用到打印功能,那么 ,这个时候你会怎么处理? 在这里,我们可以通过最简单的方式实现web打印功能,简单易懂,方便快 ...
- 极光推送消息——Alias别称方式(Andirod)
1.pom文件引入相关jar包 <!--极光推送消息start--> <dependency> <groupId>net.sf.json-lib</group ...
- 报表统计——java实现查询某年12个月数据,没数据补0
一般图表绘制例如echarts等,返回数据格式都大同小异.重点是利用sql或者java实现数据格式的转型,接下来是关键部分: 1.mapper层sql语句,返回统计好的月份与对应月份的数据. < ...
- C语言I—2019秋作业02
1.[新增内容] 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 <C语言I-2019秋作业02> 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 <实现一些基 ...
- 深入了解String,StringBuffer和StringBuilder三个类的异同
Java提供了三个类,用于处理字符串,分别是String.StringBuffer和StringBuilder.其中StringBuilder是jdk1.5才引入的. 这三个类有什么区别呢?他们的使用 ...
- Kubernetes 系列(六):持久化存储 PV与PVC
在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同 ...