इस समस्या में, हमें केवल 'M' और 'F' वर्णों और एक समय t से मिलकर बनी एक स्ट्रिंग दी जाती है। हमारा काम है एक निश्चित समय पर कतार की व्यवस्था का पता लगाना ।
स्ट्रिंग बस में प्रवेश करने के लिए एक आम कतार में खड़े लोगों को परिभाषित करती है। कतार में लगे सभी पुरुष इतने शिष्ट हैं कि यदि वे किसी भी समय अपने पीछे एक महिला को देखते हैं तो वे उनके साथ स्थान बदल लेते हैं। बस में प्रवेश करने के लिए t इकाई समय शेष है और प्रत्येक एक्सचेंज में एक इकाई समय लगता है। कतार को फिर से व्यवस्थित करके जब बस आती है तो हमें स्थिति ढूंढनी होती है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : queue = "MFMMFF" , t = 3 Output : FFMFMM
स्पष्टीकरण -
In T = 0 -> 1, 'M' at position 1 changes position with 'W' at 2 and 'M' at position 4 changes position with 'W' at 5. Queue becomes - "FMMFMF". In T = 0 -> 1, 'M' at position 3 changes position with 'W' at 4 and 'M' at position 5 changes position with 'W' at 6. Queue becomes - "FMFMFM". In T = 0 -> 1, 'M' at position 2 changes position with 'W' at 3 and 'M' at position 4 changes position with 'W' at 5. Queue becomes - "FFMFMM".
समाधान दृष्टिकोण
समस्या को हल करने का एक सरल तरीका है कतार T बार का प्रतिनिधित्व करने वाली स्ट्रिंग को पार करना। "एमएफ" जोड़े की घटना का पता लगाएं और एम और एफ की स्थिति को स्वैप करें। और अंत में अंतिम स्ट्रिंग लौटाएं।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <iostream> using namespace std; string rearrageQueue(int n, int t, string queue) { for (int i = 0; i < t; i++) for (int j = 0; j < n - 1; j++) if (queue[j] == 'M' && queue[j + 1] == 'F') { queue[j] = 'F'; queue[j + 1] = 'M'; j++; } return queue; } int main() { int n = 6, t = 3; string queue = "MFMMFF"; cout<<"The queue after time is over : "<<rearrageQueue(n, t, queue); return 0; }
आउटपुट
The queue after time is over : FFMFMM