abc1057510554 老师说,搞这种数论题,就可以在 CF 上 number theory 板刷一个 1300-1900 就可以了。

然后发现连 1800 的题都做不出来,我可以退役力 QAQ


观察到 \(n\) 很小,也就是说我们甚至可以用 \(O(n^4)\) 的算法爆过去,但是这是一道数论题,不是让我们用暴力乱堆堆过去的,所以我们来考虑一下性质。

平方和和加法运算能有什么关系呢……没有关系啊……反正我们 \(n\) 很小,我们可以枚举一下 \(a\) 的元素。首先我们达成共识答案肯定至少为 \(1\),然后我们看看答案能否为 \(2\)——枚举一个 \(a_i, a_j(a_i > a_j)\)。

我们令 \(a_i + x = p^2, a_j + x = q^2,a_i - a_j = p^2 - q^2 = (p+q)(p - q)\)

这下就明晰了!枚举 \(a_i, a_j(a_i > a_j)\),对它们差枚举因子,就能搞出来 \(p, q\),进而就可以计算出 \(x\),然后对整个序列都用这个 \(x\) 计算一遍就好了。

时间复杂度?枚举 \(a_i, a_j\) 是 \(O(n^2)\),质因子 \(O(\sqrt{SIZE})\)(当然达不到这个复杂度),最后再统计一下是 \(O(n)\) 的,总共的时间复杂度就是 \(O(n^3\sqrt{SIZE})\)。这是理论上界,实践是远远达不到的,因为 \(a_i - a_j\) 不可能永远都顶到 \(1e9\)。跑不满,\(n\) 又很小,问题不大 qwq。

//SIXIANG
#include <iostream>
#include <cmath>
#define MAXN 100000
#define int long long
#define QWQ cout << "QWQ" << endl;
using namespace std;
int a[MAXN + 10], ans = 0, n;
bool judge(int x) {
int st = sqrt(x);
return (st * st == x);
}
void count(int x) {
int cnt = 0;
for(int p = 1; p <= n; p++)
cnt += judge(a[p] + x);
ans = max(ans, cnt);
}
void work(int x, int id1, int id2) {
for(int i = 1; i * i <= x; i++) {
if(x % i == 0) {
int j = x / i;
if(!((i + j) & 1)) {
int p = (i + j) / 2;
int q = j - p;
int X1 = p * p - a[id1], X2 = q * q - a[id2];
if(X1 == X2 && X1 >= 0)//X 要大于等于 0,而且 p^2 - a[i] 要等于 q^2 - a[j]
count(X1); swap(p, q);
X1 = p * p - a[id1], X2 = q * q - a[id2];
if(X1 == X2 && X1 >= 0)
count(X1);
}
}
}
}
void init() {
ans = 0;
cin >> n;
for(int p = 1; p <= n; p++)
cin >> a[p];
for(int p = 1; p <= n; p++)
for(int i = p + 1; i <= n; i++) {
int x = a[p] - a[i], cp = p, ci = i;
if(x < 0) x = -x, swap(cp, ci);
work(x, cp, ci);
}
cout << max(ans, 1ll) << endl;
}
signed main() {
int T; cin >> T;
while(T--) {
init();
}
}

CF1781D 解题乱弹的更多相关文章

  1. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

  2. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  3. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

  4. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  5. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  6. wechall.net/stegano 解题心得

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...

  7. Mountains(CVTE面试题)解题报告

    题目大意: 用一个数组代表群山的高度.高度大的地方代表山峰,小的地方代表山谷.山谷可以容水.假设有一天下了大雨,求群山中总共可以容纳多少水? 如图所示情况,a代表该数组,总共可以容纳5个水. 解题思路 ...

  8. timus 1180. Stone Game 解题报告

    1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...

  9. timus 1175. Strange Sequence 解题报告

    1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...

  10. ACM 杭电HDU 2084 数塔 [解题报告]

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

随机推荐

  1. day20 关联查询与多表联查 & 子查询与union联合查询 & 数据库定义语言DDL

    day20 关联查询 #左连接:表名 left join 表名 以左表为主表,只显示与左表能匹配的行 SELECT s.*,q.* FROM student AS s LEFT JOIN queue_ ...

  2. 100以内能被7整除的前五个数-Java

    import java.util.HashSet; import java.util.Set; public class Demo { //100以内能够被7整除的前五个数 public static ...

  3. Zabbix技术分享——docker组件编译使用教程

    docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,它可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器上,还可以实现 ...

  4. 【每日一题】【找到位置返回&升序数组中第K大就是n-K小】2022年1月17日-NC88 寻找第K大

    描述有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数. 给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在. 方法 ...

  5. 基于EasyCode定制Mybatisplus全自动单表实现:新增/批量新增/修改/批量删除/分页查询/ID查询

    基于EasyCode定制Mybatisplus全自动单表实现CRUD接口 分页查询 ID查询 新增 批量新增 修改 批量删除 注意使用了MybatisPlus的自动填充功能,和insertBatchS ...

  6. ast在爬虫上的应用

    https://astexplorer.net/ https://zhuanlan.zhihu.com/p/371710865 1.基础了解 const {parse} =require(" ...

  7. vue 实现一键复制功能(两种方式)

    方法 一 : <div class="mask-cont"> <p><input id="input" /></p&g ...

  8. RestTemplate获取json数组

    1.需求描述 接口返回的是一个json数组,要获取到接口返回值并用实体类list接住. 2.解决方法 使用springboot框间自带的Http的工具类RestTemplate调接口,其返回值用hut ...

  9. 体验一个前端视图层的mvvm的框架Knockoutjs(双向绑定,模板..)..解放您的双手,不再处理那么多的dom操作..快速实现视图层数据与UI的交互处理

    笔者之前对于类似前端展示的,可能都是自己开发js对象,集合外加dom事件进行处理..  近期看到相关资料,了解了Knockoutjs这个框架,下面来段代码: <script type=" ...

  10. 如何用 Python 隐藏你的 API 密钥

    你好,我是悦创. 博客首发:https://bornforthis.cn/posts/19.html 有时您需要在代码中存储敏感信息,例如密码或 API 密钥,而在 Python 中最简洁的方法是使用 ...