【LOJ#3144】[APIO2019]奇怪装置(数论)

题面

LOJ

题解

突然发现\(LOJ\)上有\(APIO\)的题啦,赶快来做一做。

这题是窝考场上切了的题嗷。写完暴力之后再推了推就推出正解了。。。


考虑\(t1,t2\)两个时刻,如果两个时刻的\((x,y)\)相等的话,考虑是一种什么样的情况。

\[\begin{cases}
t_1+[\frac{t_1}{B}]\equiv t_2+[\frac{t_2}{B}](\mod A)\\
t_1\equiv t_2(\mod B)
\end{cases}\]

那么根据第二个条件,我们不妨令\(t_1+kB=t_2,k>0,k\in Z\)。

那么带到第一个式子中就是:

\[t_1+[\frac{t_1}{B}]\equiv t_1+kB+k+[\frac{t1}{B}](\mod A)
\]

化简之后得到

\[k(B+1)\equiv 0(\mod A)
\]

而\(A,B\)都是常量,所以\(\frac{A}{gcd(A,B+1)}|k\)。令\(g=\frac{A}{gcd(A,B+1)}\),所以\(g|k\)。

所以\(k\)要是\(g\)的倍数的时候才会满足这个条件。而\(t_1\mod B\)的取值共有\(B\)种,所以不难得到循环节就是\(T=gB\)。

那么把所有\(l,r\)取模之后得到一条条的线段,线段在\([0,T)\)的覆盖区间总长度就是答案,可以很简单的差分计算出答案。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
#define ll long long
#define MAX 1000100
inline ll read()
{
ll x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
ll n,sum,l[MAX],r[MAX],A,B,d,T,ans;
multiset<pair<ll,int> >S;
#define mp make_pair
void Add(ll l,ll r){S.insert(mp(l,1));S.insert(mp(r+1,-1));}
int main()
{
n=read();A=read();B=read();d=__gcd(A,B+1);
for(int i=1;i<=n;++i)l[i]=read(),r[i]=read(),sum+=r[i]-l[i]+1;
if(1.0*A*B/d>1e18){printf("%lld\n",sum);return 0;}
T=A/d*B;
for(int i=1;i<=n;++i)
{
if(r[i]-l[i]+1>=T){printf("%lld\n",T);return 0;}
if(l[i]/T!=r[i]/T)Add(l[i]%T,T-1),Add(0,r[i]%T);
else Add(l[i]%T,r[i]%T);
}
S.insert(mp(T,0));
ll lst=-1,c=0;
for(auto a:S)
{
if(c>0)ans+=a.first-lst;
c+=a.second;
lst=a.first;
}
printf("%lld\n",ans);
return 0;
}

【LOJ#3144】[APIO2019]奇怪装置(数论)的更多相关文章

  1. 洛谷$P5444\ [APIO2019]$奇怪装置 数论

    正解:数论 解题报告: 传送门$QwQ$ 我好像当初考的时候这题爆零了,,,部分分都没想到,,,我真的好菜$kk$ 考虑如果在$t_1,t_2$两个时刻有$x_1=x_2,y_1=y_2$是什么情况$ ...

  2. 【LG5444】[APIO2019]奇怪装置

    [LG5444][APIO2019]奇怪装置 题面 洛谷 题目大意: 给定\(A,B\),对于\(\forall t\in \mathbb N\),有二元组\((x,y)=((t+\lfloor\fr ...

  3. 题解-APIO2019奇怪装置

    problem loj-3144 题意概要:设函数 \(f(t)\) 的返回值为一个二元组,即 \(f(t)=((t+\lfloor \frac tB\rfloor)\bmod A, t\bmod B ...

  4. Luogu P5444 [APIO2019]奇怪装置

    题目 这种题目看上去就是有循环节的对吧. 在考场上,一个可行的方式是打表. 现在我们手推一下这个循环节. 记函数\(f(t)=(((t+\lfloor\frac tB\rfloor)\%A),(t\% ...

  5. [APIO2019] 奇怪装置

    $solution:$ 问题其实就是求两个式子的循环节. 钦定 $t\mod B=0$且 $(t\neq 0)$,其 $t$ 为循环节. 则将 $1$ 式拆开得 $\frac{t\times (B+1 ...

  6. P5444 [APIO2019]奇怪装置

    传送门 考虑求出最小的循环节 $G$ 使得 $t,t+G$ 得到的数对是一样的 由 $y \equiv t \mod B$ ,得到 $G$ 一定是 $B$ 的倍数,设 $zB=G$,则 $t,t+zB ...

  7. [APIO 2010] [LOJ 3144] 奇怪装置 (数学)

    [APIO 2010] [LOJ 3144] 奇怪装置 (数学) 题面 略 分析 考虑t1,t2时刻坐标相同的条件 \[\begin{cases} t_1+\lfloor \frac{t_1}{B} ...

  8. #3144. 「APIO 2019」奇怪装置

    #3144. 「APIO 2019」奇怪装置 题目描述 考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数 \(x\) 和 \(y\). 经过研究,科学家对该装置得出了一个 ...

  9. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

随机推荐

  1. 使用pytorch时所遇到的问题总结

    使用pytorch时所遇到的问题总结 1.ubuntu vscode切换虚拟环境 在ubuntu系统上,配置工作区文件夹所使用的虚拟环境.之前笔者误以为只需要在vscode内置的终端上将虚拟环境切换过 ...

  2. WCF通信简单学习实例

    最近在学习WCF通信,自己简单做个实例分享一下,环境是VS2015,使用的项目都是WPF的项目,其实大家用Winform或者Web项目也可以,都可以用的. 一.服务器端 1.创建WCF服务 服务名为W ...

  3. vue-列表动画

    实现列表动画 li { border: 1px dashed #999; margin: 5px; line-height: 35px; padding-left: 5px; font-size: 1 ...

  4. Web前端基础(1):HTML(一)

    1. HTML概述 1.1 什么是HTML HTML称为超文本标记语言,是一种标识性的语言.它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体.H ...

  5. nginx 配置不当导致目录遍历下载漏洞

    今天做百度杯的时候发现一个题很有意思. 点进题目,发现了一个js重定向到login.php,抓包发现请求的header中cookie=0,做过这种类似的题目,o==false,在请求头里面将cooki ...

  6. python:html元素解析

    说明 主要是总结我通过python实现html解析的一个初步的思路和记录实现基础html解析的代码.本解析方式仅仅 只是实现了html按元素解析的功能,具体元素的分类获取还得需要再进行进一步的优化. ...

  7. crawlscrapy简单使用方法

    crawlscrapy简单使用方法 1.创建项目:scrapy startproject 项目名例如:scrapy startproject wxapp windows下,cmd进入项目路径例如d:\ ...

  8. FOLDER

    一.建noTab的Folder Form:1.创建数据库对象:  create table  和相应的view. 2.基于模板Template.fmb创建一个新的Form:****.fmb  添加一个 ...

  9. Hive性能调优(一)----文件存储格式及压缩方式选择

    合理使用文件存储格式 建表时,尽量使用 orc.parquet 这些列式存储格式,因为列式存储的表,每一列的数据在物理上是存储在一起的,Hive查询时会只遍历需要列数据,大大减少处理的数据量. 采用合 ...

  10. C# 集合的交集 差集 并集 去重

    C# 集合的交集 差集 并集 去重 两个对象list,直接比较是不行的,因为他们存的地址不一样 需要重写GetHashCode()与Equals(object obj)方法告诉电脑 class Stu ...