Posts

Showing posts with the label Greedy

SPOJ - BOOKS1 - Copying Books Tutorial

Topics of this problem: Binary Search + Greedy ১) এই প্রব্লেমে আমরা শুরুতে একটা ফাংশন বানাবো যার কাজ হবে একটা ভ্যালু প্যারামিটার হিসেবে নিয়ে দেখা যে প্রত্যেক লেখক কে দিয়ে সর্বোচ্চ এতোগুলো পেইজ লিখালে K সংখ্যক লেখক m টি বই লিখে শেষ করতে পারবে কি না। যদি পারে তাহলে True রিটার্ন করবে নাহয় False  রিটার্ন করবে। ২) এরপর বাইনারী সার্চের কাজ করবো। বাইনারী সার্চের Low হবে ১টি বইয়ে সর্বোচ্চ যতগুলো পেইজ আছে ততো। High হবে 5e9 । এবার বাইনারী সার্চের মাধ্যমে বের করবো সর্বনিম্ন কোন ভ্যালুর জন্য Valid ফাংশন True রিটার্ন করে। প্রত্যেক লেখক কে দিয়ে সর্বোচ্চ ততোগুলো পেইজ লিখানো যাবে। ৩) সলুশ্যন এর বাকি অংশ গ্রীডি পার্ট। এবার শেষ বই থেকে শুরু করে প্রথম বই পর্যন্ত লুপ চালিয়ে দেখবো ১ জন লেখক কে সিকুয়েন্সিয়ালি সর্বোচ্চ যতো পেইজ লিখতে দেয়া যায়। শেষ থেকে লুপ চালাবো এজন্য যাতে করে ১ম দিকের লেখক দের কে যতো সম্ভব কম সংখ্যক পেইজ লিখতে দেয়া যায় যেভাবে প্রব্লেমে বলা আছে।  

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

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