题目:[USACO1.4]等差数列 Arithmetic Progressions

一个很显然的做法,枚举公差,首项,p,q这样的话复杂度爆炸,不过可以肯定的一点,如果我们这样做,找到了答案就可以直接输出

考虑优化,m很小,可以打表把p2+q2所有可能的答案用桶存下来,枚举之用一个数,另一个数直接通过数学计算得出,在中途无解时,直接跳出,剪枝。

这样的话已经可以通过本题,但是考虑继续优化,不难发现n>=4时,公差一定是4的倍数,因为我们知道i与i+1是互质的,而n=3时,0,1,2是允许的,而且2^2是4,所以公差至少为4。

这样每个点都可以跑进1s内

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
const int N=250*255*2;
using namespace std;
int n,m,maxs,ret,t[N],s[N],cnt;
int main()
{
scanf("%d %d",&n,&m);
maxs=m*m+m*m;
for(int i=0;i<=m;i++)
for(int j=0;j<=m;j++)
t[i*i+j*j]=1;
for(int d=1;d<=maxs;)
{
for(int f=0;f+(n-1)*d<=maxs;f++)
{
int cnt=0;
for(int i=1;i<=n;i++)
{
int flag=1;
if(!t[f+(i-1)*d])
flag=0;
cnt+=flag;
if(cnt!=i)
break;
}
if(cnt==n)
printf("%d %d\n",f,d),ret++;
}
if((n-1)*d>maxs)
break;
if(n==3)
d++;
else
{
d+=4;
if(d==5)
d--;
}
}
if(!ret)
puts("NONE");
return 0;
}

最新文章

  1. thinkphp修改和删除数据
  2. Markdown编辑器:Typora
  3. update maven之后jre被改成1.5的问题
  4. Python深入06 Python的内存管理
  5. 121. Best Time to Buy and Sell Stock (一) leetcode解题笔记
  6. java 线程数据同步
  7. Google protobuf
  8. Maven如何手动添加jar包到本地Maven仓库
  9. Sicily1153-马的周游问题:启发式搜索
  10. Node安装及搭建简单服务器
  11. Nginx实用教程(一):启动、停止、重载配置
  12. [LeetCode] The Maze II 迷宫之二
  13. 【JAVA】pdf转图片
  14. 从输入URL到页面加载的全过程
  15. CString数组和CStringArray
  16. Django框架(三)
  17. 2019.02.09 codeforces451 E. Devu and Flowers(容斥原理)
  18. ASP.NET MVC呼叫WCF Service的方法
  19. php + ajax 避免重复提交
  20. Java数据结构和算法(七)B+ 树

热门文章

  1. 利用Hugging Face中的模型进行句子相似性实践
  2. 项目实践2:项目中的CSS网页布局(常用)
  3. SpringMVC 05: SpringMVC中携带数据的页面跳转
  4. MAC Golang环境搭建
  5. AVL tree 高度上下界推导
  6. kali安装vscode(deb包)
  7. 2022 CLion 中的Cygwin 配置(最全,最良心版)
  8. 深入探究 K8S ConfigMap 和 Secret
  9. 修复 Elasticsearch 集群的常见错误和问题
  10. Elasticsearch集群管理之添加、删除节点