【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. 13. 罗马数字转整数(C#)

    看到这道题,存在键值对,所以先建个泛型字典,把键值填进去. 由于这道题存在两个字符表示一个数字的情况,所以在for循环的时候判断一下,看看当前字符串中循环到的字符是否和下一个字符能够组成存在在字典里的 ...

  2. Python【day 14-5】sorted filter map函数应用和练习

    '''''' ''' 内置函数或者和匿名函数结合输出 4,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=[‘oldboy’,'alex','wusir'] 5,用m ...

  3. sqlserver 问题来了,视图不会自动更新,如果是用*创建的

    奇葩问题一个 create view时候用的select * 关联了几个表创建的. 后修改select *  的表,结果悲剧了. select * from 视图得到的结果绝对让你想哭.不报错,不提示 ...

  4. Xcode 7.3 解决自定义类无法自动联想

    正在苦拼的码友们,最近是不是觉得在写代码的时候很是头疼,甚至连个最基本的系统自带的语法啊.单词啊等等都不能联想了,之前习惯了的码友们,这个时候肯定会觉得是不是自己写错了,然后也往下翻了一大篇,还是找不 ...

  5. [转]HotSpot VM GC 的种类

    原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037029.html collector种类 GC在 HotSpot VM 5.0里 ...

  6. git设置多账户

    1.设置公司gitlab 0.先给git 设置一个全局的账户, 如果是公司的电脑环境, 全局的账户当然是用你在公司的邮箱了 git config --global user.name "yo ...

  7. java.lang.IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys.

    创建Spring Cloud Sleuth对应Zipkin服务,引入依赖: <dependency> <groupId>io.zipkin.java</groupId&g ...

  8. 将Docker容器转移至另一服务器

    1 把当前的容器提交为一个镜像: docker commit 容器名 镜像名 2 将镜像存为tar文件 docker save 镜像名 >备份文件.tar 3将 备份文件.tar 复制到目的主机 ...

  9. 删除带外键的表【foreign key constraint fails】报错

    title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...

  10. C学习笔记(4)--- 指针的应用(第一部分)

    1.指针(pointer)概念: 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: ...