题解-APIO2019奇怪装置
problem
题意概要:设函数 \(f(t)\) 的返回值为一个二元组,即 \(f(t)=((t+\lfloor \frac tB\rfloor)\bmod A, t\bmod B)\),现在给出 \(n\) 个区间,问 \(t\) 在这 \(n\) 个区间中取值时,有多少个不同的 \(f(t)\)。
\(n\leq 10^6,\ l_i,r_i,A,B\leq 10^{18}\),区间互不相交
Solution
一开始没啥想法,\(loj\) 的题面上写了 \(l_i\leq r_i,r_i<l_i+1\)……这不就是说 \(l_i=r_i\) 嘛!暴力 \(O(n)\) 就好了!
实际上是 \(r_i<l_{i+1}\),然后看着 \(5\) 分一档的部分分陷入了沉思……后来直接想正解发现正解比暴力容易……
由于不同的二元组难以考虑,考虑两个二元组相同的情况(即 \(f(t_1)=f(t_2)\))。同时这个二元组中的两个函数中,第二维较为简单,考虑从这一维下手。
由于第二维要相同,所以两个相同二元组一定是 \(f(x)\) 与 \(f(x+kB)\) 形式的,再考虑第一维:
x+\lfloor \frac xB\rfloor \equiv x+\lfloor \frac xB\rfloor +kB+k \pmod A\\
k(B+1)\equiv 0\pmod A
\]
又由于满足 \(k(B+1)\equiv 0\pmod A\) 的最小 \(k=\frac A{\gcd\{A,B+1\}}\)
即满足 \(f(x)=f(y)\) 的,一定满足 \(\frac {AB}{\gcd \{A,B+1\}}|(y-x)\)。换种说法,也即 \(x\equiv y\pmod {\frac {AB}{\gcd\{A,B+1\}}}\)。
问题转化为在模 \(\frac {AB}{\gcd\{A,B+1\}}\) 意义下的覆盖区间长度,时间复杂度 \(O(n\log n)\)。
Code
//loj-3144
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template <typename _tp> inline void read(_tp&x){
char ch=getchar();x=0;while(!isdigit(ch))ch=getchar();
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
}
inline ll gcd(ll A, ll B) {return B ? gcd(B, A%B) : A;}
const int N = 2001000;
typedef pair <ll,int> pli;
pli a[N];
int n, tot;
ll A, B;
int main() {
read(n), read(A),read(B);
ll d = A / gcd(A, B+1);
ll l, r, l0, l1, r0, r1;
bool flg = false;
if(1e18 / B < d) {
for(int i=1;i<=n;++i) {
read(l), read(r);
a[++tot] = pli(l, +1);
a[++tot] = pli(r+1, -1);
}
flg = true;
} else {
d *= B;
for(int i=1;i<=n;++i) {
read(l), l0 = l % d, l1 = l / d;
read(r), r0 = r % d, r1 = r / d;
if(l1 == r1) {
a[++tot] = pli(l0, +1);
a[++tot] = pli(r0+1, -1);
} else if(l1 + 1 == r1) {
a[++tot] = pli(l0, +1);
a[++tot] = pli(0, +1);
a[++tot] = pli(r0+1, -1);
} else return printf("%lld\n", d), 0;
}
}
if(!flg) a[++tot] = pli(d, 0);
a[0] = pli(0, 0);
sort(a+1, a+tot+1);
int vl = 0;
ll Ans = 0ll;
for(int i=1;i<=tot;++i) {
if(vl) Ans += a[i].first - a[i-1].first;
vl += a[i].second;
}
printf("%lld\n", Ans);
return 0;
}
题解-APIO2019奇怪装置的更多相关文章
- 【LOJ#3144】[APIO2019]奇怪装置(数论)
[LOJ#3144][APIO2019]奇怪装置(数论) 题面 LOJ 题解 突然发现\(LOJ\)上有\(APIO\)的题啦,赶快来做一做. 这题是窝考场上切了的题嗷.写完暴力之后再推了推就推出正解 ...
- 【LG5444】[APIO2019]奇怪装置
[LG5444][APIO2019]奇怪装置 题面 洛谷 题目大意: 给定\(A,B\),对于\(\forall t\in \mathbb N\),有二元组\((x,y)=((t+\lfloor\fr ...
- Luogu P5444 [APIO2019]奇怪装置
题目 这种题目看上去就是有循环节的对吧. 在考场上,一个可行的方式是打表. 现在我们手推一下这个循环节. 记函数\(f(t)=(((t+\lfloor\frac tB\rfloor)\%A),(t\% ...
- [APIO2019] 奇怪装置
$solution:$ 问题其实就是求两个式子的循环节. 钦定 $t\mod B=0$且 $(t\neq 0)$,其 $t$ 为循环节. 则将 $1$ 式拆开得 $\frac{t\times (B+1 ...
- P5444 [APIO2019]奇怪装置
传送门 考虑求出最小的循环节 $G$ 使得 $t,t+G$ 得到的数对是一样的 由 $y \equiv t \mod B$ ,得到 $G$ 一定是 $B$ 的倍数,设 $zB=G$,则 $t,t+zB ...
- 洛谷$P5444\ [APIO2019]$奇怪装置 数论
正解:数论 解题报告: 传送门$QwQ$ 我好像当初考的时候这题爆零了,,,部分分都没想到,,,我真的好菜$kk$ 考虑如果在$t_1,t_2$两个时刻有$x_1=x_2,y_1=y_2$是什么情况$ ...
- #3144. 「APIO 2019」奇怪装置
#3144. 「APIO 2019」奇怪装置 题目描述 考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数 \(x\) 和 \(y\). 经过研究,科学家对该装置得出了一个 ...
- [APIO 2010] [LOJ 3144] 奇怪装置 (数学)
[APIO 2010] [LOJ 3144] 奇怪装置 (数学) 题面 略 分析 考虑t1,t2时刻坐标相同的条件 \[\begin{cases} t_1+\lfloor \frac{t_1}{B} ...
- [APIO2019T1]奇怪装置
考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数x和y.经过研究,科学家对该装置得出了一个结论:该装置是一个特殊的时钟,它从过去的某个时间点开始测量经过的时刻数t,但该装 ...
随机推荐
- TextBox光标定位到文本末尾
private void RichTextBox1_TextChanged(object sender, EventArgs e) { this.richTextBox1.Select(richTex ...
- python 设计模式之组合模式Composite Pattern
#引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...
- ubuntu下如何开机自动执行自定义脚本?
答: 将自定义脚本(假设自定义的脚本绝对路径为~/start_test.sh)添加到/etc/init.d/目录下,并更新系统启动项,命令如下: sudo cp ~/start_test.sh /et ...
- shell编程系列16--文本处理三剑客之awk模式匹配的两种方法
shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...
- zabbix使用fping监控任意两个节点之间的网络质量、丢包率和响应时间
zabbix使用fping监控任意两个节点之间的网络质量.丢包率和响应时间 之前的博文 使用zabbix3..4的ICMP Ping模版实现对客户端网络状态的监控 https://www.cnblog ...
- (十三)class文件结构:常量池(转)
Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗 ...
- SET IDENTITY_INSERT的用法,具体去体验一下
如果将值插入到表的标识列中,需要启用 SET IDENTITY_INSERT. 举例如下: 创建表Orders.Products,Orders表与Products表分别有标识列OrderID与Prod ...
- Amazon MWS Scratchpad
https://mws.amazonservices.com/scratchpad/index.html Use this page to test Amazon MWS API request an ...
- vue 组件传值$attrs $listeners $bus provide/inject $parent/$children
$attrs 包含了父作用域中不作为prop被识别的特性绑定,当一个组件没有声明props时,这里会包含所有父作用域的绑定, $listeneers 包含了父作用域中的v-on事件监听器,它可以通过v ...
- 如何使用threejs实现第一人称视角的移动
在数据可视化领域利用webgl来创建三维场景或VR已经越来越普遍,各种开发框架也应运而生.今天我们就通过最基本的threejs来完成第一人称视角的场景巡检功能.如果你是一位threejs的初学者或正打 ...