POJ 1039 - Pipe

১৭ মে, ২০১৯

পাইপের বেন্ড বা বাঁকের শুরু আর শেষ, অর্থাৎ (x, y) আর (x, y - 1) সেগমেন্ট গুলা নিতে হবে। এখন যদি একটা সরলরেখা সবগুলা সেগমেন্ট কে ছেদ করে তাইলে তো পুরো পাইপটা দিয়ে লাইট পাস করতে পারবে। আর যদি না হয় তাইলে শুরু থেকে যে সেগমেন্ট এ ছেদ করবে না, তার ঠিক আগের অংশেই পাইপের উপরের অথবা নিচের কোন এক জায়গা দিয়ে রেখা ছেদ করবে। এখন কথা হচ্ছে, রেখা আমরা কই থেকে পাবো? একটু চিন্তা করলে দেখা যাবে, লাইট কিন্তু সবসময় বাঁকের মধ্যে বাধা পাবে। তো এইখানে সবরকম উপায়ে সেই সেগমেন্টগুলো দিয়ে সরলরেখা বানাতে হবে।

POJ 1066 - Treasure Hunt

১৬ মে, ২০১৯

এই প্রবলেমটা খুব সুন্দর। দেখতে অনেক কঠিন লাগে। বিএফএস-বিএফএস মনে হয়। আসলে অত কঠিন না। আমরা জানি একটা সরলরেখার উপরের বিন্দু সেই রেখাকে সিদ্ধ করে। কিন্তু সেই রেখার ডানে বা বামে যদি কোন বিন্দু নেই, তাইলে সেটা সমীকরণ সিদ্ধ করে না। তো একটা বিন্দু যদি সরলরেখাকে ছেদ না করে, তাইলে সেটা সমীকরণে বসালে পজেটিভ অথবা নেগেটিভ মান দিবে। আমরা জানি, সরলরেখা একটা তল কে দুই ভাগে ভাগ করে। এক ভাগের সকল বিন্দু সমীকরণে একই চিহ্নযুক্ত মান দেয়। এখন প্রবলেমে বলসে, আমরা কেমনে লাইনগুলা পার হয়ে বর্ডারে যাইতে পারি। তো আমরা করবো কি, সবগুলা বর্ডারের পয়েন্ট নিবো, নিয়ে দেখবো যে এইটার জন্য আমার শুরুর পয়েন্টে যাইতে কয়টা লাইন পার হওয়া লাগে। মানে ইনিশিয়াল পয়েন্ট আর বর্ডার পয়েন্ট যদি একই চিহ্ন দেয় তাইলে তারা একই সাইডে। যদি না দেয় তাইলে এটা পার হওয়া লাগবে।

POJ 1106 - Transmitters

১৯ মে, ২০১৯

এই প্রবলেমে একটা অর্ধবৃত্ত দেয়া আছে। আর কিছু বিন্দু দেয়া আছে। আমরা যেটা করতে পারি, অর্ধবৃত্তের কেন্দ্র ধরে এটাকে যেকোন পরিমাণ ঘুরাতে পারি। বলতে হবে সর্বোচ্চ কয়টি বিন্দু আমরা কভার করতে পারি। তো যে বিন্দুগুলো দেয়া আছে, সেগুলাকেই অর্ধবৃত্তের ব্যাসের সাথে এনে টাচ করানো যায়। এবং যেসব পয়েন্ট ব্যাসের এক সাইডে আছে তাদের নিয়ে ম্যাক্সিমাম আপডেট করা যায়। কমপ্লেক্সিটি O(n * n)

POJ 1113 - Wall

১৭ মে, ২০১৯

কনভেক্স হাল। পেরিমিটার + 2 * pi * L

POJ 1127 - Jack Straws

১৭ মে, ২০১৯

সেগমেন্ট সেগমেন্ট ইন্টারসেকশন। ব্রুট ফোর্স করা যায়, অথবা ডিসজয়েন্ট সেট ইউনিয়ন বা ডিএফএস যে কোনটাই করা যায়। কনস্ট্রেইন্টস কম। বেশি হইলে অবশ্যই এলগো চালানো লাগতো।

POJ 1265 - Area

১৯ মে, ২০১৯

পিকের থিওরেম। ল্যাটিস পলিগনের জন্য এই সূত্র খাটে। ল্যাটিস পলিগন কি? যেসব পলিগনের সব ভার্টেক্স ইন্টিজার স্থানাংক দিয়ে প্রকাশ করা যায় তাকে ল্যাটিস পলিগন বলে। জর্জ আলেকজান্ডার পিক বলেছেন, ল্যাটিস পলিগনের ক্ষেত্রে, Area = I + (B / 2) - 1. যেখানে, I = ইন্টেরিয়র পয়েন্টের সংখ্যা, B = বাউন্ডারি পয়েন্টের সংখ্যা। এখন এই বাউন্ডারি পয়েন্ট আমরা কিভাবে বের করবো? gcd দিয়ে এটি বের করা যায়। একটা সেগমেন্ট এর মধ্যে তাদের প্রান্তদ্বয়ের ভুজ আর কোটির বিয়োগফলের gcd দূরত্ব পরপর আমরা একটি ইন্টিজার স্থানাংক পাবো। সূত্র দেখে একটু চিন্তা করলেই বুঝতে পারার কথা।

POJ 1269 - Intersecting Lines

১৭ মে, ২০১৯

বেসিক লাইন ইন্টারসেকশন প্রবলেম।

POJ 1410 - Intersection

১৯ মে, ২০১৯

সেগমেন্ট পলিগন ইন্টারসেকশন। এখানে পলিগন হিসেবে একটি আয়তক্ষেত্র দেয়া আছে। প্রথমে আয়তক্ষেত্রের চার বাহুর সাথে সেগমেন্ট ছেদ করে কিনা দেখতে হবে। তারপর দেখতে হবে পুরা সেগমেন্ট টাই আয়তক্ষেত্রের ভিতরে কিনা। দুইটার কোন একটা সত্য হইলেই সেগমেন্ট আয়তক্ষেত্রকে ছেদ করে।

POJ 2187 - Beauty Contest

১৬ মে, ২০১৯

কনভেক্স হাল বের করে যেকোন দুই কোনার ম্যাক্সিমাম দূরত্ব।

POJ 2242 - The Circumference of the Circle

১৬ মে, ২০১৯

আমরা জানি, ত্রিভুজের বাহুর মধ্যমাত্রয় কেন্দ্রে ছেদ করে। তো যেকোন দুই মধ্যমা নিয়ে কেন্দ্র বের করতে হবে। এরপর 2 * pi * r সূত্রে বসালেই খেলা শেষ।

POJ 2780 - Linearity

১৭ মে, ২০১৯

O(n*n) এ সবগুলা ঢাল বের করতে হবে। প্রতি ঢালের জন্য ম্যাক্সিমাম বের করে প্রিন্ট করতে হবে। এখন কথা হচ্ছে ঢালগুলো আমরা কিভাবে স্টোর করতে পারি। এক উপায়ে করা যায় pair নিয়ে, আরেক উপায়ে করা যায় সরাসরি float বা double এ ঢালের মান নিয়ে। যদি প্রিসিশন এ খুব বেশি সমস্যা না হয়, তাইলে double এ নিলে সমস্যা নাই। অন্যথায় pair নিলে সেটাকে ম্যাপে স্টোর করতে হবে। এবং সেই কারণে কমপ্লেক্সিটি log(n) বেড়ে যাবে।

POJ 3130 - How I Mathematician Wonder What You Are!

১৭ মে, ২০১৯

POJ 3335 এর মত। হাফ-প্লেন ইন্টারসেকশন।

POJ 3335 - Rotating Scoreboard

১৭ মে, ২০১৯

এই প্রবলেমটাও খুব সুন্দর। এটা হাফ প্লেন ইন্টারসেকশন দিয়ে করা যায়। প্রথমে সবগুলা বাহুর ছেদবিন্দু নিতে হবে। এখন প্রতিটি সরলরেখা তলকে দুইটা অর্ধতলে বিভক্ত করে। এখন এই অর্ধতল গুলা যে এরিয়া তে ছেদ করে, অর্থাৎ তাদের কমন যে এরিয়া সেটা দেখতে অবশ্যই একটা কনভেক্স হাল হবে। হাফপ্লেন ইন্টারসেকশন দিয়ে কনভেক্স হাল বের করা যেই কথা, আর n টা পয়েন্টের ভরনয় ডায়াগ্রাম বের করা একই কথা। অনেকটা ফ্লো আর বাইপারটাইট ম্যাচিং এর মত। একটা অপরটার ডুয়াল। তো এই প্রবলেমে, সবগুলা বাহুর ইন্টারসেকশন বের করার পরে যেই পয়েন্ট গুলা পাবো, সেগুলাই কিন্তু আমার কনভেক্স হালের বাউন্ডারি পয়েন্ট হবে। এখন আমরা একটা করে এই বিন্দু নিবো, এবং দেখবো কোন বিন্দু সবগুলা রেখার একই পাশে (পজিটিভ অথবা নেগেটিভ) আছে নাকি। তাইলে আমাদের কল্পিত কনভেক্স হাল বানানো সম্ভব, অর্থাৎ উত্তর "হ্যাঁ"। আর নাইলে নাই। সুন্দরভাবে "না" প্রিন্ট করে দিবো।

POJ 3429 - Geometry with a ruler

১৭ মে, ২০১৯

এই প্রবলেমে কোন প্রকার প্রিসিশন লস Accepted করতে দিবে না। তাই float, double এইসব ভুলে যেতে হবে। এইজন্য সিপিপি তে ফ্র্যাকশন ক্লাস বানায়ে নিসিলাম। প্রবলেম সহজ আছে, কিন্তু double নিলে রং এনসার খেয়ে ধ্বংস হয়ে যেতে হবে।

POJ 3996 - Air Strike

১৯ মে, ২০১৯

দুইটা সার্কেলের টোটাল এরিয়া দেয়া আছে এবং আরো কিছু পয়েন্ট দেয়া আছে। এমনভাবে সার্কেল গুলো বানাতে হবে যাতে সবচেয়ে কম সংখ্যক পয়েন্ট বৃত্তগুলোর বাইরে থাকে অথবা তারা সর্বোচ্চ সংখ্যক পয়েন্ট কভার করে। ব্রুট ফোর্স O(n^2) ভাবে চেক করলেই Accepted. তবে আরেকটু কাহিনী আছে। সার্কেল এর কেন্দ্রগুলো থেকে সবগুলা পয়েন্ট প্রিক্যালকুলেশন করে না রাখলে TLE দিবে।