#P1044. Date bugs

    ID: 45 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>搜索枚举Mid-Central European Regional Contest 1999

Date bugs

描述

有传言称,很多计算机存在与 2000 年相关的问题。由于它们仅用两位数字表示年份,日期会突然从 1999 年变为 1900 年。实际上,还有许多其他类似的问题。在某些系统中,使用 32 位整数来存储从某个固定日期开始经过的秒数。按照这种方式,当经过\(2^{32}\)秒(约 136 年)时,日期会跳回到那个固定日期。

那么,对于所有这些混乱情况该怎么办呢?假设你有两台计算机\(C1\)和\(C\),它们存在两种不同的错误:一台存在普通的 Y2K 错误(即从 2000 年变为\(a1 = 1900\)),另一台在 2040 年时会变为\(a2 = 1904\)。假设\(C1\)显示的年份\(y1 = 1941\),\(C2\)显示的年份\(y2 = 2005\)。那么你知道以下情况(假设不存在其他错误):真实年份不可能是 1941 年,因为在那种情况下,两台计算机都会显示(相同的)正确日期。如果年份是 2005 年,\(y1\)会是 1905 年,所以这也不可能。仅看\(C1\),我们知道真实年份是以下年份之一:1941 年、2041 年、2141 年等等。现在我们可以计算出\(C2\)在这些年份会显示的年份:1941 年、1905 年、2005 年等等。所以实际上,真实年份可能是 2141 年。

手动计算所有这些情况工作量很大。(而且你肯定不想每次忘记真实年份时都去计算。)所以,你的任务是编写一个程序来为你进行计算:在知道其他计算机显示的年份\(yi\)以及它们的错误情况(从\(bi\)变为\(ai\))的情况下,找到第一个可能的真实年份。请注意,年份\(ai\)肯定不会在计算机制造年份之后。由于真实年份不能早于计算机的制造年份,你要找的年份不能早于任何一个\(ai\)。

输入

输入文件包含多个测试用例,需要计算每个测试用例的真实年份。每个测试用例的描述从包含整数\(n\)(\(1 \leq n \leq 20\))的一行开始,\(n\)表示计算机的数量。然后,对于每台计算机,有一行包含三个整数\(yi\)、\(ai\)、\(bi\)(\(0 \leq ai \leq yi \leq bi < 10000\))。\(yi\)是计算机显示的年份,\(bi\)是出现错误的年份(即计算机无法显示的第一个年份),\(ai\)是计算机在\(bi\)年份时显示的年份。

输入以\(n = 0\)的测试用例结束,该测试用例不进行处理。

输出

对于每个测试用例,输出一行“Case #k:”,其中\(k\)是测试用例的编号。然后,输出一行“The actual year is z.”,其中\(z\)是最小的可能年份(满足所有计算机的情况且大于或等于\(u\))。如果不存在小于 10000 的这样的年份,则输出“Unkown bugs detected.”。在每个测试用例后输出一个空行。

2 
1941 1900 2000 
2005 1904 2040 
2 
1998 1900 2000 
1999 1900 2000 
0 
Case #1: 
The actual year is 2141. 

Case #2: 
Unknown bugs detected. 

来源

1999 年中欧地区竞赛