【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 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得 ...
随机推荐
- 【springcloud】1.微服务之springcloud-》eureka源码分析之请叫我灵魂画师。。。
- 元素的colspan和rowspan
colspan和rowspan这两个属性用于创建特殊的表格. colspan用来指定单元格横向跨越的列数:colspan就是合并列的,colspan=2就是合并两列. rowspan用来指定单元格纵向 ...
- springboot笔记02——快速入门quickstart
前言 学习一个新的框架,往往会用一个quickstart快速入门,这次就写一下springboot的quickstart程序. 开发环境 JDK 1.8 Springboot 2.1.6 Maven ...
- Axios使用拦截器全局处理请求重试
Axios拦截器 Axios提供了拦截器的接口,让我们能够全局处理请求和响应.Axios拦截器会在Promise的then和catch调用前拦截到. 请求拦截示例 axios.interceptors ...
- 【转】Java中File常用的方法汇总
创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false.mkdir() 在指定位置创建一个单级文件夹.mkdirs() 在指定位置创建 ...
- 安装jQuery
description jQuery,顾名思义,也就是JavaScript和Query(查询),即辅助JavaScript开发的库.jQuery是一个快速.简洁的JavaScript框架,是继Prot ...
- ABAP-JCO服务端连接问题
公司网络服务加域,若SAP服务器后端未配置端口号映射,则外部服务器注册JCO服务监听需要调整 # server jco.server.connection_count=5 jco.server.gwh ...
- [LeetCode] 95. 不同的二叉搜索树 II ☆☆☆(递归,n个数组成的所有二叉搜索树)
https://leetcode-cn.com/problems/unique-binary-search-trees-ii/solution/xiang-xi-tong-su-de-si-lu-fe ...
- hive四种排序
order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set h ...
- MySQL增删查改语句(入门)
目录 create alter: insert delete update select 数据库定义语句: create:创建数据库及表对象 drop:删除数据库及表对象 alter:修改数据库及表对 ...