CF1781 D. Many Perfect Squares [数学题]

传送门:CF

[前题提要]:一道有意思的数学题


直接想这道题是不好想的(博主当时就完全没有思路).那么考虑将一个大问题分解成一个小问题想一下(感觉这种思考方式在CF题中还是挺常见的),考虑如果同时存在多个完全平方数,那么必然满足存在两个完全平方数.而当我们确定了任意两个数之后,我们就可以反推出其他数.

考虑如果存在两个数同时为完全平方数会发生什么?
a [ i ] + x = p 2 , a [ j ] + x = q 2 a[i]+x=p^2,a[j]+x=q^2 a[i]+x=p2,a[j]+x=q2 a [ j ] − a [ i ] = q 2 − p 2 = ( q + p ) ∗ ( q − p ) a[j]-a[i]=q^2-p^2=(q+p)*(q-p) a[j]a[i]=q2p2=(q+p)(qp)不难发现存在这样的一个事实,两个数的差一定可以分解为两个因子.诶,那么此时我们完全可以枚举差的因数,当我们枚举这个时,我们同时也就确定了 x x x

那么此时这道题的解法也就呼之欲出了,我们先枚举任意两个数,将其作为我们假设的完全平方数,因为假设我们同时存在更多的完全平方数,这种情况必然是包括上述我们枚举的情况的.考虑确定完两个数之后,我们就可以通过枚举因数来确定 x x x,确定完 x x x之后,我们可以将其代回去,对于我们的每一个数都加上 x x x,从而计算出此时的贡献,然后取一个 m a x max max即可.

考虑 1 e 9 1e9 1e9以内的最大因数个数很少,是 1 e 3 1e3 1e3级别的(准确来说是1344个),所以此时我们的复杂度为 1 e 3 ∗ n 3 + n 2 n 1e3*n^3+n^2\sqrt{n} 1e3n3+n2n ,差不多为 2 e 8 2e8 2e8,4s时限能够接受.


下面是具体的代码部分:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls (rt<<1)
#define rs (rt<<1|1)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
inline ll read() {ll x=0,w=1;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';return x*w;
}
inline void print(__int128 x){if(x<0) {putchar('-');x=-x;}if(x>9) print(x/10);putchar(x%10+'0');
}
#define maxn 1000000
#define int long long
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
int a[maxn];
signed main() {int T=read();while(T--) {int n=read();for(int i=1;i<=n;i++) {a[i]=read();}int ans=1;for(int i=1;i<=n;i++) {for(int j=i+1;j<=n;j++) {vector<pair<int,int> >v; int limit=__builtin_sqrt(a[j]-a[i]);for(int k=1;k<=limit;k++) {if((a[j]-a[i])%k==0) {int num1=min(k,(a[j]-a[i])/k);int num2=max(k,(a[j]-a[i])/k);v.push_back({num1,num2});}}for(auto [x,y]:v) {int q=(x+y)/2;int p=(y-x)/2;int X=q*q-a[j];if(!(X>=0&&X<=1e18)) continue;int sum=0;for(int k=1;k<=n;k++) {if((a[k]+X)==(int)__builtin_sqrt(a[k]+X)*(int)__builtin_sqrt(a[k]+X)) {sum++;}}ans=max(ans,sum);}}}cout<<ans<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网超全的测试类型详解,再也不怕面试答不出来了!

在软件测试工作过程中或者在面试过程中经常会被问到一些看起来简单但是总是有些回答不上的问题&#xff0c;比如你说说“黑盒测试和白盒测试的区别&#xff1f;”&#xff0c;“你们公司做灰度测试么&#xff1f;", ”α测试和β测试有什么不一样&#xff1f;“&#xff0…

文件 IO

一&#xff0c;标准IO和文件IO的区别 1.标准IO是库函数&#xff0c;是对系统调用的封装 2.文件IO是系统调用&#xff0c;时linux内核中的函数接口 3.标准IO是有缓存的&#xff0c;文件IO是没有缓存的&#xff08;实时性强&#xff09; 二&#xff0c;文件IO 1.三步操作&…

review 10

整理磁盘操作的完整流程&#xff0c;如何接入虚拟机&#xff0c;是否成功识别&#xff0c;对磁盘分区工具的使用&#xff0c;格式化&#xff0c;挂载以及取消挂载、复习cp、mv和find指令 1&#xff1a;U盘接入虚拟机 在弹出窗口直接选择 虚拟机-可移动设备-找到u盘-连接 2&a…

【Ubuntu 22.04】解决Ubuntu 22.04终端行距过大的问题

在Ubuntu 22.04中&#xff0c;许多用户都遇到了终端行距过大的问题&#xff0c;不论是使用 GNOME 终端还是 Terminator&#xff0c;都存在这个困扰。这个问题导致显示的内容的行距很大&#xff0c;比如执行 neofetch 命令时&#xff0c;Ubuntu LOGO被拉长。 经过查询&#xff…

matlab代码--基于注水法的MIMO信道容量实现

今天接触一个简单的注水法程序&#xff0c;搞懂数学原理即可看懂代码。 1 注水法简介 详细原理可以参考&#xff1a; MIMO的信道容量以及实现 大致理论就是利用拉格朗日乘子法&#xff0c;求解信道容量的最大化问题&#xff0c;得到的解形如往水池中注水的形式&#xff0c;最…

过字符设备驱动分步注册过程实现LED驱动的编写,编写应用程序测试,发布到CSDN

头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #d…

信号系统之移动平均滤波器

1 通过卷积实现 移动平均滤波器的工作原理是平均输入信号中的多个点&#xff0c;以产生输出信号中的每个点。在方程式形式中&#xff0c;这样写&#xff1a; 其中是 x 输入信号&#xff0c;y 是输出信号&#xff0c;M 是平均值中的点数。例如&#xff0c;在 5 点移动平均滤波器…

基于51单片机的智能台灯的设计与实现

摘 要:针对青少年因坐姿不正确、灯光亮度不合适、用眼过度等原因易导致的近视问题,文中提出使用51单片机作为主控制单元,选用红外检测、光敏检测、蓝牙通信、蜂鸣器和模数转换等模块,设计了一款智能台灯。该智能台灯具有节能、预防近视等功能。经测试,该台灯具有保护视力的…

php基础学习之常用系统函数

一&#xff0c;有关输出的语句/函数 echo语句 用于输出一个或多个字符串 print语句 用于输出一个字符串&#xff08;用句点连接的多个字符串本质是一个字符串&#xff09;&#xff0c;与echo类似&#xff0c;但返回值为1 printf()函数 用于格式化输出字符串&#xff0c;类似于C…

Android下SF合成流程重学习之Refresh流程

Android下SF合成流程重学习之Refresh流程 引言 在前面初步分析完成了Android下SF合成流程重学习之Invalidate流程&#xff0c;我们接下来继续下面的分析。当有事务的更新或者有Buffer的更新便会触发后面刷新的流程,即Refresh流程&#xff01; 一. onMessageRefresh 文件&…

QT串口通讯上位机_基础串口通讯

目录 1. 实现目标1.1 界面1.2 发送1.3 接收1.4 清除接收、发送 2. 新建工程3. 添加头文件4. 变量定义5. 完整代码6. 工程下载 1. 实现目标 1.1 界面 1.2 发送 1.3 接收 1.4 清除接收、发送 2. 新建工程 3. 添加头文件 QT serialport // #include <QDebug‘’> #incl…

数据库架构师之道:MySQL安装与系统整合指南

目录 MySQL数据库安装&#xff08;centos&#xff09; 版本选择 企业版 社区版 选哪个 MySQL特点 MySQL服务端-客户端 mysql下载选择 软件包解释 安装MySQL的方式 rpm包安装 yum方式安装 源码编译安装★ 具体的编译安装步骤★★ 环境准备 free -m命令 cat /pr…

OpenAI超级视频模型Sora登上央视,LeCun强推的「世界模型」雏形相继诞生,AGI如何能够以人类的理解方式看世界?

OpenAI超级视频模型Sora热度不减 Sora一经面世&#xff0c;瞬间成为顶流&#xff0c;话题热度只增不减&#xff0c;一度登上央视新闻报道。 强大的逼真视频生成能力&#xff0c;让许多人纷纷惊呼「现实不存在了」。 OpenAI官方技术报告 OpenAI官方Sora技术报告&#xff1a;V…

JMeter 配置元件之按条件读取CSV Data Set Config

实践环境 win10 JMeter 5.4.1 需求描述 需求是这样的&#xff0c;需要压测某个接口(取消分配接口)&#xff0c;请求这个接口之前&#xff0c;需要先登录系统(物流WMS系统)&#xff0c;并在登录后&#xff0c;选择并进入需要操作的仓库&#xff0c;然后请求接口&#xff0c;…

我的NPI项目之Android Camera (二) -- 核心部件之 Camera Sensor

说到Camera模组&#xff0c;我们比较关心的是用的什么样的sensor&#xff1f; sensor的分辨率多少&#xff0c;sensor的像素多大&#xff0c;sensor是哪家生产的等等一些问题。今天&#xff0c;我们就穿越时间&#xff0c;将sensor的历史扒一扒。 Wikipedia先看一下&#xff1…

代码随想录算法训练营day65|84.柱状图中最大的矩形

目录 84.柱状图中最大的矩形 前言 思路 算法实现 总结 84.柱状图中最大的矩形 题目链接 文章链接 前言 本题与上一题接雨水的题目有点类似&#xff0c;原理上有很多相同的地方&#xff0c;依然利用单调栈的方法进行求解。 思路 接雨水是是找每个柱子左右两边第一个大于该…

MOSFET栅极应用电路分析汇总(驱动、加速、保护、自举等等)

概述 MOSFET是一种常见的电压型控制器件&#xff0c;具有开关速度快、高频性能、输入阻抗高、噪声小、驱动功率小、动态范围大、安全工作区域(SOA)宽等一系列的优点&#xff0c;因此被广泛的应用于开关电源、电机控制、电动工具等各行各业。栅极做为MOSFET本身较薄弱的环节&am…

【C++11新特性】详解智能指针 创建、使用、注意事项

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

小白如何学鸿蒙开发?

在互联网技术不断发展的现在&#xff0c;鸿蒙操作系统的出现标志着是能技术领域的一次重大突破&#xff0c;鸿蒙作为华为推出的一代操作系统&#xff0c;鸿蒙不仅达代表了自主创新的力量&#xff0c;还因为独特的分布式架构和全场景适配能力而备受关注。随着鸿蒙生态的不断完善…

测试架构师必备技能 —— Nginx安装部署实战

Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的免费开源Web和 反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。在高并发访问的情况下&#xff0c;Nginx是Apache服务器不错的替代品。官网数据显示每秒TPS高达50W左右。本文…