[APIO 2010] [LOJ 3144] 奇怪装置 (数学)
[APIO 2010] [LOJ 3144] 奇怪装置 (数学)
题面
略
分析
考虑t1,t2时刻坐标相同的条件
\]
由第二个式子,可以令\(t_1=t_2+Bk(k \in N)\)
代入式子1,\(t_2+Bk+\lfloor \frac{t_2}{B}+k \rfloor \equiv t_2+\lfloor \frac{t_2}{B} \rfloor(\mathrm{mod} \ A)\)
消元得\((B+1)k \equiv 0 (\mathrm{mod} \ A)\)
因此\(k|\frac{A}{gcd(A,B+1)}\),
代入上式,\(t_1=t_2+B\frac{A}{gcd(A,B+1)}(k \in N)\)
\(t_1 \equiv t _2 \ (\mathrm{mod} \frac{AB}{gcd(A,B+1)})\)
因此,可以把l,r取模\(\frac{AB}{gcd(A,B+1)}\),然后问题就变成在\([0,\frac{AB}{gcd(A,B+1)}]\)上有若干条线段,求线段的并
直接排序再\(O(n)\)扫一遍即可
注意\(\frac{AB}{gcd(A,B+1)}\)可能会超过long long范围,但注意到l,r都\(\leq 2 \times 10^{18}\),如果\(\frac{AB}{gcd(A,B+1)}\)超过就强行设成$ 2 \times 10^{18}$
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1000000
#define maxr 2e18
using namespace std;
typedef long long ll;
ll n,A,B;
inline ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
struct seg{
ll l;
ll r;
seg(){
}
seg(ll _l,ll _r){
l=_l;
r=_r;
}
friend bool operator < (seg p,seg q){
if(p.l==q.l) return p.r<q.r;
else return p.l<q.l;
}
}a[maxn+5],b[maxn*2+5];
int cnt=0;
int main(){
scanf("%I64d %I64d %I64d",&n,&A,&B);
for(int i=1;i<=n;i++){
scanf("%I64d %I64d",&a[i].l,&a[i].r);
}
ll C=A/gcd(A,B+1);
if(maxr/B<=C) C=maxr; //B*C<=2e18
else C=C*B;
for(int i=1;i<=n;i++){
if(a[i].r-a[i].l>=C){
printf("%I64d\n",C);
return 0;
}
if(a[i].l%C<=a[i].r%C){
b[++cnt]=seg(a[i].l%C,a[i].r%C);
}else{
b[++cnt]=seg(0,a[i].r%C);
b[++cnt]=seg(a[i].l%C,C-1);
}
}
sort(b+1,b+1+cnt);
// cnt=unique(b+1,b+1+cnt)-b-1;
ll l=b[1].l,r=b[1].r;
ll ans=0;
for(int i=2;i<=cnt;i++){
if(b[i].l>r+1){
ans+=(r-l+1);
l=b[i].l;
r=b[i].r;
}else if(b[i].r>r){
r=b[i].r;
}
}
ans+=r-l+1;
printf("%I64d\n",ans);
}
[APIO 2010] [LOJ 3144] 奇怪装置 (数学)的更多相关文章
- 【LOJ#3144】[APIO2019]奇怪装置(数论)
[LOJ#3144][APIO2019]奇怪装置(数论) 题面 LOJ 题解 突然发现\(LOJ\)上有\(APIO\)的题啦,赶快来做一做. 这题是窝考场上切了的题嗷.写完暴力之后再推了推就推出正解 ...
- #3144. 「APIO 2019」奇怪装置
#3144. 「APIO 2019」奇怪装置 题目描述 考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数 \(x\) 和 \(y\). 经过研究,科学家对该装置得出了一个 ...
- 【LG5444】[APIO2019]奇怪装置
[LG5444][APIO2019]奇怪装置 题面 洛谷 题目大意: 给定\(A,B\),对于\(\forall t\in \mathbb N\),有二元组\((x,y)=((t+\lfloor\fr ...
- 【LOJ #3144】「APIO 2019」奇怪装置
题意: 定义将一个\(t\)如下转换成一个二元组: \[ f(t) = \begin{cases} x = (t + \left\lfloor \frac{t}{B} \right \rfloor) ...
- 「APIO 2019」奇怪装置
题目 考虑推柿子 最开始的想法是如果两个\(t\)在\(mod\ B\)意义下相等,那么只需要比较一下\((t+\left \lfloor \frac{t}{B}\rfloor \right)mod\ ...
- [APIO2019T1]奇怪装置
考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数x和y.经过研究,科学家对该装置得出了一个结论:该装置是一个特殊的时钟,它从过去的某个时间点开始测量经过的时刻数t,但该装 ...
- 题解-APIO2019奇怪装置
problem loj-3144 题意概要:设函数 \(f(t)\) 的返回值为一个二元组,即 \(f(t)=((t+\lfloor \frac tB\rfloor)\bmod A, t\bmod B ...
- 【BZOJ 1911】【APIO 2010】特别行动队
http://www.lydsy.com/JudgeOnline/problem.php?id=1911 夏令营里斜率优化的例题,我调了一晚上,真是弱啊. 先推公式吧($sum_i$表示$x_1 \d ...
- [bzoj 1911][Apio 2010]特别行动队(斜率优化DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 分析: 首先可以的到裸的方程f[i]=max{f[j]+a*(Si-Sj)^2+b*(S ...
随机推荐
- 【串线篇】spring boot整合SpringData JPA
一.SpringData简介 其中SpringData JPA底层基于hibernate 二.整合SpringData JPA JPA: Java Persistence API的简称,中文名Java ...
- oracle中用case when查询列表
查询sql语句如下 SELECT * FROM ( SELECT * ,ROW_NUMBER() OVER ( PARTITION BY scene_code ORDER BY (CASE statu ...
- 包、time、datetime、hashlib和hmac、request、re
目录 包 包的特点 time模块 datetime模块 hashlib模块和hmac模块 hmac密钥(加盐) typing模块 request模块 正则模块 以下必须得记住 哪些做了解 包 包,这里 ...
- Java——static
[static] <1>static成员变量存储在内存data segment区域,不是存放在堆中. <2>静态成员变量属于整个类,任何一个对象都可以访问这个值:如果没有对象, ...
- <知识整理>2019清北学堂提高储备D5
今天主讲图论. 前言:图的定义:图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交.它们亦可写成V(G)和E(G). 一.图的存 ...
- #1122 JSP动作元素
JSP动作元素 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用JSP动作可以动态地插入文件.重用JavaBean组件.把用户重定向到另外的页面 ...
- Oracle Flashback Database
Oracle Flashback Database Ensure that the prerequisites described in Prerequisites of Flashback Data ...
- 主流架构 : MVP
1 背景 MVC 平时开发APP时会发现,activity职责非常重.以MVC角度来看: M:model数据操作层(网络请求,耗时操作,数据存取,其他逻辑操作) V:view,指xml布局文件,其实并 ...
- Eclipse Java工程转为Web工程步骤
找到工程的.project文件,在<natures>标签中增加以下两行配置:<nature>org.eclipse.wst.common.modulecore.ModuleCo ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_1_使用Properties集合存储数据,遍历取出集合中的数据
map下面的实现类叫做Hashtable Properties是唯一和IO流相结合的 讲解 代码