Iksevi

题目大意

\(n\) 次询问,每次给定一个点 \((x,y),x\ge 0, y\ge 0\),问有多少种对角线长为偶数的正方形使得在用该正方形正密铺第一象限的情况下该点位于正方形顶点上。

正密铺第一象限 指将第一个正方形的角与 \(x\) 轴和 \(y\) 轴接触。此后的正方形都与至少一个已放置的正方形有一条边重合。重复这一过程。

思路分析

考虑到 \(x,y\) 对称,因此不妨设 \(y>x\)。

设当前考虑的正方形对角线长为 \(2l\),那么容易发现该正方形合法的充要条件是:

\[\begin{cases}y+x\equiv l\pmod {2l}\\y-x\equiv l\pmod {2l}\end{cases}
\]

将两式相加,得:

\[y\equiv0\pmod {2l}
\]

因此我们只需要枚举 \(y\) 的所有约数,再逐一判断就可以做到 \(O(n\sqrt V)\) 的时间复杂度,可以取得 \(70pts\) 的好成绩。

但我们发现 \(10^7\) 内约数个数最多的数只有 \(448\) 个约数,因此 \(O(\sqrt V)\) 的枚举是相当浪费的。

考虑将询问离线并离散化,改为枚举 \(1\sim V\) 中每个数的倍数,对所有的询问点开 vector 并加入在其离散化后对应的 vector 中加入约数。

这样我们的时间复杂度就优化成了 \(O(V\log V)\),空间复杂度为 \(O(n\max \{d\})\),可以通过。

或许你会问,\(O(n\max\{d\})=10^6\times 448=4.5\times 10^8\),空间开不下啊?

但实际上,因为相同的值对应同一个 vector,所以最劣情况是所有的询问点为在 \(1\sim 10^7\) 中前 \(10^6\) 个约数个数最多的数,算了一下发现是 \(60690707\),也就是 \(6\times 10^7\),是不会爆空间的。

代码

(最大时间 \(2.71s\),最大空间 \(171.27MB\))

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath> using namespace std;
const int N = 1100000, M = 10000010, L = 10000000; int n, A, D, in1, in2;
int b[N], id[M]; struct Node{
int x, y;
}a[N]; vector <int> d[N]; bool check(int k){
return A % (2 * k) == k && D % (2 * k) == k;
} int main(){
scanf("%d", &n);
for (int i = 1; i <= n; i ++) {
scanf("%d %d", &in1, &in2);
if (in1 < in2) swap(in1, in2);
a[i] = Node{in1, in2};
b[i] = in1; id[in1] = 1;
}
sort(b + 1, b + n + 1);
int tot = unique(b + 1, b + n + 1) - b - 1;
for (int i = 1; i <= L; i ++)
if (id[i]) id[i] = lower_bound(b + 1, b + n + 1, i) - b;
for (int i = 1; i <= L; i ++)
for (int j = i; j <= L; j += i)
if (id[j]) d[id[j]].push_back(i);
for (int i = 1; i <= n; i ++) {
int ans = 0;
A = a[i].x + a[i].y ;
D = abs(a[i].x - a[i].y);
for (auto it : d[id[a[i].x]])
if (check(it)) ans ++;
cout << ans << '\n';
}
return 0;
}

Iksevi 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. 【WALT】WALT入口 update_task_ravg() 代码详解

    目录 [WALT]WALT入口 update_task_ravg() 代码详解 代码展示 代码逻辑 ⑴ 判断是否进入 WALT 算法 ⑵ 获取 WALT 算法中上一个窗口的开始时间 ⑶ 如果任务刚初始 ...

  2. Cisco命令中login和login local的区别

    login是开启远程登录密码验证,login local不但要求密码,还要求提供用户名 如果同时设置login和login local,login local有效 (config-line)#line ...

  3. Python中 sys.argv[]用法详解

    sys.argv[0]表示代码本身文件路径. sys.argv[]是一个从程序外部获取参数的桥梁,从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一 ...

  4. 【Springboot】项目启动后执行特定方法

    Springboot项目启动后执行特定方法 Springboot给我们提供了两种"开机启动"方式:ApplicationRunner和CommandLineRunner. 这两种方 ...

  5. 【Mybatis】学习

    Mybatis 学习 环境搭建 pom.xml <!--log4j--> <dependency> <groupId>org.slf4j</groupId&g ...

  6. 与 AI 同行,利用 ChatGLM 构建知识图谱

    大家好,我是东方财富的一名算法工程师,这里分享一些利用大模型赋能知识图谱建设的一些实践. 为什么知识图谱需要大模型 在金融场景中,天然会有大量结构化的数据需要投入大量的人力去生产和维护,而这样的数据又 ...

  7. 【阅读笔记】低照度图像增强-《Fast efficient algorithm for enhancement of low lighting video》

    本文介绍的是一种比较实用的低照度图像增强效果很好的方法,Xuan Dong论文<Fast efficient algorithm for enhancement of low lighting ...

  8. 2022-1-10 控件学习2 Button、CheckBox、RadioButton、PasswordBox、Image、ToolTip

    Button         设置带图片的按钮: 设置button按钮通用类型:  CheckBox          IsChecked设置是否选中 RadioButton 使用GroupName这 ...

  9. python: ImportError: cannot import name '_unicodefun' from 'click'

    报错 报错原因 click模块版本问题 解决方案 指定click版本为8.0.4 参考链接 https://github.com/psf/black/issues/2964

  10. 仅三天,我用 GPT-4 生成了性能全网第一的 Golang Worker Pool,轻松打败 GitHub 万星项目

    目录 1. 我写了一个超牛的开源项目 1.1 你看看这性能 1.2 你看看这功能 1.3 你猜我这一百天都经历了啥 2. 你有多久没写并发程序了? 3. 问:一个 Worker Pool 程序需要包含 ...