题目

这种题目看上去就是有循环节的对吧。

在考场上,一个可行的方式是打表。

现在我们手推一下这个循环节。

记函数\(f(t)=(((t+\lfloor\frac tB\rfloor)\%A),(t\%B))\),那么\(f(t_1)=f(t_2)\)的充要条件为:

\[t_1+\lfloor\frac {t_1}B\rfloor\equiv t_2+\lfloor\frac {t_2}B\rfloor(mod\ A)
\]

\[t_1\equiv t_2(mod\ B)
\]

看到第二个很熟悉的式子,我们不妨设\(t_2=t_1+xB(x>0)\),代入第一个式子得到

\[t_1+\lfloor\frac {t_1}B\rfloor\equiv t_1+xB+\lfloor\frac {t_1+xB}B\rfloor(mod\ A)
\]

后面那坨东西我们把它化简一下,拆开和左边的抵掉就变成了

\[xB+x\equiv0(mod\ A)
\]

\[A|x(B+1)
\]

把\(B+1\)移到左边去

\[\frac A{(A,B+1)}|x
\]

也就是说最小循环节为\(xB=\frac{AB}{(A,B+1)}\)。

剩下的做一个简单的区间覆盖即可。

区间覆盖的话左端点升序排序,记录最大右端点即可。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
namespace IO
{
char ibuf[(1<<21)+1],*iS,*iT;
char Get(){return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++)):*iS++);}
ll read(){ll x=0;int c=Get();while(!isdigit(c))c=Get();while(isdigit(c))x=x*10+c-48,c=Get();return x;}
}
using namespace IO;
const int N=1000007;
struct node{ll l,r;}a[N<<1];
int operator<(node a,node b){return a.l<b.l;}
ll max(ll a,ll b){return a>b? a:b;}
int main()
{
int n=read(),m=0,i;ll A=read(),B=read(),M=A/__gcd(A,B+1)*B,l,r,ans=0,mx=0;
for(i=1;i<=n;++i)
{
l=read(),r=read();
if(r-l+1>=M) return !printf("%lld",M);
l%=M,r%=M;
if(l>r) a[++m]=(node){0,r},a[++m]=(node){l,M-1}; else a[++m]=(node){l,r};
}
sort(a+1,a+m+1);
for(i=1;i<=m;++i)
{
if(a[i].l>mx) ans+=a[i].l-mx;
mx=max(mx,a[i].r+1);
}
if(mx<M) ans+=M-mx;
return !printf("%lld",M-ans);
}

Luogu P5444 [APIO2019]奇怪装置的更多相关文章

  1. P5444 [APIO2019]奇怪装置

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

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

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

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

    [LOJ#3144][APIO2019]奇怪装置(数论) 题面 LOJ 题解 突然发现\(LOJ\)上有\(APIO\)的题啦,赶快来做一做. 这题是窝考场上切了的题嗷.写完暴力之后再推了推就推出正解 ...

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

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

  5. 题解-APIO2019奇怪装置

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

  6. [APIO2019] 奇怪装置

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

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

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

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

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

  9. [APIO2019T1]奇怪装置

    考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数x和y.经过研究,科学家对该装置得出了一个结论:该装置是一个特殊的时钟,它从过去的某个时间点开始测量经过的时刻数t,但该装 ...

随机推荐

  1. 【GDKOI2013选拔】大LCP

    题目 LCP就是传说中的最长公共前缀,至于为什么要加上一个大字,那是因为-你会知道的. 首先,求LCP就要有字符串.既然那么需要它们,那就给出n个字符串好了. 于是你需要回答询问大LCP,询问给出一个 ...

  2. org.hibernate.NonUniqueObjectException 原因及解决办法

    问题 使用hibernate更新对象时,出现如下错误: org.hibernate.NonUniqueObjectException: a different object with the same ...

  3. 访问SpringBoot中的Swagger的方法

    1.首先启动springboot+swagger的工程. 2.在application.yml里面查看服务的端口号,比如这里是9510. 3.访问URL:http://localhost:9510/t ...

  4. 面向对象this关键字的内存图解

    this:哪个对象调用方法,this就代表哪个对象 案例1: //定义老师类 class Teacher { private String name; private int age; public ...

  5. 论文阅读:Flow-level State Transition as a New Switch Primitive for SDN

    Name of article:Flow-level State Transition as a New Switch Primitive for SDN Origin of the article: ...

  6. asp.net ajax传递Json给aspx.cs后台 webmethod方法传递json

    1.提取一个向后台写入数据的方法 ///向后台cs页面请求数据的方法 function myPost(url,data,func) { $.ajax({ type: "post", ...

  7. Chrome 66 新增异步剪贴板 API

    在过去的几年里我们只能使用 document.execCommand 来操作剪贴板.不过,这种操作剪贴板的操作是同步的,并且只能读取和写入 DOM. 现在 Chrome 66 已经支持了新的 Asyn ...

  8. LeetCode_1114.按顺序打印(多线程)

    LeetCode_1114 LeetCode-1114.按顺序打印 我们提供了一个类: public class Foo { public void one() { print("one&q ...

  9. webrtc相关概念

    SDP Session Description Protocol Session Traversal Utilities for NAT(STUN)Traversal Using Relays aro ...

  10. ORACLE同义词使用

    多用户协同开发中,可以屏蔽对象的名字及其持有者.如果没有同义词,当操作其他用户的表时,必须通过user名.object名的形式,采用了Oracle同义词之后就可以隐蔽掉user名, 当然这里要注意的是 ...