ধরুন 8টি কারাগার পরপর রয়েছে এবং প্রতিটি কক্ষে একজন বন্দী আছে বা সেটি খালি। প্রতিটি দিনে, সেলটি দখল করা বা খালি আছে কিনা তা নিম্নলিখিত নিয়ম অনুসারে পরিবর্তিত হয় -
-
যদি একটি কক্ষের দুটি সংলগ্ন প্রতিবেশী থাকে যা উভয়ই দখলে থাকে বা উভয়ই খালি থাকে, তাহলে কোষটি দখল হয়ে যায়৷
-
অন্যথায়, এটি খালি হয়ে যায়।
আমরা নিম্নোক্তভাবে কারাগারের বর্তমান অবস্থা বর্ণনা করব:i-th কোষটি দখল করা হলে কোষ [i] হবে 1, অন্যথায় কোষ [i] হবে 0৷
তাই আমাদের কারাগারের প্রাথমিক অবস্থা আছে, তারপর N দিন পরে কারাগারের অবস্থা ফিরে আসবে।
সুতরাং ইনপুট যদি হয়:[0,1,0,1,1,0,0,1], এবং N =7, তাহলে আউটপুট হবে [0,0,1,1,0,0,0, 0]। তাই এই কারণ নিম্নলিখিত. সাত দিনের জন্য -
<পূর্ব>দিন 0:[0, 1, 0, 1, 1, 0, 0, 1]দিন 1:[0, 1, 1, 0, 0, 0, 0, 0]দিন 2:[0, 0 , 0, 0, 1, 1, 1, 0]দিন 3:[0, 1, 1, 0, 0, 1, 0, 0]দিন 4:[0, 0, 0, 0, 0, 1, 0 , 0]দিন 5:[0, 1, 1, 1, 0, 1, 0, 0]দিন 6:[0, 0, 1, 0, 1, 1, 0, 0]দিন 7:[0, 0 , 1, 1, 0, 0, 0, 0>এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি মানচিত্র m তৈরি করুন এবং একটি সেট তৈরি করুন যাকে বলা হয় পরিদর্শন করা৷
৷ -
যদি N 0 হয়, তাহলে কোষ ফেরত দিন
-
পরিদর্শন করা সেটে কক্ষ সন্নিবেশ করান
-
আমি 1 থেকে 14 রেঞ্জের মধ্যে
-
টেম্প অফ সাইজ 8
নামে একটি অ্যারে তৈরি করুন -
1 থেকে 6 পরিসরে j এর জন্য
-
যদি কোষ [j – 1] XOR কোষ [j + 1] =0, তাহলে temp[j] :=1
-
-
কোষ :=তাপমাত্রা
-
m[i] :=temp
-
পরিদর্শন
-এ তাপমাত্রা সন্নিবেশ করান
-
-
যদি N 14 দ্বারা বিভাজ্য হয়, তাহলে m[14] ফেরত দিন, অন্যথায় m[N mod 14]
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#includenamespace ব্যবহার করে std;void print_vector(vector v){ cout <<"["; for(int i =0; i জেলআফটারNDays(ভেক্টর এবং কোষ, int N) { মানচিত্র > m; if(N ==0) কোষ ফেরত দেয়; সেট <ভেক্টর > পরিদর্শন করা হয়েছে; visited.insert(cells); জন্য (int i =1; i<=14; i++ ){ ভেক্টর টেম্প(8); (int j =1; j <7; j++){ if(cells[j - 1] ^ কোষ[j + 1] ==0){ temp[j] =1; } } কোষ =তাপমাত্রা; m[i] =temp; visited.insert(temp); } ফেরত m[N % 14 ==0? 14 :N % 14]; }};প্রধান(){ ভেক্টর v1 ={0,1,0,1,1,0,0,1}; সমাধান ob; print_vector(ob.prisonAfterNDays(v1, 7));}
ইনপুট
[0,1,0,1,1,0,0,1]7
আউটপুট
[0,0,1,1,0,0,0,0]