2017-01-30 54 views
0

我一直在hackerearth练习中尝试这个问题,这需要完成下面的工作。是否可以从每个给定的时间间隔中选择一个数字,而无需重复选择。在线时间的解决方案

问题

给定一个整数n从表示正数序列{0,1,2,3,4,5 ....... N-2,N-1}

我们正在的形式提供米范围(L,R),使得(0 < = L < = N-1)(0 < = R < = N-1)

如果(L < = R) (L,R)表示来自上述序列的数{L,L + 1,L + 2,L + 3 ....... R-1,R}

els e(L,R)表示数字{R,R + 1,R + 2,......,n-2,n-1} & {0,1,2,3 .... L-1 ,L}即数字环绕

例如

n = 5 ie {0,1,2,3,4} 
(0,3) signifies {0,1,2,3} 
(3,0) signifies {3,4,0} 
(3,2) signifies {3,4,0,1,2} 

现在我们必须选择从每个范围ONE(只有一个)数而不重复任何选择。我们必须说明是否可以从每个(和每个)范围中选择一个数字而不重复。

例测试用例

n = 5// numbers {0,1,2,3,4} 
// ranges m in number // 
0 0 ie {0} 
1 2 ie {1,2} 
2 3 ie {2,3} 
4 4 ie {4} 
4 0 ie {4,0} 

Answer is "NO" it's not possible. 

因为不能选择从范围4 0任意数量的,因为如果我们从它选择4我们不可能能够从范围4 4选择,并且如果选择0从它我们将不能够从0 0

我的方法选择 -

1)它可以在O使用recurrsion使用哈希映射检查选择的所有possibilitie从由侧的每个范围和侧进行(N * M)记录我们的选择。

2)我试着按顺序n或m即线性顺序。问题缺乏编辑性的解释。仅在编辑部分提到一个代码,没有任何评论和解释。我无法获得通过所有测试用例并被接受的人的代码线解决方案代码。

我无法理解代码中使用的逻辑/算法,它为什么工作?

请提出线性方法和逻辑背后因为问题有这些限制

1 <= N<= 10^9 
    1 <= M <= 10^5 
    0 <= L, R < N 

它要求的直链或作为我想nlogn溶液??

在社论中的代码也可以在这里http://ideone.com/5Xb6xw

警告--AFTER找我发现代码使用n和m interchangebly所以我想提的问题输入格式的代码所示。

输入格式

第一行包含测试用例,TC,其次是两个整数N,M-第一个描绘地球上的国家的数量,第二个描述范围的数量女友有给他。如果(X < = Y),则范围覆盖国家[X,X + 1 ... Y],否则范围覆盖[X,X + 1,... N-1,0,1 ...,Y]。

输出格式

打印“YES”,如果它是可以这样做,打印“NO”,如果事实并非如此。

回答

0

编辑解决方案有两个组件。

线性时间减少到一个问题在普通的间隔

假设以避免简单的情形该输入间隔的数量小于n。

第一种是将问题减少到间隔不环绕的问题,如下所示。给定一个区间[L,R],如果L≤R,则发出两个区间[L,R]和[L + n,R + n];如果L> R,则发出[L,R + n]。减少的简单方向表明,如果原始问题有解决方案,那么减少的问题有一个解决方案。对于L≤R的[L,R]分配一个数字k,将[L,R]和k + n分配给[L + n,R + n]。对于L> R的[L,R],分配k中的任意一个,k + n属于[L,R + n]。除了分别为[L,R]和[L + n,R + n]的k和k + n的双重赋值外,每个区间都有它自己的残基类mod n,所以赋值不冲突。

反过来说,使用Hall's marriage theorem来证明减少的难度方向(如果原始问题没有解,那么减少的问题就没有解)。根据霍尔准则,对于某些k,一个无法解决的原始问题具有一组k个输入区间,其联合的大小小于k。我们首先论证存在这样一组输入区间,它们的联合是一个(循环)区间(假设不是全部为0..n-1)。将联合分解为组成它的最大(圆形)间隔集合。每个输入间隔恰好包含在这些间隔中的一个中。通过平均参数,某个最大(圆形)区间包含比其大小更多的输入区间。我们通过“解除”这个反例来减少问题。给定最大(圆形)区间[L *,R *],如果L *≤R*,则将其提升至常规区间[L *,R *],如果L *> R *则将其提升至[L *,R * + n] R *。请按照此间隔中包含的循环间隔进行操作。显示这个提升的反例满足Hall的标准是单调乏味但直截了当的,这意味着减少的问题没有解决方案。

O(米日志米),用于普通间隔

这-time解决方案是一个扫描线算法。按较低端点对间隔进行排序并按顺序对其进行扫描。我们设想扫描线从低端点移动到低端点。保持与扫描线相交并没有被分配数字的一组间隔,由高端端点排序。当扫掠线即将移动时,将旧位置和新位置之间的数字分配给该组中的间隔,优先分配给上端点最低的那些。这个策略的正确性应该是清楚的:可以被分配一个数字但是被传递的间隔至少与被分配的间隔一样多(作为超集的意义),所以我们决不会做出选择我们有理由感到遗憾。

相关问题