题目大意:列出从一个给定上界的双平方数集合中选出若干个数,组成长度为 N 的等差数列的首项和公差。

题解:首先,因为是在双平方数集合上的等差数列,而且根据题目范围可知,上界不超过 2e5,可以先打表,将符合条件的双平方数存入一个数组,并排序离散化。在等差数列中,只要数列中的前两项确定,整个数列就会被确定下来。因此,考虑枚举序列的前两项,至此时间按复杂度为 \(O(cnt^2)\)。接着,若直接枚举后面的项来判断是否长度可以到达 N 的话,时间复杂度还要多一个 cnt 的乘积因子,难以承受。其实,在枚举的过程中,产生了大量的无效结果,最后才判断导致时间复杂度暴增,同时根据双平方数集合不大,可以直接用桶来装,因此,可以直接枚举 N,每次判断数列的下一项是不是在双平方数集合中即可,时间复杂度为 \(O(cnt^2*N)\)。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=150000; int n,m,c[maxn],cnt;
bool in[maxn];
struct node{
int a,d;
}ans[maxn];
int tot; bool cmp(const node& x,const node& y){
if(x.d^y.d)return x.d<y.d;
return x.a<y.a;
} void read_and_parse(){
scanf("%d%d",&n,&m);
for(int i=0;i<=m;i++)
for(int j=0;j<=m;j++)
c[++cnt]=i*i+j*j,in[c[cnt]]=1;
sort(c+1,c+cnt+1);
cnt=unique(c+1,c+cnt+1)-c-1;
} void solve(){
for(int i=1;i<=cnt-n+1;i++)
for(int j=i+1;j<=cnt-n+2;j++){
int d=c[j]-c[i],len=2,now=c[j],flag=1;
if(c[i]+(n-1)*d>c[cnt])break;
while(len<n){
++len,now+=d;
if(!in[now]){flag=0;break;}
}
if(flag)ans[++tot]=node{c[i],d};
}
if(!tot)puts("NONE");
else{
sort(ans+1,ans+tot+1,cmp);
for(int i=1;i<=tot;i++)printf("%d %d\n",ans[i].a,ans[i].d);
}
} int main(){
read_and_parse();
solve();
return 0;
}

【洛谷P1214】等差数列的更多相关文章

  1. 洛谷 P1214 等差数列

    https://www.luogu.org/problemnew/show/P1214 首先暴力枚举可以凑出来的数,对于每个数进行标记. 对于每一个等差数列,当我们知道前两个数后即可以得出整个序列,那 ...

  2. 洛谷P1214 [USACO1.4]等差数列 Arithmetic Progressions

    P1214 [USACO1.4]等差数列 Arithmetic Progressions• o 156通过o 463提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题 ...

  3. 洛谷 P4559: bzoj 5319: [JSOI2018]军训列队

    题目传送门:洛谷 P4559. 题意简述: 有 \(n\) 个学生,编号为 \(i\) 的学生有一个位置 \(a_i\). 有 \(m\) 个询问,每次询问编号在 \([l,r]\) 区间内的学生跑到 ...

  4. 【洛谷】【洛谷月赛】4月月赛Round 1/2

    洛谷月赛“月”来“月”丧了,一月更比一月丧,做得我十分不“月”…… 4月的两轮月赛,都只会T1,就写一下吧,等待后续更新…… 先看看Round1的T1: [R1T1] 网址:点我 [题意简述] 给定一 ...

  5. [洛谷P3228] [HNOI2013]数列

    洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...

  6. 洛谷 P2261 [CQOI2007]余数求和

    洛谷 一看就知道是一个数学题.嘿嘿- 讲讲各种分的做法吧. 30分做法:不知道,这大概是这题的难点吧! 60分做法: 一是直接暴力,看下代码吧- #include <bits/stdc++.h& ...

  7. 【洛谷4933】大师(DP)

    题目: 洛谷4933 分析: (自己瞎yy的DP方程竟然1A了,写篇博客庆祝一下) (以及特斯拉电塔是向Red Alert致敬吗233) 这里只讨论公差不小于\(0\)的情况,小于\(0\)的情况进行 ...

  8. 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp

    洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...

  9. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. 20155210 EXP6 信息搜集与漏洞扫描

    20155210 EXP6 信息搜集与漏洞扫描 信息搜集 外围信息搜集 通过DNS和IP挖掘目标网站的信息 whois 域名注册信息查询 我们通过输入whois qq.com可查询到3R注册信息,包括 ...

  2. 2017-2018-2 20155230《网络对抗技术》实验9:Web安全基础

    实践过程记录 下载wegot并配置好java环境后 输入java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar 在浏览器输入localhost:80 ...

  3. python 字符串的split()函数详解

    split翻译为分裂.  split()就是将一个字符串分裂成多个字符串组成的列表. split()当不带参数时以空格进行分割,当代参数时,以该参数进行分割. //---当不带参数时 example: ...

  4. CF891C Envy

    题面 题解 首先要知道两个性质: 对于任意权值,最小生成树上该权值的边数是相同的. 对于任意一个最小生成树,当加完所有权值小于一个任意值的边之后,当前图的连通性是一样的. 于是我们按照权值分开处理,对 ...

  5. 【中间件】Redis 实战之主从复制、高可用、分布式

    目录 简介 持久化 主从复制 高可用 Redis-Sentinel .NET Core开发 分布式 Redis-Cluster 配置说明 常见问题 简介 本节内容基于 CentOS 7.4.1708, ...

  6. github添加ssh连接用户

    最近打算用flask写一个自己的博客网站,打算把代码放在GitHub上,使用ssh访问.记录下GitHub配置ssh用户的流程. 1.在本地电脑或云服务器上生成ssh公钥和私钥,window下可以进入 ...

  7. LintCode——数字统计

    数字统计:计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例:例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现 ...

  8. Linux/Mac 挂载远程服务器目录到本地

    1. 安装 sudo apt-get installsshfs 2. 创建SSHFS 挂载目录 sudo mkdir/mnt/siyuan 3.使用SSHFS 挂载远程的文件系统 sudo sshfs ...

  9. X32位 天堂2 二章/三章 服务端协议号修改方法

    [本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 42 ...

  10. CentOS7安装OpenStack(Rocky版)-01.控制节点的系统环境准备

    分享一下Rocky版本的OpenStack安装管理经验: OpenStack每半年左右更新一版,目前是版本是201808月发布的版本-R版(Rocky),目前版本安装方法优化较好,不过依然是比较复杂 ...