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. 【Springboot】过滤器

    Springboot实现过滤器 实现过滤器方式有两种: Filter过滤器具体实现类 通过@WebFilter 注解来配置 1.Filter过滤器具体实现类 1.1 实现Filter @Compone ...

  2. React报错:You are running `create-react-app` 5.0.0, which is behind the latest release (5.0.1).

    错误 解决方案 说白了就是版本过低,升级下就好.或者按照提示卸载掉原来的版本,之后输入临时创建命令即可,如下图所示 参考链接 https://stackoverflow.com/questions/7 ...

  3. PHPstudy+Xdebug动态调试代码过程中遇到一分钟就超时问题的解决办法

    环境是PhpStorm+Xdebug+WAMP 在实际调试的过程中 碰到了调试还没走完就自动结束的情况 很尴尬 查阅了相关文档资料 找到了解决方法 首先在php.ini中进行修改 我的配置文件地址在 ...

  4. 传输层之UDP与TCP的首部

    从通信信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能的最底层. 传输层位于应用层和数据链路层之间,主要有两个协议,用户数据报协议UDP(User D ...

  5. 利用pytorch自定义CNN网络(三):构建CNN模型

    本文是利用pytorch自定义CNN网络系列的第三篇,主要介绍如何构建一个CNN网络,关于本系列的全文见这里. 笔者的运行设备与软件:CPU (AMD Ryzen 5 4600U) + pytorch ...

  6. Linux 身份验证被拒绝,登录失败解决

    解决方案: vim /etc/ssh/sshd_config 修改参数 基本参数: PermitRootLogin yes #允许root认证登录 PasswordAuthentication yes ...

  7. Spring面试攻略:如何展现你对Spring的深入理解

    什么是Spring?谈谈你对IOC和AOP的理解. Spring是一种Java开发框架,旨在简化企业级应用程序的开发和部署.它具有以下优点: 对象托管:Spring能够管理和赋值所有对象,使开发人员不 ...

  8. Redis专题-秒杀

    Redis专题-并发/秒杀 开局一张图,内容全靠"编". 昨天晚上在群友里看到有人在讨论库存并发的问题,看到这里我就决定写一篇关于redis秒杀的文章. 1.理论部分 我们看看一般 ...

  9. 解析BeanDefinitionRegistry与BeanDefinition合并

    本文分享自华为云社区<Spring高手之路12--BeanDefinitionRegistry与BeanDefinition合并解析>,作者:砖业洋__ . 1.什么是BeanDefini ...

  10. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-12-playwright操作iframe-中篇

    1.简介 按照计划今天就要用实际的例子进行iframe自动化测试.经过宏哥长时间的查找,终于找到了一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了.所以今天这一篇的主要内容 ...