Posts

Showing posts from July, 2019

STL পরিচিতি । পর্ব - ০৩

আজকের আলোচ্য টপিক ঃ ম্যাপ  মনে করো , তোমাকে তোমার ক্লাসের সকল ছাত্রের কোন বিষয়ে ১০০ তে প্রাপ্ত নাম্বার দেয়া হলো। এখন , তোমাকে বলা হলো ১ থেকে ১০০ পর্যন্ত কোন নাম্বার কতজন ছাত্র পেয়েছে? যারা মোটামুটি প্রব্লেম সলভ করেছো তাদের মাথায় যে সলুশ্যন এসেছে সেটি হলোঃ একটা অ্যারে নিবো ১০১ সাইজের! যেখানে সকল ইনডেক্সের ভ্যালু প্রাথমিকভাবে ০ থাকবে।   প্রত্যেক ছাত্রের নাম্বার পাওয়া মাত্রই অ্যারের ততো তম ইন্ডেক্সের ভ্যালু  ১++ করে দিবো। কাজ শেষ!!! এখন যদি আমি তোমাদেরকে এক আজব স্কুলের নাম বলি যেখানে কোন ছাত্রের নাম্বার নেগেটিভ ও হতে পারে! সেই স্কুলের স্যার রা মার্কস দেয় -১০০ থেকে +১০০ পর্যন্ত। এখন তোমাদের কেউ কেউ হয়তো একটু কনফিউজড! কিন্তু এমন কিছু চালাক প্রোগ্রামার তোমার আশেপাশে আছে যারা এই সমস্যা টি ও অ্যারে দিয়েই সমাধান করে ফেলবে!!! কি পোলাপান রে ভাই! আর তুমি যদি এখনো সমাধান টা না পাও তাহলে এই সমাধান টা তোমার চিন্তা করার জন্যই রেখে দিলাম।  এবার তাহলে আরো হার্ড প্রব্লেম দেয়া যাক। তোমাকে একটা ক্লাসের N জন ছাত্রের নাম দেয়া আছে।  তোমাকে বলতে হবে সেই ক্লাসে "Hablu" নামে

STL পরিচিতি । পর্ব - ০২

আজকের পর্বে আলোচনার বিষয় 2D ভেক্টর।  আমরা যারা অলরেডি 2D অ্যারের সাথে পরিচিত এই পর্বটি তাদের জন্য। 2D অ্যারে তে আমরা একটা ম্যাট্রিক্স ইনপুট নিতে পারি। একটা 1D  অ্যারে র কোন এলিমেন্ট প্রকাশ করতে একটি ভ্যারিয়েবল প্রয়োজন। 1D অ্যারের ক্ষেত্রে   ara[x]  তার X তম এলিমেন্ট বোঝায়। তেমনি একটা ২D অ্যারে র কোন এলিমেন্ট প্রকাশ করতে দুটি ভ্যারিয়েবল i , j ব্যাবহার হলে ara[i][j] বলতে বোঝায় i তম সারির j তম কলাম এর ভ্যালু।  ধরো, 2     0     7 5     6     9 এই ম্যাট্রিক্স তথা 2D অ্যারে ইনপুট নিতে হবে। তাহলে আমরা কিভাবে নেই?  নিশ্চই এভাবে? এখানে ara[n][m] ডিক্লেয়ার করার মানে হচ্ছে আমার 2D অ্যারে তে n টি সারি আর m টি কলাম থাকবে। আউটার লুপের কাউন্টার ভ্যারিয়েবল অ্যারের সারি নং এবং ইনার লুপের কাউন্টার ভ্যারিয়েবল অ্যারের কলাম নং প্রকাশ করে। এবার আসা যাক এই একই কাজ কিভাবে 2D ভেক্টর দিয়ে করা যায়!   তাহলে আমি কি করলাম এখানে?  প্রথম লাইনে একটা 2D ভেক্টর ডিক্লেয়ার করে নিলাম। দ্বিতীয় লাইনে একটা 1D টেম্পোরারি ভেক্টর ডিক্লেয়ার করলাম। যার মধ্যে আমি প্রতিবার একটি নির্দিষ্ট সারির সক

Light OJ - 1297 - Largest Box - Tutorial

Image
এই প্রব্লেমে আমাদের L দৈর্ঘ্য এবং W প্রস্থের একটা পেপার দেয়া থাকবে। এই পেপারের চার কোণা থেকে X^2 ক্ষেত্রফল বিশিষ্ট চারটি বর্গ ক্ষেত্র কেটে নিতে হবে যাতে অবশিষ্ট পেপার দিয়ে সর্বোচ্চ আয়তনের একটি ঢাকনাবিহীন বক্স বানানো যায়। এই প্রব্লেমের সল্যুশন নিয়ে চিন্তা করার আগে অন্য একটা প্রব্লেম নিয়ে চিন্তা করা যাক।  মনে কর, তোমাকে একটি সংখ্যা X দেয়া আছে। X কে এমন দুটি সংখ্যার যোগফল হিসেবে প্রকাশ করতে হবে যাদের গুণফল সর্বোচ্চ হয়। এক্ষেত্রে ১০=৫+৫ গুণফল ২৫। ১১=৫+৬ গুণফল ৩০।  এই প্রব্লেমেও তোমাকে একইভাবে আয়তন ম্যাক্সিমাইজ করতে হবে। আর তুমি জানো VOLUME = LENGTH * WIDTH * HEIGHT তোমাকে দৈর্ঘ্য প্রস্থ দেয়া থাকবে। উচ্চতা X এর এমন একটি মান বের করতে হবে যাতে আয়তন সর্বোচ্চ হয়। বুঝতেই পারছো উচ্চতা বাড়লে দৈর্ঘ্য , প্রস্থ কমবে।  আগের প্রব্লেম টা বুঝতে পারলে বুঝতেই পারছো এই প্রব্লেমে উচ্চতা X এর ভ্যালু বাড়ার সাথে সাথে একটি নির্দিষ্ট সময় পর্যন্ত আয়তন বাড়বে। এরপর আবার আয়তন কমতে শুরু করবে। অর্থাৎ , গ্রাফটি হবে এমনঃ  আর এই কাজটি তুমি খুব সহজেই টার্নারী সার্চ দিয়ে করতে পারো। টার্নারী সার্চ সম্

Light OJ - 1396 - Palindromic Numbers (III) - Tutorial

এই প্রব্লেমের টিউটরিয়াল পড়ার আগে নিজে নিজে ট্রাই কর। মজার ব্যাপার হলো আমি এই প্রব্লেম এর প্রথম যে কোড টা করেছিলাম সেটা ছিলো প্রায় ৪০০ লাইনের একটা কোড। যদিও পরে অনেক অপটিমাইজ সল্যুশন ঘাটার পর যা যা অবজার্ব করেছি সেটাই লিখছি। ১। প্রথমে স্ট্রিং টা কে দুইভাগে ভাগ করে ২য় ভাগ টা ১ম ভাগ দ্বারা রিপ্লেস করে এটা কে প্যালিন্ড্রোম বানাও। মানে ১২৩৪৫ থাকলে সেটা হয়ে যাবে ১২৩২১। এবার যে স্ট্রিং টা পাবা সেটা যদি আগের স্ট্রিং থেকে বড় হয় তবে সেটাই এন্সার। ২। আর যদি না হয়! তবে মিড ভ্যালু থেকে ০ ইন্ডেক্সের দিকে রওনা হও -_- । ৯ এর ছোট কোন ডিজিট পেলেই সেটা এক ইনক্রিমেন্ট করে ব্রেক করে লুপ থেকে বেরিয়ে যাও। আর এর আগে যতো ৯ পাবে সব ০ বানিয়ে দিবে। ৩। এখন মনে কর তুমি ৯ এর ছোট কোন ডিজিট ই পাও নি! তার মানে প্রথম ডিজিট ০। সেক্ষেত্রে তোমাকে স্ট্রিং এর শুরুতে একটা এক্সট্রা ডিজিট ১ যোগ করতে হবে। ৪। এরপর বর্তমান স্ট্রিং টার ক্ষেত্রে আবার স্টেপ ১ এপ্লাই কর। তবে এটাই হবে এন্সার। HAPPY CODING -_-