设在第 $x$ 天二人都 lucky,则有 $\DeclareMathOperator{\lcm}{lcm}$
$ x = y_a t_a + R_a $
$ x= y_b t_ b + R_b$

约束条件:
$ l_a \le R_a \le r_a$,$l_b \le R_b \le r_b$
$ y_a, y_b \ge 0$

写成同余方程组

\begin{cases}
x \equiv R_a \pmod{t_a} \\
x \equiv R_b \pmod{t_b}
\end{cases}

设 $x_0$ 是上述同余方程组的一个特解,则其通解可表为 $x = x_0 + k\lcm(t_a, t_b)$,$k\in\mathbb Z$ 。

容易证明,同余方程组

\begin{cases}
x \equiv r_1 \pmod{m_1} \\
x \equiv r_2 \pmod{m_2}
\end{cases}
有解的充要条件是 $\gcd(m_1,m_2) \mid (r_1 - r2)$,此充要条件亦可写成 $r_2 = r_1 + k \gcd(m_1,m_2), k\in\mathbb Z$,或者写成 $r_1 \equiv r_2 \pmod{\gcd(m_1,m_2)}$ 。

解法:二分答案。
实现:http://codeforces.com/contest/1055/submission/45569689

总结

求解形如
\begin{equation}
\begin{cases}
x \equiv a_1 \pmod{m_1} \\
x \equiv a_2 \pmod{m_2} \\
\vdots \\
x \equiv a_n \pmod{m_n}
\end{cases} \label{E:0}
\end{equation}
的同余方程组。

考虑两个方程构成的同余方程组
\begin{equation}
\begin{cases}
x \equiv a_1 \pmod{m_1} \\
x \equiv a_2 \pmod{m_2}
\end{cases}\label{E:1}
\end{equation}

\begin{equation}
\begin{cases}
x = m_1 s + a_1 \\
x = m_2 t + a_2
\end{cases}\label{E:2}
\end{equation}
$s, t$ 满足方程
\begin{equation}
m_1 s + a_1 = m_2 t + a_2 \label{E:3}
\end{equation}
根据裴蜀定理,\eqref{E:3} 有解的充要条件是 $\gcd(m_1,m_2)\mid (a_1 - a_2)$ 。以下假设此条件成立,并令 $d = \gcd(m_1,m_2)$ 。\eqref{E:3} 亦可写成
\begin{equation}
m_1 s = m_2 t + (a_2 - a_1) \label{E:4}
\end{equation}
方程 \eqref{E:4} 等价于
\begin{equation}
m_1 s \equiv a_2 - a_1 \pmod{m_2}\label{E:5}
\end{equation}
注意:一个不定方程等价于一个同余方程。要熟悉这两种形式的相互转化。
方程 \eqref{E:5} 又等价于
\begin{equation}
\frac{m_1}{d} s \equiv \frac{a_2 - a_1}{d} \pmod{ \frac{m_2}{d} } \label{E:6}
\end{equation}
解得
\begin{equation*}
s \equiv \left(\frac{m_1}{d}\right)^{-1}\frac{a_2 - a_1}{d} \pmod{ \frac{m_2}{d} } \label{E:7}
\end{equation*}
其中 $\left(\frac{m_1}{d}\right)^{-1}$ 表示 $\frac{m_1}{d}$ 在模 $ \frac{m_2}{d} $ 下的逆元,可用扩展欧几里得算法求得。令 $ b = \left(\frac{m_1}{d}\right)^{-1}\frac{a_2 - a_1}{d} $,有
\begin{equation}
s = k \frac{m_2}{d} + b \label{E:8}
\end{equation}
将 \eqref{E:8} 代入 \eqref{E:2},得
\begin{equation}
x = k \frac{m_1m_2}{d} + m_1 b + a_1 \label{E:9}
\end{equation}

\begin{equation}
x \equiv m_1 b + a_1 \pmod{ \frac{m_1 m_2}{d}} \label{E:10}
\end{equation}
至此,我们将同余方程组 \eqref{E:1} 化成了等价(同解)的同余方程 \eqref{E:10} 。

我们证明了

若 \eqref{E:1} 有解,则其在模 $\lcm(m_1,m_2)$ 下有唯一解 $x_0 $。

故可用 $x \equiv x_0 \pmod{\lcm(m_1,m_2)}$ 取代 \eqref{E:0} 中的前两个方程,不断如此操作,最后将得到 $x \equiv a \pmod{\lcm(a_1, a_2, \dots, a_m)}$,这样就得到了 \eqref{E:0} 的通解,也意味着

若 \eqref{E:0} 有解,则其在模 $\lcm(m_1,m_2, \dots, m_n)$ 下有唯一解。

后记

Miskcoo 的文章 从 \eqref{E:3} 的特解和通解入手证明了 \eqref{E:2} 在模 $\lcm(m_1,m_2)$ 下有唯一解,其思路更为简洁。

用扩展 Euclid 算法求出 \eqref{E:3} 的特解 $s',t'$,即可得到 \eqref{E:2} 的特解 $x_0 = s'm_1 + a_1$,然后用 $x \equiv x_0 \pmod{\lcm(m_1, m_2)}$ 替换 \eqref{E:0} 中的前两个方程。

Reference

https://blog.csdn.net/qq_29980371/article/details/71053219

http://blog.miskcoo.com/2014/09/chinese-remainder-theorem

Mail.Ru Cup 2018 Round 2 Problem C Lucky Days的更多相关文章

  1. 【Mail.Ru Cup 2018 Round 2 C】 Lucky Days

    [链接] 我是链接,点我呀:) [题意] [题解] 题解的作者: manish_joshi 对于任意一个k 因为那条直线(关于x,y的方程可以看出一条直线)的斜率>= 所以肯定会经过第一象限. ...

  2. [codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思维+数学]

    https://codeforces.com/contest/1056/problem/B 题意:输入n,m    求((a*a)+(b*b))%m==0的(a,b)种数(1<=a,b<= ...

  3. [codeforces Mail.Ru Cup 2018 Round 1 D][ xor 操作]

    http://codeforces.com/contest/1054/problem/D 题目大意:一个序列a1 a2...an,可以对若干个元素进行取反,使所得的新序列异或和为0的区间个数最多. 题 ...

  4. Mail.Ru Cup 2018 Round 3 B. Divide Candies

    题目链接 分析一下题意可以得到题目要求的是满足下面这个 公式的不同的i,ji,ji,j的方案数; 即(i2+j2)mod&ThinSpace;&ThinSpace; m=0 (n ≤  ...

  5. Mail.Ru Cup 2018 Round 3

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  6. Mail.Ru Cup 2018 Round 2

    A:阅读理解. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  7. Mail.Ru Cup 2018 Round 2 Solution

    A. Metro Solved. 题意: 有两条铁轨,都是单向的,一条是从左往右,一条是从右往左,Bob要从第一条轨道的第一个位置出发,Alice的位置处于第s个位置,有火车会行驶在铁轨上,一共有n个 ...

  8. Mail.Ru Cup 2018 Round 3 Solution

    A. Determine Line Water. #include <bits/stdc++.h> using namespace std; ]; int main() { while ( ...

  9. Mail.Ru Cup 2018 Round 1

    A. Elevator or Stairs? 签. #include <bits/stdc++.h> using namespace std; ]; int main() { while ...

随机推荐

  1. 【51nod1443】路径和树(堆优化dijkstra乱搞)

    点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...

  2. bazel安装

    https://blog.csdn.net/cxq234843654/article/details/70861155 sudo apt-get install openjdk-8-jdk echo ...

  3. C# 理解FileInfo类的Open()方法

    我们在对文件进行读写操作之前必须打开文件,FileInfo类为我们提供了一个Open()方法,该方法包含了两个枚举类型值的参数,一个为FileMode枚举类型值,另一个为FileAccess枚举类型值 ...

  4. java: 非法字符: \65279

    IDEA导入项目后,编译的时候出现Error:(1, 1) java: 非法字符: \65279: 修改:找到编译报错的文件,用Notepad++工具,以UTF-8无BOM格式编码保存,然后重新编译即 ...

  5. Oracle ORA-01722 无效数字

    ORA-01722 无效数字 以下几种情况,数据库会报“ORA-01722 无效数字”错误: ① 对于两个类型不一致,一个“数字类型”,一个“非数字类型”进行赋值,或者比较操作: ② to_numbe ...

  6. C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

    学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...

  7. mysql--连接查询(内外连接)

    连接查询又称多表查询,查询到的字段来自于多个表中的数据. 一. 连接查询的分类和语法 1.分类 按标准分: 92标准:只支持内连接 99标准:支持内连接和.外连接和全外连接 功能进行分类: 内连接:i ...

  8. 【转】JSP提交表单

    设计表单页面,它是静态页面,使用HTML编写,而且使用了JavaScript脚本语言来验证填写表单数据,表单页面为form.htm,代码如下: <html><head>< ...

  9. wireshark_1.6.2 使用笔记

    表示ip1是否有访问ip2,进行抓包

  10. 3分钟快速了解FastDFS

    1.介绍 FastDFS是一个C语言写的阿里开源的分布式文件存储服务器主要由两部分组成:1.Tracker server ——————主要负责调度和追踪Storage状态(调度服务器),默认监听端口: ...