Reading Time: 1 minute

UVa Online Judge এর কথা খুব পরিচিত তাদের কাছে,যারা কম্পিউটার প্রোগ্রামিং প্রবলেম সল্ভ করার জন্য অনলাইনে ঘাঁটাঘাঁটি করে থাকে। চমৎকার এই সাইটটার প্রবলেমগুলো ওতোটা এডভান্সড না হলেও,টিপিকাল কিন্তু খুব মজার কিছু সমস্যা দিয়ে খুব সুন্দরভাবেই সাইটটা সাজানো হয়েছে। আমাদের আজকের এই ছোট্ট পর্বটা সাজানো হয়েছে এই সাইটটির 11661 নং সমস্যা , Burger Time  নিয়ে ।

এই প্রবলেম টি পুরোটাই simulation or Ad -hoc Problem, Ad- hoc  প্রবলেম মানে  যেই প্রবলেম গুলোর Clue প্রশ্নে দেয়া থাকে, শুধুমাত্র তথ্যগুলোকে প্রশ্নের আলোকে [simulation] নিয়ম করে সাজিয়ে প্রশ্নে লিখতে হয় ।

প্রশ্নের লিঙ্কঃ https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=78&page=show_problem&problem=2708

আসলে এতে চিন্তা করার মত কোন কিছুই নেই । এখানে R = Restaurant, D = Drugstore, Z = Resturant + Drugstore, আমাদের কাজ এখানে সবচেয়ে কাছের R আর D  এর মধ্যে দূরত্ব বের করা , এতে সবচেয়ে ভাল উপায়, প্রতি step এ R এবং D  এর পজিশন variable  এর মধ্য রাখা আর এ দুটির মধ্যে দূরত্ব বের করা [ দূরত্ব বের করা মানে ভ্যারিয়েবল এর পজিশন বিয়োগ করা ।  যেমন – R…D এখানে R position = 0 and D position = 4 so distence = 4 – 0 = 4 ,  এটি এ দূরত্ব । আবার যদি আমরা কোথাও Z  পাই তাহলে আমাদের উত্তর ০ , কেননা ,  Z  মানে সেখানে  Restaurant  আর  Drugstore  ২ টি আছে এবং  এ সকল ক্ষেএে এদের মাঝে দূরত্ব ০ ।

তাহলে আমরা Z পেলে  answer = 0  বলব , আর লুপ চালিয়ে per step  এ ২টি  variable  এর মাঝে R and D  এর পজিশন  save  করে রাখব, আর এ জন্য আমরা নিচের condition  গুল ও ব্যবহার করতে পারি ,

First  initialization :  Rposs = -1;
Zposs= – 1;
Dposs  = -1;
ans = 0;
cnt = 0;

then use loop {

যেহেতু আমরা lowest answer  এর value চাই, তাই  cnt = 1  এর জন্য আমরা  answer  save   করব ,  অন্য গুলোতে lowest answe comapre   করব,  এখানে abs() use  না করে করা হয়েছে , abs use  করলে  condition  কমে যাবে [ if (Rpss > Dposs) else use  না করে directly ans = abs(Rposs –  Dposs)  লেখা যাবে ।

if(Rposs >= 0 && Dposs >= 0) {
cnt++;
if(cnt == 1) {
if(Rposs > Dposs) {
ans = Rposs – Dposs;

}

else {
ans = Dposs – Rposs;

}

}
else if(cnt > 1) {
if(Rposs > Dposs) {
if(ans > Rposs – Dposs) {
ans = Rposs – Dposs;

}
}
else {
if(ans > Dposs – Rposs) {
ans = Dposs – Rposs;

}

}

}

}

আর possition save  করার জন্য লুপ চালিয়ে varable  এর মধ্যে value save  করতে হবে,  যেমন –  if (string[i] == ‘R) {

Rposs = i } , if(string[i] == ‘D’)  Dposs = i} and if (string[i] == ‘Z) ans = 0 ; break.

তাহলে খুব সহজ  ভাবে আর মজা করে তোমরা Uva  এর এই মজার প্রব্লেমটি solve  করতে পারবে । 🙂

%d bloggers like this: