题目:[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;
}

2022春每日一题:Day 39的更多相关文章

  1. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  2. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  3. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. 【Java每日一题】20161230

    // 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...

  7. 【Java每日一题】20161229

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...

  8. 【Java每日一题】20161228

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...

  9. 【Java每日一题】20161227

    package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...

  10. 【Java每日一题】20161226

    package Dec2016; public class Ques1226 { static{ num = 1; } public static int num = 2; public static ...

随机推荐

  1. KDB_Database_Link 使用介绍

    kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,可用于访问KingbaseES, Postgresql , Oracle .以下分别介 ...

  2. 大规模数据分析统一引擎Spark最新版本3.3.0入门实战

    @ 目录 概述 定义 Hadoop与Spark的关系与区别 特点与关键特性 组件 集群概述 集群术语 部署 概述 环境准备 Local模式 Standalone部署 Standalone模式 配置历史 ...

  3. Java 中HashMap 详解

    本篇重点: 1.HashMap的存储结构 2.HashMap的put和get操作过程 3.HashMap的扩容 4.关于transient关键字 HashMap的存储结构 1. HashMap 总体是 ...

  4. 查询参数和字符串校验:Query_Parameters_and_String_Validations

    官方文档地址:https://fastapi.tiangolo.com/zh/tutorial/query-params-str-validations/ # -*- coding: UTF-8 -* ...

  5. 使用 Skywalking Agent,这里使用sidecar 模式挂载 agent

    文章转载自:https://bbs.huaweicloud.com/blogs/315037 方法汇总 Java 中使用 agent ,提供了以下三种方式供你选择 使用官方提供的基础镜像 将 agen ...

  6. 防火墙:iptable和firewalld常用操作

    iptables //安装iptables-service yum install iptables-services //编辑config文件 vi /etc/sysconfig/iptables ...

  7. PAT (Basic Level) Practice 1028 人口普查 分数 20

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...

  8. [题解] BZOJ 3456 洛谷 P4841 [集训队作业2013]城市规划 多项式,分治FFT

    题目 令\(f_i\)表示n个点的答案.考虑容斥,用所有连边方案减去有多个连通块的方案.枚举1号点所在的连通块大小: \(f_i=2^{i(i-1)/2}-\sum_{j>0}^{i-1}f_j ...

  9. Skywalking Swck Agent注入实现分析

    项目地址: GitHub - apache/skywalking-swck: Apache SkyWalking Cloud on Kubernetes 项目简介: A bridge project ...

  10. 18-基于CentOS7搭建RabbitMQ3.10.7集群镜像队列+HaProxy+Keepalived高可用架构

    集群架构 虚拟机规划 IP hostname 节点说明 端口 控制台地址 192.168.247.150 rabbitmq.master rabbitmq master 5672 http://192 ...