【LOJ #3144】「APIO 2019」奇怪装置
题意:
定义将一个\(t\)如下转换成一个二元组:
\begin{cases}
x = (t + \left\lfloor \frac{t}{B} \right \rfloor) \bmod A\\
y = t \bmod b
\end{cases}
\]
询问\([l_i, r_i]\)之间的\(t_i\)能够转换成多少个本质不同的二元组。
思路:
考虑\((x_1, y_1)\)和\((x_2, y_2)\)相同的时候:
t_1 + \left\lfloor \frac{t_1}{B} \right\rfloor &\equiv& t_2 + \left \lfloor \frac{t_2}{B} \right\rfloor \bmod A \\
t_1 &\equiv& t_2 \bmod B
\end{cases}
\]
我们不妨令\(t_1 = t_2 + kB\),代入第一个式子有:
t_2 + kB + \left\lfloor \frac{t_2 + kB}{B} \right \rfloor \equiv t_2 + \left \lfloor \frac{t_2}{B} \right \rfloor \bmod A
\end{eqnarray*}
\]
化简之后有:
k(B + 1) \equiv 0 \bmod A
\end{eqnarray*}
\]
所以有\(A\;|\;k(B + 1)\),继而有\(\frac{A}{gcd(A, B + 1)}\;|\;k\),令\(g = \frac{A}{gcd(A, B + 1)}\),那么有\(g\;|\;k\)。
所以\(k\)要满足是\(g\)的倍数上述条件才成立,而\(t_1\)模\(B\)的个数是\(B\)个,所以循环节长度为\(T = gB\)。
将区间取模之后变成一条条线段,差分得到\([0, T)\)的覆盖区间长度即为答案。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000010
#define pll pair <ll, ll>
#define fi first
#define se second
int n;
ll l[N], r[N];
ll A, B;
ll gcd(ll a, ll b) {
return b ? gcd(b, a % b) : a;
}
multiset <pll> se;
void add(ll l, ll r) {
se.insert(pll(l, 1));
se.insert(pll(r + 1, -1));
}
int main() {
while (scanf("%d%lld%lld", &n, &A, &B) != EOF) {
se.clear();
ll sum = 0;
for (int i = 1; i <= n; ++i) {
scanf("%lld%lld", l + i, r + i);
sum += r[i] - l[i] + 1;
}
ll g = gcd(A, B + 1);
if (1.0 * A * B / g > 1e18) {
printf("%lld\n", sum);
continue;
}
ll T = A / g * B;
for (int i = 1; i <= n; ++i) {
if (r[i] - l[i] + 1 >= T) {
printf("%lld\n", T);
return 0;
}
l[i] %= T;
r[i] %= T;
if (l[i] > r[i]) {
add(l[i], T - 1);
add(0, r[i]);
} else {
add(l[i], r[i]);
}
}
ll base = 0, lst = -1, res = 0;
for (auto it : se) {
if (base > 0) res += it.fi - lst;
base += it.se;
lst = it.fi;
}
printf("%lld\n", res);
}
return 0;
}
【LOJ #3144】「APIO 2019」奇怪装置的更多相关文章
- #3144. 「APIO 2019」奇怪装置
#3144. 「APIO 2019」奇怪装置 题目描述 考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数 \(x\) 和 \(y\). 经过研究,科学家对该装置得出了一个 ...
- 「APIO 2019」奇怪装置
题目 考虑推柿子 最开始的想法是如果两个\(t\)在\(mod\ B\)意义下相等,那么只需要比较一下\((t+\left \lfloor \frac{t}{B}\rfloor \right)mod\ ...
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- #3146. 「APIO 2019」路灯
#3146. 「APIO 2019」路灯 题目描述 一辆自动驾驶的出租车正在 Innopolis 的街道上行驶.该街道上有 \(n + 1\) 个停车站点,它们将街道划分成了 \(n\) 条路段.每一 ...
- #3145. 「APIO 2019」桥梁
#3145. 「APIO 2019」桥梁 题目描述 圣彼得堡市内所有水路长度总和约 282 千米,市内水域面积占城市面积的 7%.--来自维基百科 圣彼得堡位于由 \(m\) 座桥梁连接而成的 \(n ...
- 「APIO 2019」桥梁
题目 三天终于把\(APIO\)做完了 这题还是比较厉害的,如果不知道这是个分块应该就自闭了 考虑一个非常妙的操作,按照操作分块 我们设一个闸值\(S\),把\(S\)个边权修改操作分成一块,把所有的 ...
- 「APIO 2019」路灯
题目 显然一个熟练的选手应该能一眼看出我们需要维护点对的答案 显然在断开或连上某一条边的时候只会对左右两边联通的点产生贡献,这个拿\(set\)维护一下就好了 那现在的问题就是怎么维护了 考虑一个非常 ...
- Loj #2495. 「AHOI / HNOI2018」转盘
Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1 ...
- Loj #2494. 「AHOI / HNOI2018」寻宝游戏
Loj #2494. 「AHOI / HNOI2018」寻宝游戏 题目描述 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得 ...
随机推荐
- NIO-FileChannel源码分析
目录 NIO-FileChannel源码分析 目录 前言 RandomAccessFile 接口 创建实例 获取文件通道 FileChannelImpl 创建 写文件 读文件 修改起始位置 获取文件长 ...
- 读取经纬度坐标并存储为字典格式,即key为ID,value为轨迹点
示例数据: #格式为txt文本 ID,L,B 001,116.5154,45.1154 001,116.5160,45.1153 ... 002,xxx,xxx ... 目标:建立轨迹数据结构,即di ...
- SpringMVC源码解读
1.SpringMVC简介 SpringMVC框架是围绕一个DispatherServlet来设计的.这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射.视图渲染.本地化.时区与主题 ...
- 关于MQ的几件小事(五)如何保证消息按顺序执行
1.为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常.举例: 比如通过mysql binlog进行两个数据库的数据 ...
- setTimeout()方法和setInterval()方法
setTimeout方法: 定义和用法: setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. tip: 1000 毫秒= 1 秒. tip: 如果你只想重复执行可以使用setI ...
- Java 之 字符流
一.字符流 当使用字节读取文本文件时,可能会有一个小问题,就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以 Java 提供了一些字符类,以字符为单位读写数据, ...
- 关于INT_MIN
来自为知笔记(Wiz)
- [LeetCode] 45. Jump game II ☆☆☆☆☆(跳跃游戏 2)
https://leetcode-cn.com/problems/jump-game-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-b ...
- WebService 规范
详见:https://blog.csdn.net/u011165335/article/details/51345224 JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-R ...
- Java上传图片到服务器
HTML页面的标签 <div id="div_selectpic" align="right" style="width: 300px;font ...