我正在尋找一種可用於解決此問題的快速算法:給出A和B整數(範圍[0,10^18]),並給出一個列表N(N < = 1000)個數字子串;目標是計算包含N個子串中任何一個的[A,B]範圍內的所有數字。我們總是A < = B,數字子字符串也是[0,10^18]範圍內的整數。例1:如果A = 10,B = 22,並給出N = 2個子串= {1,10};計數將是= 11;計數數字:10-> 19和21.用於在數值範圍內計數子串的算法
例2:如果A = 175,B = 201,並給出N = 3個子串= {55,0,200};計數將是= 4;計數數字:180,190,200和201.
直接的方法是分析[A,B]範圍內的每個整數,但是它不是一個解決方案,因爲範圍可以是這樣的大(直到10^18整數)。
爲減少問題的複雜性,我做的第一件事就是從N個子串的原始列表中刪除一些無用的子串,例如「沒有子串包含在另一個子串中」。例如:{1,10}變爲{1},{55,0,200}變爲{55,0}。這不會改變最終計數。
接下來,即使假設我們可以在[A,B]範圍內得到一個子字符串的計數,我們仍然無法將此計數與列表中其他子字符串的計數相加,因爲一個數字可以包含許多子字符串,而且不應該不止一次計算。
任何想法來解決問題和得到想要的數量?
+1用於刪除無用的子字符串 – avrahamcool
這個問題是否有時間限制? – Chen
@vbmaster,這是ACM編程競賽中的一個問題,通常是幾秒鐘的時間限制......但對我來說,即使是在幾分鐘內的正確解決方案也是需要的...... – Mounir