[यह प्रश्न एक स्ट्रिंग के रन की गणना करने के लिए अनुवर्ती है ]
एक
p
स्ट्रिंग की अवधिw
किसी भी सकारात्मक पूर्णांक होती हैp
जैसे किw[i]=w[i+p]
जब भी इस समीकरण के दोनों पक्षों को परिभाषित किया जाता है। चलोper(w)
की सबसे छोटी अवधि के आकार निरूपितw
। हम कहते हैं कि एक स्ट्रिंगw
आवधिक iff हैper(w) <= |w|/2
।
तो अनौपचारिक रूप से एक आवधिक स्ट्रिंग सिर्फ एक स्ट्रिंग है जिसे कम से कम एक बार दोहराया जाने वाले दूसरे स्ट्रिंग से बनाया जाता है। एकमात्र जटिलता यह है कि स्ट्रिंग के अंत में हमें बार-बार स्ट्रिंग की एक पूरी प्रतिलिपि की आवश्यकता नहीं होती है जब तक कि यह पूरी तरह से कम से कम एक बार दोहराया जाता है।
उदाहरण के लिए, स्ट्रिंग पर विचार करें x = abcab
। per(abcab) = 3
के रूप में x[1] = x[1+3] = a
, x[2]=x[2+3] = b
और कोई छोटी अवधि नहीं है। स्ट्रिंग abcab
इसलिए आवधिक नहीं है। हालाँकि, स्ट्रिंग ababa
आवधिक है per(ababa) = 2
।
अधिक उदाहरण के रूप में abcabca
, ababababa
और abcabcabc
आवधिक भी हैं।
रेगेक्स पसंद करने वालों के लिए, यह पता लगाता है कि क्या कोई स्ट्रिंग आवधिक है या नहीं:
\b(\w*)(\w+\1)\2+\b
कार्य एक लंबी स्ट्रिंग में सभी अधिकतम आवधिक सबस्ट्रिंग का पता लगाना है । इन्हें कभी-कभी साहित्य में रन भी कहा जाता है।
एक-स्ट्रिंग
w
एक अधिक से अधिक समय-समय पर सबस्ट्रिंग (रन) अगर यह होता है समय-समय पर और न हैw[i-1] = w[i-1+p]
और न हीw[j+1] = w[j+1-p]
। अनौपचारिक रूप से, "रन" को उसी अवधि के साथ बड़े "रन" में शामिल नहीं किया जा सकता है।
क्योंकि दो रन समग्र स्ट्रिंग में विभिन्न स्थानों पर होने वाले वर्णों के एक ही तार का प्रतिनिधित्व कर सकते हैं, हम अंतराल द्वारा रन का प्रतिनिधित्व करेंगे। यहाँ अंतराल के संदर्भ में उपरोक्त परिभाषा को दोहराया गया है।
एक स्ट्रिंग में एक रन (या अधिकतम आवधिक सबस्ट्रिंग)
T
एक अंतराल[i...j]
हैj>=i
, जैसे कि
T[i...j]
अवधि के साथ एक आवधिक शब्द हैp = per(T[i...j])
- यह अधिकतम है। औपचारिक रूप से, न
T[i-1] = T[i-1+p]
है और न हीT[j+1] = T[j+1-p]
। अनौपचारिक रूप से, रन को समान अवधि के साथ बड़े रन में समाहित नहीं किया जा सकता है।
RUNS(T)
स्ट्रिंग में रन के सेट से नकारें T
।
रन के उदाहरण
चार अधिक से अधिक समय-समय पर सबस्ट्रिंग (रन) स्ट्रिंग में
T = atattatt
कर रहे हैंT[4,5] = tt
,T[7,8] = tt
,T[1,4] = atat
,T[2,8] = tattatt
।स्ट्रिंग
T = aabaabaaaacaacac
निम्नलिखित 7 अधिक से अधिक समय-समय पर सबस्ट्रिंग (रन) शामिल हैं:T[1,2] = aa
,T[4,5] = aa
,T[7,10] = aaaa
,T[12,13] = aa
,T[13,16] = acac
,T[1,8] = aabaabaa
,T[9,15] = aacaaca
।स्ट्रिंग
T = atatbatatb
में निम्नलिखित तीन रन होते हैं। वे हैं:T[1, 4] = atat
,T[6, 9] = atat
औरT[1, 10] = atatbatatb
।
यहां मैं 1-इंडेक्सिंग का उपयोग कर रहा हूं।
काम
कोड लिखें ताकि 2 पर शुरू होने वाले प्रत्येक पूर्णांक n के लिए, आप लंबाई के किसी भी बाइनरी स्ट्रिंग में निहित सबसे बड़ी संख्या में आउटपुट करें n
।
स्कोर
आपका स्कोर उच्चतम है जो n
आप 120 सेकंड में पहुंचते हैं जैसे कि सभी के लिए k <= n
, किसी और ने आपके मुकाबले अधिक सही उत्तर पोस्ट नहीं किया है। स्पष्ट रूप से यदि आपके पास सभी इष्टतम उत्तर हैं तो आपको उच्चतम n
पद के लिए स्कोर मिलेगा । हालांकि, भले ही आपका जवाब इष्टतम नहीं है, फिर भी आप स्कोर प्राप्त कर सकते हैं यदि कोई और इसे हरा नहीं सकता है।
भाषा और पुस्तकालय
आप अपनी पसंद की किसी भी उपलब्ध भाषा और लाइब्रेरी का उपयोग कर सकते हैं। जहां संभव है, अपने कोड को चलाने में सक्षम होना अच्छा होगा इसलिए कृपया अपने कोड को लिनक्स में कैसे चलाएं / संकलित करें, यदि संभव हो तो पूरा विवरण शामिल करें।
उदाहरण ऑप्टिमा
निम्नलिखित में: n, optimum number of runs, example string
।
2 1 00
3 1 000
4 2 0011
5 2 00011
6 3 001001
7 4 0010011
8 5 00110011
9 5 000110011
10 6 0010011001
11 7 00100110011
12 8 001001100100
13 8 0001001100100
14 10 00100110010011
15 10 000100110010011
16 11 0010011001001100
17 12 00100101101001011
18 13 001001100100110011
19 14 0010011001001100100
20 15 00101001011010010100
21 15 000101001011010010100
22 16 0010010100101101001011
मेरे कोड आउटपुट का वास्तव में क्या होना चाहिए?
n
आपके प्रत्येक कोड के लिए एक ही स्ट्रिंग और उसके रन की संख्या को आउटपुट करना चाहिए।
माई मशीन मेरी मशीन पर टाइमिंग चलाई जाएगी। यह एक मानक ubuntu एक AMD FX-8350 आठ-कोर प्रोसेसर पर स्थापित है। इसका मतलब यह भी है कि मुझे आपका कोड चलाने में सक्षम होना चाहिए।
उत्तर देना
- 49 सी में एंडर्स कासोर्ग द्वारा । सिंगल थ्रेडेड और L = 12 (2GB RAM) के साथ चलता है।
- 27 में cdlane द्वारा सी ।
{0,1}
, तो कृपया स्पष्ट रूप से बताएं। अन्यथा वर्णमाला संभवतः अनंत हो सकती है, और मैं नहीं देखता कि आपके टेस्टकेस को इष्टतम क्यों होना चाहिए, क्योंकि ऐसा लगता है कि आपने केवल {0,1}
तार भी खोजे हैं।
n
अप करने के लिए एक तिर्यक वर्णमाला पर तार खोजे 12
और इसने द्विआधारी वर्णमाला को कभी नहीं हराया। स्वाभाविक रूप से मैं उम्मीद करूंगा कि एक बाइनरी स्ट्रिंग इष्टतम होनी चाहिए, क्योंकि अधिक वर्ण जोड़ने से रन की न्यूनतम लंबाई बढ़ जाती है।