You are on page 1of 178

}

সম া ও সমাধান
} বই - ১

মাঃ মাহবুবুল হাসান

সে র, ২০১৭



সূচীপ

১ একটুস খািন কথা ৯

২ সহজ িকছু সম া ১৩
২.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ২৩
২.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ২৩
২.১.২ িহ ট . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ২৩

৩ STL াকিটস ২৫
৩.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৩৪
৩.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৩৪
৩.১.২ িহ ট . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৩৪

৪ Mathematics স িকত সম া ৩৭
৪.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৬৯
৪.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৬৯

৫ Bruteforce এবং Backtrack স িকত সম া ৭১


৫.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৭৮
৫.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৭৮
৫.১.২ িহ ট . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৭৮

৬ Data Structure স িকত সম া ৮১


৬.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৯৪
৬.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৯৪
৬.১.২ িহ ট . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৯৫

৭ Greedy ৯৭
৭.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১০৬
৭.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১০৬

৮ Dynamic Programming ১০৭


৮.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৩০
৮.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৩০
৮.১.২ িহ ট . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৩১

৯ Graph Theory ১৩৩


৯.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৪৭
৯.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৪৭


১০ Adhoc ১৪৯
১০.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৬৪
১০.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৬৪

১১ Geometry ১৬৫
১১.১ অ শীলনী . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৭৭
১১.১.১ সম া . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ১৭৭


নকশা তািলকা

৪.১ Pascal Triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৪২


৪.২ UVa 1638 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৪৮
৪.৩ (a, b) = (4, 3) এবং S = 4 . . . . . . . . . . . . . . . . . . . . . . . ৫১
৪.৪ Ellipse এর উপর n = 9 িট িব . . . . . . . . . . . . . . . . . . . . . ৫৬

৫.১ UVa 1343 এর বাড . . . . . . . . . . . . . . . . . . . . . . . . . . ৭৩

৬.১ একিট tree এর Euler path . . . . . . . . . . . . . . . . . . . . . . . ৯৪

১১.১ Latitude এবং Longitude, wikipedia হেত . . . . . . . . . . . . . . . ১৭৫



সারণী তািলকা

৪.১ 30/i এর টিবল . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ৫৮



অধ ায় ১

একটুস খািন কথা

া ািমং কে ট এর ইিতহাস িক অেনক পুেরােনা। তামরা িক কউ ACM ICPC World


Finals এর prize giving ceremony দেখছ? এখন তা আবার ই টারেনেটর কল ােন সই
অ ান দখেত সশরীের হািজর হেত হয় না। তা যা বলিছলাম, সই অ ােন িতবার িবল পাউচার
িত বছেরর িবজয়ীেদর নাম বেল আর সই িল হয় 1977 সাল থেক। তার মােন আজ
থেক ায় 40 বছেররও আেগ া ািমং কে ট হেয়েছ। আজ 2017 সােল এেস া ািমং
কে ট এর িবিভ platform দািড়েয় গেছ। ACM ICPC World Finals, IOI, Codejam,
Hackercup, Codefestival, Codechef Snackdown এবং আরও অেনক onsite event
হয়। এছাড়াও online এ া ািমং িতেযািগতা করার এবং াি স করার ব সাইট আেছ। এছাড়াও
আেছ া ািমং িতেযািগতা িনেয় আেলাচনা করার অেনক ফারাম। গত 4 বছেররও কম সমেয়
া ািমং িতেযািগতার য সার হেয়েছ তা আসেল কথায় কাশ করা যােব না। িক কে র িবষয়
হল আমােদর দেশ স তুলনায় তমন সার নই। আমােদর দেশ গত দশ পেনেরা বছর ধের
গেড় িত বছর চার পাঁচিট কের কে ট হয়। িকছু িদন আেগ থেক (2011 থেক ) িত বছর
া ািমং ক া করার চ া করা হয়। এছাড়াও ুল কেলজ লেভেল NHSPC আয়জন করা হে
অ িকছু িদন আেগ থেক। এেতই সীমাব আমােদর া ািমং কে ট । সই তুলনায় রািশয়া, চীন,
পাল া ড যারা িকনা া ািমং কে টে সবসময় এিগেয় থােক তােদর আেয়াজন নেল বা দখেল
আমার বশ খারাপ বা আফসস লােগ। এজ না য তারা অেনক িকছু কের। বরং তারা আমােদর
থেক অেনক কম onsite কে ট কের। তারা যা কের তাহল quality পূণ ক া । সখােন তােদর
বুেড়া কে টে টরা এেস quality পূণ াস নয় এবং quality পূণ বেলম িনেয় আেলাচনা কের।
ফেল দখা যায় আমরা আমােদর দেশর কে টে 10 িট সম ার ভতের 7-8 িট কের সমাধান
করেত পারেলও তােদর কে টে য 10 িট সম া থােক তার 2 বা 3 িট টেনটুেন আমরা সমাধান
করেত পাির আর তারা িঠকই 8-9 িট কের সমাধান কের বেস থােক। বলার অেপ া রােখ না আমােদর
আর তােদর ভতের আকাশ আর পাতাল তফাৎ।
আমার কােছ মেন হেয়েছ সম া সমাধােনর িট হািতয়ার আেছ। এক ান, ই চ া। তুিম যিদ
না জান bfs িক বা dp িক তাহেল তা তা স িকত সম া সমাধান করা কিঠন। হয়েতা bfs বা dp
আসেল বশ সহজ িজিনস, কউ বই না পেড়ই িনেজ িনেজ িশখেত পারেব বা িনেজ থেকই সসব
সমাধান বর করেত পারেব। িক fft বা kmp বা convex hull ইত ািদ স িকত algorithm বা
theory এসব যিদ তুিম না পড় না িশখ না জান তাহেল সসব স িকত সম া সমাধান করা খুবই
কিঠন হেব। সজ থমত ান দরকার। আর ি তীয় িজিনস হল চ া। তামােক সম ায় বলা
থাকেব না য এই সম া bfs িদেয় সমাধান হেব। তামােক িচ া কের, নানা modify কের বুঝেত
হেব য এটা এভােব কের bfs করেল সমাধান হেব।
িকছু ান যমন bfs, dfs, mst, kmp, dp, gcd ইত ািদ খুবই সহজ িজিনস। যারা এসব এখনও
পার না তারা হয়েতা আমােক মেন মেন গািল িদ য কত কিঠন িজিনস, আর আিম িকনা এেদর খুবই
সহজ বলিছ। িক সিত বলেত া ািমং কে টে আরও অেনক কিঠন কিঠন িজিনস আেছ। সসেবর


তুলনায় এসব খুবই সহজ। আমার মূল ল িছল সসব কিঠন িজিনস িনেয় বই িলখার। যমন- fft, nft,
persistent data structure, link cut tree ইত ািদ। কারণ আমার মেন হেয়েছ সহজ িবষয় িল
তা এক জন চাইেলই নট থেক পেড় িশখেত পারেব িক এই কিঠন িবষয় িল ইংেরিজেতই ভাল
কের নাই। ভাল কের কাথাও থাকেলও এক জায়গায় সব নই। তাই বাংলায় িলখেল হয়েতা যারা
বাংলােদেশর advanced contestant তােদর জ ভাল হত। িক সই বই িলখেত িগেয় মেন
হেয়েছ য আসেল সহজ িবষেয়র উপেরও বই দরকার। এজ না য আমােদর দেশ advanced
contestant এর সংখ া খুবই কম, বরং এজ য আিম যখন advanced িবষেয়র উপর িলখব
তখন যন এটা মেন না হয়, আের এই িবষয় িক ওরা জােন? অমুক টকিনক িক ওরা জােন? এসব
ভেবই আমার " া ািমং কে ট - ডটা াকচার ও অ ালগিরদম" বই িলখা। বইটা িলখা হয়
2011 সােল আর বিশর ভাগ িজিনস িলখা শষ হয় 2013 সােল। এরপর নানা রকম আলেসিম পার
কের 2015 ত তা pdf আকাের ছাড়া হয় এবং 2016 ত হাডকিপ িহসােব। কিঠন িবষেয়র উপর বই
িলখার ই া িনেয় কের 5 বছর কািটেয় িদেয়িছ সহজ িবষেয়র উপর িলেখ। িক সই বই এ ধু
theory িছল। সখােন তমন কােনা সম া িনেয় আেলাচনা িছল না, ে েমর িল ও িছল না। সিত
বলেত, ঐ বইএ আরও একিট চ া ার িছল যখােন ায় 300-400 সম া িনেয় আেলাচনা করা িছল
(যত দূর স ব 2013 সােলর সব icpc regional এর problem এবং solution িনেয় িছল, এমনিক
neerc, ceerc এবং chinese regional িলও িছল)। িক বই এর আকার এেতা িবশাল হি ল
আর সই সম ার আেলাচনা এেতা সংে েপ িছল য আিম পের ঐ অংশ মুেছ ফিল (এমিনেতই
theory আেলাচনা অংশ সংি ও বেল যই পিরমান গালাগািল হজম করেত হেয়েছ স তুলনায় ঐ
চ া ার মুেছ িদেয় ভালই হেয়েছ ব িক!)। থম বইএ থম হািতয়ার ( ান) িনেয় কথা হেলও ি তীয়
হািতয়ােরর ( চ া) কােনা িকছুই িছল না। সই জ ই আমার এই ি তীয় বই। আিম িনেজ বেলম
ক াটাগরাইেজসেন ওত অভ না। তাই এই বইেয় যত সম া আেলাচনা করা হেয়েছ তার িল িল
আিম িবিভ সাস হেত িনেয়িছ। মূল িল হল িজয়া িলউ এর এক ন র বই (সহজ বই) এর িল ।
এছাড়াও আিম timus এর beginner ে েমর একিট িল ব বহার কেরিছ। LightOJ এর টিপক
এর িল হেতও বশ িকছু সম া আিম ব বহার কেরিছ। জ ািমিতর জ বাংলােদেশর জ ািমিতর
নািফ এর একটা বেলম িল িছল আমােদর বুেয়েটর েপ সই িল ব বহার কেরিছ। Greedy
সম ার জ codeforces এর িকছু সম া ব বহার কেরিছ। এরকম নানা জায়গা হেত বেলম
িনেয় সসব িনেয় আেলাচনা করা হেয়েছ।
এই বইেয়র মূল উে যিদ তুিম মেন কর িবিভ টিপেক াি স করা তাহেল ভুল ভাবেব। মূল
উে হল, চীেনর বা া কে টে টরা িজয়া িলউ এর যই বই পেড় তােত আেলািচত বেলম েলা
তামােদর সামেন তুেল ধরা। আর বুঝােনা কন তারা এেতা ভাল পাের আর কন আমরা পাির না।
তােদর সহজ বইেয়ই যিদ এেতা কিঠন বেলম থােক তাহেল কিঠন বইেয় না িক আেছ! যিদ তামরা
সিত কােরর ভাল কে টে ট হেত চাও, তাহেল এই বইেয়র বেলম িলেক তামােদর কােছ সাজা
লাগেত হেব। আর যারা শেখর বেশ কে ট করেত চায়, খাটা খাটিন করেত চায় না, তারা এই বইেক
িনরাপদ রে দূের সিরেয় রােখা।
সাধারনত বইেয় িতিট অধ ােয় বেলম িল তােদর difficulty অ যায়ী আেছ। তরাং তুিম
একিট কের বেলম দখ আর িনেজরা তা সমাধান করার চ া কর। যিদ িনেজরা পার তাহেল তা
ভাল কথা, আর না পারেল সমাধান একটু একটু কের পেড় দখ। এক লাইন ই লাইন কের পড় আর
িনেজরা আবার িচ া কর। যিদ িনেজ
( সমাধান
) করেত পার তাহেলও(এই)বইেয়র সমাধান পড়। কারণ
দখা যােব, যিদও এই সম া O n3 এ সমাধান হয় িক এর O n2 সমাধান হয়েতা আিম বণনা
কেরিছ। বা অেনক সময় আিম নানা ছাট খাট ি েকর কথা বেলিছ তা হয়েতা অ ে েম কােজ
আসেব।
অেনক সময় এটাও হেত পাের য তুিম কােনা একিট সমাধান বুঝছ না। এরকম না হওয়াটাই
অ াভািবক (সংি ও সমাধােনর জ ই হাক বা কিঠন সম ার জে ই হাক)। এখােন অেনক
সম া আেছ য িল আমার িনেজর সমাধান করেত বা অে র সমাধান পেড় বুঝেত 4-5 িদন কের
লেগেছ। তরাং তুিম যিদ 1 িদন ব য় কেরই হাল ছেড় দাও তাহেল হেব না। কাগেজ কলেম িবিভ
কস িনেয় িচ া করেত হেব আিম িক বলিছ, বা তা কীভােব হে বা হেত পাের।
অেনেকই বেল বই আরও সহজ কের িলখেত, িক সিত বলেত এর থেকও সহজ কের িলখার
আমার সময় নই। আিম যিদ আরও সহজ কের আরও অেনক সময় িনেয় িলিখ তাহেল আমার আসল

১০
উে (কিঠন িবষয় িল শখা এবং তা িনেয় লখা) আমার কখনই পুরন হেব না। বা যারা বতমােন
advanced coder আেছ তারা কখনও কিঠন িজিনস িল িশখেত পারেব না। সহজ িবষয় িলর উপর
িলখা বা শখােনার অেনেকই আেছ িক কিঠন িজিনস িল িনেয় সংি িলখাও নই। তরাং আিম
যিদ কখনও আমার ল পুরন করেত পাির তাহেল হয়েতা কােনািদন আবার এই "কিঠন" কের িলখা
বই িরভাইজ কের সহজ কের আরও ছিব িদেয় িলখব। িক আশা কির তত িদেন আমােদর দেশ
এেতা 2400+ রিটং এর কাডার থাকেব য "এই কিঠন বই বুঝিছনা" এ কথা বলা মা েষর পিরমান
কেম যােব বা তােদর মধ হেত আর কউ সহজ কের বই িলখেব।
আেগই বেলিছ এই বইেয় UVa, Timus, Codeforces, LightOJ থেক সম া আেছ। আিম
ে েমর না ােরর পাশাপািশ ে েমর নাম িদেয়িছ যােত তামােদর খুঁেজ পেত িবধা হয়। িবেশষ
কের codeforces এর ে এই সম া বিশ দখা যায় কারণ সখােন একিট ে েমর না ার
দওয়া বশ কিঠন। আর মােঝ মােঝ আিম বেলম statement একটু পিরবতন কের িনেয়িছ।
যমন দখা যােব মূল ে েম বলা হেয়েছ য ছাগেলর কািহনী আিম িলেখিছ গাধার কািহনী। অেনক
সময় মূল ে েম বেলেছ য অমুক অমুক িডিজট ব ািতত অ সকল িডিজট ব বহার করা যােব। িক
আিম ে েম িলেখিছ য অমুক অমুক িডিজট কবল ব বহার করা যােব। এসেবর মেধ িক তমন
কােনা তফাৎ নই। তরাং আশা কির তামােদর বুঝেত সম া হেব না।
আর আমরা এই বইেয় আেলািচত সম া িলর কাড রাখার জ একিট git repository খুেলিছ
যার িলংক (https://github.com/shanto86/problem-book-1-solutions). তামরা চাইেল
তামােদর ac কাড এখােন পাঠােত পার যােত অ রা তা দেখ িশখেত পাের। আমরা চ া করব
কােনা একিট সম ার একিট মা সমাধান এখােন রাখার। তেব যিদ কউ স ূণ িভ ভােব কা-
না সম া সমাধান কের তাহেল আমরা সই নতুন সমাধানও রাখেত পাির। সই সােথ ধ বাদ
Nayeem Jahan Rafi, Evan Hossain, Rezwan Arefin, Md Sahedul Islam Sohel,
Mohtasim Bellah, Moudud Khan Shahriar, Abdullah Al Raqibul Islam, Imran
Ziad এবং Sumit Saha ক যারা বইেয়র টকিনকাল িরিভউ করেত সাহায কেরেছ।

১১
১২
অধ ায় ২

সহজ িকছু সম া

এই অধ ােয় আমরা সহজ িকছু সম া িনেয় আেলাচনা করব। আশা কির এই অধ ােয়র সম া িল
সমাধান করেত কােনা algorithm লাগেব না। তামােদর online judge (oj) আর c/c++ এর সােথ
পিরিচত করাই এই অধ ােয়র উে । তামােদর যারা ইেতামেধ ই online judge এ অ ত ১০০
িট সম া সমাধান কের ফেলছ তােদর জ হয়েতা এই অধ ায় ওত কােজ আসেব না। তামরা বরং
ঘিড় ধের এই অধ ােয়র সম া িল সমাধান করার চ া কের দখেত পার। কত কম সমেয় কত
কম পনাি েত সব সমাধান করা যায় স চ া কর। আর সব সমাধান শেষ একবার আমার বলা
সমাধান িলেত চাখ বুিলেয় িনেত পার। হয়েতা িকছু নতুন িটপস পেয় যেত পােরা!
অ শীলনী বশ অেনক িল সম া দওয়া আেছ। সব িলই মুলত c/c++ জানা থাকেলই হেব।
তরাং তামরা যারা া ািমং কে ট জগেত নতুন তােদর জ ই মুলত এই অধ ায়। আেরকটা
িজিনস, িকছু িকছু সম া আেছ য েলা হয়েতা মেন হেব কাড করা পইন। িক আমার মেত তাও
সসব সম া করা উিচত। এরকম সম া তামােদর debug করার মতা বৃি কের এবং র কের
কাড করা িশখেত সাহায কের। তরাং কােনা সম া দখেত পইনফুল হেল তােক পাশ কািটেয়
যও না। আর কােনা একিট সম া সমাধান করা হেল তামরা চাইেল নেট সাচ কের অ েদর কাড
দখেত পার। এেত কের নতুন টকিনক িশখেত পারেব।

Timus 1000 A+B Problem


সমস া: তামােক a এবং b িট সংখ া দওয়া আেছ। তােদর যাগফল ি ট করেত হেব।

সমাধান: খুবই সহজ সম া। তেব সরাসির কাড করেত যাবার আেগ দেখ নাও a আর b এর
িলিমট কত। ঃেখর িবষয় হেলা এই সম ায় এেদর কােনা িলিমট দওয়া নই। আেগর যুেগ এরকম
সম া ায়ই হেতা। অথাৎ দখা যায় ে েম ইনপুট ভ ািরেয়বেলর িলিমট িল দয়া নই। যিদ
এটা কে টে হয় তাহেল judge ক clarification এর মাধ েম িজ াসা কের নাও। আর যিদ এটা
offline হয় অথাৎ াকিটেসর জ online judge এ সমাধান করার সময় এরকম হেয় থােক তাহেল
েপ বা ফারােম িজ াসা কর অথবা ফারােমর পুরেনা পা একটু ঘঁেট দেখা। এরপরও যিদ না
বুঝেত পােরা কী কািহনী তাহেল আমার মেত সই সম া না চ া করাই ভাল। OJ িলেত অেনক
ভাল ভাল সম া থােক, ধু ধু একটা ambiguous সম ার পছেন সময় ব য় করার কােনা মােন
নই।
যারা কবল মা C িশখছ তারা অেনেকই ইনপুট নবার আেগ prompt ি ট কের থাক। Prompt
হেলা "please enter your number", "please input a" ইত ািদ। বলেত ি ধা নই আিম যখন
আমার জীবেনর থম সম া সমাধান কেরিছলাম (UVa 100) তখন এই কাজ কেরিছলাম। এসব
prompt দবার আসেল কােনা দরকার নই। বরং এসব prompt িদেল তুিম wrong answer (বা
কখনও কখনও output limit exceed বা presentation error) পাবা। কন? কারণটা বাঝার

১৩
জ তামােক আেগ িচ া করেত হেব online judge কীভােব কাজ কের। Online judge তামার
কাড নয়, াভািবক ভােবই তামার কাড compile কের এবং সব শেষ তার কােছ থাকা এক বা
একািধক input ফাইল তামার কাডেক দয়। তামার কাড সই ইনপুট িল standard input হেত
পেড় (অথাৎ সাধারণ scanf, cin ইত ািদ িদেয়)। কােনা কােনা oj ত অব আমােদর ফাইল হেত
পড়েত হয় (fscanf, fopen, freopen ইত ািদ ব বহার করেত হয় সে ে )। কান জােজ কীভােব
ইনপুট আউটপুট করেত হেব তা সাধারনত তােদর frequently asked question বা এই জাতীয়
সকশেন িলখা থােক। যাই হাক, ক াইল করা শেষ তামার কাড সই সব ইনপুট পেড় output
দয়। এবার তামার দয়া এই output তারা তােদর কােছ থাকা সিঠক output এর সােথ মলায়।
এখন তুিম যিদ অিতির prompt দাও সটা তা আর জাজেদর output এ থাকেব না তাই না? আর
তাছাড়া তুিম ভেব দেখা যিদ তুিম ইনপুট নবার জ prompt দাও তাহেল তামার আসল উ র
আর prompt আলাদা করার িক কােনা উপায় আেছ? নই। কারণ জাজ তা সব আউটপুট িনেয় এর
পর চক কের। স তা জােন না কানটা prompt আর কানটা আউটপুট। সজ prompt দবার
কােনা দরকার নই। আর াঁ, আিম জািন য আিম যত সহেজ oj কাজ কের বললাম, আসেল তা
অেতা সহজ না, িক মাটােমািট ঐরকম ভােবই কাজ কের।
অেনক কথা হেলা, আমােদর এই সম ায় িফের আসা যাক। তুিম এই সম ার ফারােম একটু
ঘাঁটেলই বুঝেব য এখােন a আর b ক int এ িনেলই চলেব। তাহেল আর দরী কন, ঝটপট কাড
কের ফল। ৬-৭ লাইেনর বিশ কাড হওয়া উিচত না!

Timus 1001 Reverse Root


সমস া: সেবা 1018 হেত পাের এমন িকছু অঋণা ক পূণ সংখ া দয়া আেছ। তামােক তােদর
square root িল (সেবা 4 decimal digit পয ) উলেটা অডাের ি ট করেত হেব। অথাৎ থম
সংখ ার square root সবেশেষ, ি তীয় সংখ ার square root শষ হেত ি তীয়েত এরকম কের
ইনপুেটর সব শেষর সংখ ার square root আউটপুেট সবার থেম থাকেব। ইনপুট এর সাইজ
সেবা 256KB. উদাহরণ প- তামার ইনপুেটর সংখ া িল যিদ হয় 1, 4 তাহেল আউটপুট হেব
2, 1.
সমাধান: এিটও বশ সহজ। তেব একটা সম া হেলা কত িল না ার দয়া থাকেব তা বলা নই। ধু
বলা আেছ ইনপুেটর সাইজ 256KB. আমরা জািন এক character এ 1 byte১ . তাহেল ইনপুেট
থাকেব 256K টা িডিজট। আমরা আমােদর িহসােবর িবধার জ ধের িনেতই পাির য এেককটা
িডিজট এেককিট সংখ া। যিদও আসেল তা না, এেদর মােঝ অেনক space থাকেব। িক আমােদর
তা exact সংখ া দরকার নই। মাটােমািট একটা estimate হেলই হেব। তাহেল 256K সাইেজর
একিট অ াের িনেলই িনঃসে েহ যেথ হেব ২ । এই অ ােরেত তুিম ইনপুট িনেয় রােখা। ইনপুট শেষ
তুিম এই অ ােরর পছন থেক এেস এেক এেক সবার square root ি ট কর। আর আশা কির
ইেতামেধ ই খয়াল কেরছ য আমােদর int ব বহার করেল চলেব না, long long ব বহার করেত
হেব বা চাইেল double এও ইনপুট িনেত পােরা। কারণ আমােদর ইনপুেটর সংখ ার িলিমট 1018 .
আরও এ েনার আেগ সাইেজর ব াপারটা আেরকটু পির ার কের নওয়া যাক। এইেয এখােন
256K সাইেজর একিট long long এর অ াের িনেল, তার মােন এই অ ােরিট memory ত কত
জায়গা দখল কের? তার আেগ জানা দরকার একিট long long মমিরেত কত জায়গা দখল কের।
আশা কির তামােদর মেন আেছ int নয় 32 িবট বা 4 বাইট আর long long নয় 64 িবট বা 8
বাইট (1 বাইট = 8 িবট)। এর মােন আমােদর মাট 8 × 256 = 23 × 28 = 211 িকেলাবাইট
বা 2 মগাবাইট মমিরর েয়াজন হেব। float বা double কত সাইজ দখল কের? এটা মেন রাখা
সহজ। float নয় int এর সমান আর double নয় long long এর সমান। যিদও compiler বা
os ভেদ কােনা একিট ডটা টাইপ এেকক compiler বা os এ িভ িভ সাইজ দখল করেত
পাের। িক সটা িনেয় আসেল িচ া না করেলও চলেব। তাহেল এই িহসাব থেক তামরা জানেল য
তামােদর ায় 2 মগাবাইট এর মত জায়গা লাগেব। এিট কন পূণ? কারণ িতিট সম ায়
১ আেগ না জানেল এখন জানেল। যেকােনা একিট character ইনপুেট বা text ফাইেল 1 বাইট জায়গা দখল কের।
২ এখােন K(Kilo) এর মােন হেলা 210 , 1000 না। একই ভােব M(Mega) হেলা 220 আর G(Giga) হেলা 230 .

১৪
time limit এর পাশাপািশ memory limit ও দয়া থােক। যমন এই সম ার memory limit
হেলা 64 মগাবাইট। খয়াল করেব তামার কাড যন এর বিশ মেমাির ব বহার না কের। না হেল
memory limit exceed খেয় যেত পােরা! বিশর ভাগ সময়ই এই িলিমট ল করার দরকার
হয় না। িক মােঝ মােঝ দখা যায় তুিম DP করেত চা িক DP এর অ াের অেনক বিশ মমির
দখল কের বেস আেছ। সসব সময় তামােক মমির অি মাইজ করেত হেত পাের।
এই সম ার ে তামরা চাইেল অ ােরর সাইজ কত িনেত হেব সই িহসােবর ঝােমলায় না িগ-
য় stl এর vector ব বহার করেত পােরা। একিট কের ইনপুট নাও আর vector এ push back কর।
সবেশেষ vector এর পছন থেক আেসা। iterator ব বহার করার কানই দরকার নই (iterator
িক যিদ না জান তাহেল আপাতত জানার দরকার নই, দরকােরর সময় িশেখ িনেলই হেব)। আিম মেন
হয়না জীবেন vector এর জ iterator ব বহার কেরিছ। তামােদর িবধার জ vector ব বহার
কের এর কাড ২.১ এ দওয়া হেলা।

িফিরি ২.১: timus1001.cpp


১ #include <stdio.h>
২ #include <math.h>
৩ #include <vector>
৪ using namespace std;

৬ int main() {
৭ vector<long long> V;
৮ long long a;
৯ while (scanf("%lld" &a) != EOF) {
১০ V.push back(a);
১১ }
১২ for (int i = V.size() − 1; i >= 0; i−−) {
১৩ printf("%.4lf\n", sqrt(V[i]));
১৪ }
১৫ return 0;
১৬ }

এখােন আেরকটা িজিনস। সটা হল EOF. খয়াল কর আমােদর ইনপুেট যত ণ সংখ া আেছ
তত ণ আমােদর ইনপুট িনেত হেব। এই কাজ আমরা এই EOF এর মাধ েম করেত পাির। যখন
ইনপুট নওয়া শষ হেয় যায় তখন তুিম মেন করেত পার য scanf ফাংশন EOF (End Of File)
িরটান কের। তরাং আমরা তত ণ ইনপুট েসস করব যত ণ না scanf ফাংশন EOF িরটান
কের।

UVa 12108 Extraordinarily Tired Students


সমস া: মেন কর একিট ােস সেবা দশ জন ছা ছা ী আেছ। তারা েত েকই ঘুমাে । অব
তােদর ঘুমােনার িনজ একিট াইল আেছ। েত েকর াইল আলাদা হেত পাের। তারা a সময়
ঘুমায়, b সময় জােগ, a সময় ঘুমায়, b সময় জােগ- এভােব চলেত থােক (a ও b সেবা 5 হেত
পাের)। তােদর থম অব া 1 হেত a + b এর মােঝ যেকােনািট হেত পাের। যমন- a = 2 আর b
= 3 হেল এবং তােদর থম অব া 3 হেল তারা 2 সময় জেগ থাকেব (3 এ আেছ মােন 2 টা ঘুম
ইেতামেধ ই শষ এবং 1 টা জাগাও শষ), পেরর 2 সময় ঘুমােব, 3 সময় জাগেব, 2 সময় ঘুমােব, 3
সময় জাগেব- এভােব চলেব। সবার জ a ও b দওয়া থাকেব আর সই সােথ দয়া থাকেব র
অব া। বলেত হেব থম কান সমেয় তারা সবাই জেগ থাকেব। যিদ এরকম সময় পাওয়া স ব না
হয় তাহেল -1 ি ট কর।

১৫
সমাধান: যারা গিণত পছ কর তােদরেক বলিছ- তামােদর trade-off িশখেত হেব। Trade-off
মােন হেলা কােনা একিট সম া পাবার পর সটা গিণত িদেয়ই সমাধান করবা নািক িকছু র গািণিতক
ভােব কের বািকটু কি উটােরর উপর ছেড় িদবা- সটা। যমন এই সম ার ে কউ যিদ মেন
কর আের এটা তা মজার গািণিতক সম া লাগেছ, লসা লসা গ ! কথা িঠক, িক তাই বেল
পুেরাটা গািণিতক ভােব করা মেন হয় বশ মুশিকল হেব। িতিট ছা ছা ীর ঘুেমর সাইেকল খুব জাড়
10 (a+b). মােন িত a + b সময় পর পর একই অব া িফের আসেব। আমােদর সম ায় সেবা
দশজন থাকেত পাের, তরাং তােদর লসা সেবা হেত পাের lcm(1, 2, . . . 10). এখােন লসা
কীভােব আসল বুেঝছ তা? দখ, থম জন তার a + b সময় পর র অব ায় আসেব, ি তীয় জন
তার a + b সময় পর তার র অব ায় আসেব এরকম কের সকেলর জ আমরা তার সাইেকেলর
লংথ জািন। এখন যিদ করা হয় কত সময় পর সবাই একে র অব া আসেব তাহেল তা হেব
এই সকল সাইেকল লংেথর lcm এর সমান। কারণ lcm ক সব সাইেকল লংথ ভাগ কের। তার
মােন lcm সময় পর সবাই র অব ায় আসেব।
তাহেল তুিম যা করেত পােরা তাহেলা 1, 2 এভােব সই লসা পয িতিট সমেয় যেত পােরা
এবং সবার ঘুেমর state দখেত পােরা। এভােব লসা পয সব সময় চক কেরও যিদ সবাই জেগ
আেছ এরকম কান সময় না পাও তার মােন এমন কােনা সময় পাওয়া স ব নয়।
যারা আবার অলস তারা আবার ক কের lcm বর করেত যােব না। স জােন য কােনা একিট
বড় মান পয চক করেলই হল। তরাং স চাখ ব কের 106 বা 107 জাতীয় বড় একিট সংখ া
পয চক করেব। যিদ এর িভতেরও সমাধান না পাওয়া যায় তার মােন সমাধান নই!
কাডেক র করার জ চাইেল "অমুক সমেয়" "অমুক জেনর" state িক তা বর করার জ
একিট ফাংশন িলখেত পােরা। অথাৎ ঐ ফাংশনেক বতমান লােকর a, b এর মান আর বতমান সময়
দেব, স বেল দেব য ঐ লাক ঘুিমেয় আেছ না জেগ। এভােব ফাংশন ফাংশন কের আলাদা আলাদা
কাড করেল কাড বুঝেত বা িডবাগ করেত িবধা হয়।
একটা উদাহরন দই। িকছুিদন আেগ এক কে টে এক সম ায় আমােক বেলিছল য n ইনপুট
আকাের দওয়া থাকেব। তামােক সই n এর উপর িভি কের একটা সম া সমাধান করেত হেব
এবং একিট িল এর সাইজ এবং সই িল িট আউটপুট করেত হেব। কাড করার সময় আিম
ভেবিছলাম সম াটা তা সহজ। তরাং ক কের র কের কাড না কের সব কাড main এর
ভতেরই কির। িক যখন WA খলাম তখন হল আসল ঝােমলা। িডবাগ এর জ আিম চাইিছলাম
n এর িবিভ মােনর জ িলে র সাইজ ি ট দই। িক সম া হল যেহতু আিম র কের কাড
কির নাই সেহতু দখা গেছ আিম িবিভ কস িবিভ ভােব া ডল কেরিছ। আমার আউটপুট ছিড়েয়
িছিটেয় িবিভ জায়গায় আেছ। স ল জায়গা আবার সহেজ কেম ট করা যাে না। এরকম নানান
সম া। শেষ আিম একিট ফাংশন িলখলাম এবং সই ফাংশন হেত vector িরটান করলাম। এবার
আমার কাজ সহজ হেয় গল। আমার আউটপুট নানা জায়গায় আর ছিড়েয় িছিটেয় নাই। আিম যিদ
েতই এই কাজ করতাম তাহেল আমার এেতা সময় ন হত না। তরাং চ া করবা তামার কাড
থেকই র কের আলাদা আলাদা ফাংসেন ভে ভে িলখেত। আবার খয়াল রখ বিশ
র করেত িগেয় যন অেনক বিশ সময় চেল না যায়! সবই trade-off!

UVa 253 Cube painting


সমস া: িট ঘনেকর িতিট পৃে র রং দওয়া আেছ। বলেত হেব এেদর একিট ঘনকেক ঘুিরেয়
িফিরেয় অ ঘনেকর সােথ সদৃশ হয় এরকম orientation এ আনা যােব িকনা। অথাৎ ঘুরানর পর
িট ঘনেকর উপেরর িপেঠর রং একই হেব, িনেচর রং একই হেব, ডান বাম সামেন িপেছ সব পৃে
িট ঘনেকর রং একই হেব- এরকম অব ােন আনা যােব িকনা।

সমাধান: এটা আমার বশ পছে র সম া। কারণ যিদ কউ "সহেজ" এটার কাড না করেত পাের
তাহেল অ ত স অেনক খেট খুেট অেনক িবশাল কাড কের সমাধান করেত পারেব। আবার কউ
একটু বুি খািটেয় কাডটােক একটু ছাট কের ফলেত পাের। কউ আবার একটু বিশ বুি খািটেয়
আরও ছাট করেত পারেব। যত বিশ বুি খাটােব তত ছাট হেব। িক সই বুি িল বর করেতও

১৬
িক সময় লাগেব। তরাং trade-off! তুিম িক সময় ব য় কের কাড ছাট করেব, নািক dumb এর
মত কম বুি ওয়ালা সমাধান িলখেব?
বড় কাড এবং সবেচেয় কম বুি ওয়ালা সমাধান কী তােতা বুঝেতই পারছ? িনেজ থেক কােনা
ঘনকেক যত ভােব পােরা ঘুরাও আর তােদর সবার জ একিট কের if-else িলখ। অথাৎ মেন মেন
থম ঘনকেক যত ভােব স ব ঘুরাও। ঘুরানর পর তুিম জান এখন এর উপর/িনচ/ডান/বাম/সামেন-
/িপেছ কান রঙ আেছ। এখন তুিম সই রঙ িলেক ি তীয় ঘনেকর রেঙর সােথ তুলনা করার জ
if-else িলখ। যিদ ভুল না কের থািক তাহেল এজ তামােক 24িট if িলখেত হেব (আর তার ভতের
6িটর মত == লিজক)। ি তীয় ঘনকেক তা আর ঘুরানর েয়াজন নই। ধু থম ঘনকেক মেন মেন
ঘুরােব। থম ঘনেকর ছয়িট পৃ েক এেক এেক মেন মেন সামেনর পৃ িহসােব ি র ক না করেব।
এখন এর বািক পৃ িলেক ঘুিরেয় ঘুিরেয় পিরবতন কের িবিভ orientation পেত পােরা। যিদ
বুঝেত সম া হয় তামরা xyz axis ক না কর। ঘনেকর ছয়িট পৃ ছয় axis এ আেছ (x+, x-,
...). এখন মেন কর x+ এর িদেকর পৃ ি র। তাহেল এই ঘনকেক x axis এর সােপে ঘুরােল মাট
চারিট orientation পাওয়া যােব (চারিট পৃ এেক এেক y+ এর িদেক আসেব- এভােবও ভাবেত
পােরা)। িনঃসে েহ খুব একটা সহজ কাজ না। এেক তা ঘনকেক ঘুিরেয় ঘুিরেয় আঁকেত হেব কাগেজ
কলেম বা ক নায়, তারপর আবার সটা এক গাদা if else কের িলখেতও হেব। তেব আর কােনা
বুি না পেল এটাই করেত হেব। একটু র বা সহজ করার জ যা করেত পােরা তাহেলা এত েলা
if-else না িলেখ একিট 24 × 6 সাইেজর অ ােরেত সংখ া িল িলেখ রােখা (অথাৎ ি তীয় ঘনেকর i
তম পৃে র সােথ ক িমেল এই তথ িল)। তাহেল একিট loop চািলেয় এবং একিট if িলেখই কাজ
সের ফলেত পােরা।
একটু কম ugly উপায় হেলা খয়াল করা য ঘনেকর পৃ িল একটু িবেশষ ভােব না ািরং করা
(statement এর িচ দেখা)। 1 আর 6 িবপরীত িদেক, 2 আর 5 িবপরীত িদেক এবং 3 আর 4 ও।
এেদর েত ক জাড়ার যাগফল িক 7. তরাং, আমরা যিদ িঠক কির উপের, িপছেন আর ডােন ক
তাহেল আমরা সখান থেক িনচ, সামেন আর বােম ক আেছ তা বর কের ফলেত পাির। তরাং এর
আেগর মত 24 × 6 এর দরকার নই 24 × 3 ই যেথ , কারণ বািক িতনিট তুিম এই ফমুলা ব বহার
কের বর করেত পারেব।
আর কীভােব সহজ করা যায়? খয়াল কর, তুিম যিদ উপেরর পৃ িঠক কের ফল তাহেল চািরিদেক
িক িক থাকেব তা িক fix হেয় গেছ। যমন উপের যিদ 1 থােক তাহেল চািরিদেক থাকেব 2, 3, 5,
4. এখন এেদরেক যিদ circular ভােব একিট অ াের ত রােখা তাহেল িক পাশাপািশ িট িসেল
কের তােদরেক িপছন ও ডান পৃ ক না করেত পােরা। অথাৎ িতিট পৃ উপেরর িদেকর জ
তুিম একিট অ াের (4 দেঘ র) রােখা য সে ে চািরদেক কান কান পৃ থাকেব। যমন উপের
1 থাকেল চািরিদেক থাকেব 2, 3, 5 আর 4. উপের 4 থাকেল চািরিদেক থাকেব 2, 1, 5 আর 6
এরকম কের সকল পৃ উপের থাকার জ চািরিদেক ক থাকেব তার একিট িল বািনেয় ফলেত
পাির। এরপর এই অ ােরর উপর লুপ চািলেয় িনবাচন করেত পাির িপছেন ক থাকেব, তাহেল তার
পেরর জন থাকেব ডােন। আর উপর, িপছন ও ডান িনিদ হেয় গেল তা বািক েলা িনিদ হেয় যায়
তাই না? তাহেল এই প িতেত কত বড় অ াের িলখেত হে ? 6 × 4. বশ কম! হয়েতা এর থেকও
কমােনা স ব। িচ া কের দখেত পােরা, অথবা এটাই কাড কের ফলেত পােরা! সময় বাঁচেব।

Timus 1005 Stone Pile


সমস া: n িট সংখ া দয়া আেছ যখােন n ≤ 20 এবং সংখ া িল সেবা 100, 000 হেত পাের।
তামােক এই সংখ া িলেক ভােগ ভাগ করেত হেব। এবার িতিট ভােগর সংখ া িলেক যাগ কর,
ধরা যাক যাগফল িল হেলা A ও B. তামােদর ল হেব A ও B এর পাথক যন সবেচেয় কম
হয়।
সমাধান: অেনকভােবই এই সম া সমাধান করা যায়। খয়াল কর সংখ া িল িক বশ ছাট (100, 000)।
তাই আমরা এেক coin change dp এর মত কের সমাধান করেত পাির। দ সংখ া িল খুব জাড়
একবার ব বহার কের আমরা কান কান যাগফল বর করেত পাির - এই সম ােক dp এর মাধ েম

১৭
কের ফলা যায়।১ এই DP করেল আমরা জানেত পারব A এবং B এর িক িক মান স ব। আর এ
িজিনস জানেল তা আমােদর সমাধান হেয়ই যােব!
এছাড়াও আমরা চাইেল এেক backtrack কের সমাধান করেত পাির। আমরা এেক এেক 1 হেত
n পয িতিট ােন িগেয় িস া িনব য এই ােনর সংখ া কান ভােগ নব। ধরা যাক আমােদর
backtrack ফাংশেনর parameter হেব িট সংখ া। থমিট বলেব আমরা এখন কান সংখ ায়
আিছ (আমরা িক এেক এেক 1-তম হেত n-তম সংখ ায় যাি ) আর ি তীয় সংখ া বলেব আমরা
যই ভােগ ভাগ করিছ তার থম ভােগ থাকা সংখ া িলর যাগফল কত। চাইেল ি তীয় ভােগর
যাগফেলর জ আরও একিট প ারািমটার িনেত পার আবার চাইেল সবেশেষ িগেয় থম ভােগর
যাগফলেক মাট যাগফল হেত বাদ িদেলই তু(িম ি )তীয় ভােগর যাগফল পেয় যােব। যাই হাক,
এভােব করেল আমােদর time complexity O 2n হেব। কারণ আমরা n িট সংখ ায় িগেয় ভােব
চ া করিছ। থমবার চ া করিছ এেক থম ভােগ ফলেত, পেরর বার চ া করিছ এেক ি তীয় ভােগ
ফলেত। তরাং n বার আমরা 2 ভােব চ া করিছ অথাৎ 2n (যিদ " কন 2n "- এটা বুঝেত সম া
হয় তাহেল তামরা combinatorics বা discrete math িনেয় একটু পড়া না করেত পােরা)।
Backtrack না কেরও আমরা খুব সহেজ এটা সমাধান করেত পাির। 0 হেত 2n − 1 এর মােঝ
িতিট সংখ ার binary representation ক না কর২ । অথাৎ এই সংখ া িলেক n bit এর binary
সংখ া িহেসেব ক না কর। n িট 0 আর 1 িদেয় তির সব সংখ া তুিম পেয় যােব। আমরা এেক
এেক এই সকল সংখ া িলেক েসস করব। মেন কর একিট সংখ া িনলাম। এবার এর 0 ওয়ালা ান
িলেক থম েপ আর 1 ওয়ালা ান িলেক ি তীয় েপ ফল। িত ভােগর যাগফল বর কর।
এরপর তােদর মােঝর পাথক বর কর। উদাহরণ প মেন কর য আমােদর n হেলা 2. তাহেল 0
হেত 22 − 1 = 3 পয সংখ া িল (এবং তােদর binary প) হেলা 0(00), 1(01), 2(10), 3(11).
00 এর মােন হেলা আমােদর িট সংখ ােকই থম েপ িনেয়িছ, 10 এর মােন হেলা আমরা থম
সংখ ােক (আশা কির একটু িচ া করেল বুঝেত পারেব য i তম least significant bit, i তম সংখ া
িনেদশ কের যখােন আমরা সংখ া িলেক 0 indexed ভােব ক না করিছ, মােন থম সংখ া আেছ
0 তম িবেট) থম েপ আর ি তীয় সংখ ােক ি তীয় েপ ক না করিছ। এভােব(বািক)2 আর
3 কউ একই ভােব েসস করেত পাির। এই সমাধােনর time complexity হেব O n2n কারণ
তামরা 0 হেত 2n − 1 এর লুপ চালােনার পর আরও একিট n দেঘ র লুপ চািলেয় 0-1 দেখ দেখ
ভােগ ভাগ করছ। Backtrack এর ে ও তুিম যিদ ভাগ করার পর আবার লুপ চািলেয় দখেত
কােক কান েপ ফেলছ তাহেলও এই অিতির n চেল আসেতা তামার complexity ত। িক
উপেরর backtrack সমাধােন আমরা তা না কের যখন কােনা সংখ ােক থম ভােগ ফেলিছ তখনই
থম ভােগর যাগফলেক আপেডট কেরিছ। ফেল আমােদর আর অিতির n এর লুপ লােগ নাই।
িক আমােদর একটু আেগ বলা bitmask এর সমাধােন আমরা অিতির একিট লুপ চালাি 0-1
এ ভাগ করার জ । এজ আমােদর সমাধােন অিতির n চেল এেসেছ।
এখন কথা হেলা bitmask প িতর সমাধান হেত আমরা অিতির n বাদ িদেত পাির িক না। মেন
কর mask নােমর ভ ািরেয়বলেক (bitmask এর সংি প) 0 হেত 2n −1 পয লুপ চালাি এবং
িতিট mask এর জ আমরা ই ভােগর সংখ ার যাগফল বর কির (আমরা mask এর িবট িল
দেখ িঠক কের ক কান ভােগ যােব)। এর আেগই বেলিছ, আমােদর আসেল ই ভােগর যাগফল
রাখার দরকার নই, ধু এক ভােগর যাগফল জানেল আমরা মাট যাগফল হেত অপর ভােগর
যাগফল সহেজই বর করেত পারব। তরাং মেন কর আমরা ধু যই ভােগ 1 িবট ওয়ালা সংখ া
আেছ তােদর যাগফল জািন। এখন ধর আমরা এখন mask = x এ আিছ। এর মােন mask < x
এর জ ইেতামেধ ই আমরা 1 িবেটর ভােগর সংখ ার যাগফল জািন। এখন যখন mask = x এ
এেল তখন এর যেকােনা একিট on (1) িবট নাও। এেক শূ কের দাও (mask^ = 1). এই নতুন
mask এর sum িক তুিম জােনা কারণ on িবটেক শূ কের দয়ার ফেল তামার নতুন mask
িট বতমান mask এর থেক ছাট হেয় িগেয়েছ। তাহেল এই ছাট mask এর জ আমােদর আেগ
পাওয়া যাগফল এর সােথ আমােদর on িবেটর সংখ া যাগ কের আমরা নতুন mask এর জ
যাগফল বর কের ফলেত পাির। িক কথা হল এই on িবট বর করেতই তা আমােদর n এর
১ া ািমং কে ট : ডটা াকচার ও অ ালগিরদম বইেয়র Dynamic Programming সকশেন Coin change dp
এর নানা variation পােব।
২ এই প িতেক আমরা bitmask প িত নাম িদেত পাির কারণ আমরা "all possible" bitmask এর উপর িদেয় লুপ

চালাি ।

১৮
একিট লুপ লাগেব। না তা লাগেব না যিদ তুিম একটু বুি করেত পােরা। খয়াল কর আমােদর িক
যেকােনা on িবট িনেলই চলেব। আমরা িক খুব সহেজ বলেত পাির অমুক সংখ ার অমুক িবটটা on
আেছ? পাির, 2 হেত 3 এর 2nd bit টা সবসময় on, 4 হেত 7 এর 3rd bit টা, 8 হেত 15 এর
4th bit টা এরকম কের 2i−1 হেত 2i − 1 এর i তম িবটটা সব সময় on. তাহেল আমরা সরাসির
0 হেত 2n − 1 এর লুপ না চািলেয় 0 হেত n − 1 পয i এর একটা লুপ চালােবা। আর এর ভতের
আেরকটা লুপ চালােবা সই সই mask িদেয় যােদর i তম িবট(আমােদর
) এই observation এ on
অথাৎ 2i হেত 2(i+1) − 1 পয । তাহেলই complexity O 2n হেয় যােব। তামােদর িবধার
জ backtrack আর bitmask প িতর কাড ২.২ এ দওয়া হেলা। তামরা চাইেল এেক অ
ভােবও কাড করেত পার।

িফিরি ২.২: timus1005.cpp


১ int num[22], n;
২ int onBit[1 << 20], sum[1 << 20];

৪ void backtrack(int at, int group1Sum) {
৫ if (at == n) {
৬ // Find group2Sum
৭ // Keep a global variable to track answer.
৮ return;
৯ }
১০ // Don ' t take num[at].
১১ backtrack(at + 1, group1Sum);
১২ // Take num[at].
১৩ backtrack(at + 1, group1Sum + num[at]);
১৪ }
১৫
১৬ int main() {
১৭ scanf("%d", &n);
১৮ for (int i = 0; i < n; i++) {
১৯ scanf("%d", &num[i]);
২০ }
২১
২২ bktk(0, 0); // Solution in backtrack.
২৩
২৪ // Solution in bitmask.
২৫ sum[0] = 0;
২৬ for (int i = 0; i < n; i++) {
২৭ for (int mask = (1 << i); mask < (1 << (i + 1))←-
; mask++) {
২৮ // i is the on bit.
২৯ sum[mask] = sum[mask ˆ (1 << i)] + num[i];
৩০ // Update answer, one part is: sum[mask] ←-
and another part is
৩১ // total − sum[mask].
৩২ }
৩৩ }
৩৪ return 0;
৩৫ }

১৯
শষ করার আেগ একটা িজিনস। তামরা চাইেল ধের িনেত পােরা য n তম িজিনস সবসময়
থম
( েপ
) থাকেব, এরপর বািক িজিনস িলেক সব ভােব ভােগ ভাগ করেব। তাহেল complexity
O 2n−1 হেয় যােব।

Timus 1014 Product of Digits

সমস া: 0 হেত 109 রে র একিট সংখ া N দয়া থাকেব। তামােক সবেচেয় ছাট ধনা ক সংখ া
Q আউটপুট িদেত হেব যন Q এর অ িলর ণফল N হয়। যিদ এমন কান সংখ া না পাওয়া যায়
তাহেল −1 ি ট করেত হেব। যমন N = 10 এর জ Q হেব 25.

সমাধান: থমত দখ Q এর িডিজট িল ন করেল N পাওয়া যায়। অথাৎ আমােদর জানা দরকার
কান কান সংখ া িদেয় N ক ভাগ করা যায়। যিদ N ক 2, 3, . . . 9 িদেয় যতবার ভাগ যায় ততবার
ভাগ দবার পরও দেখা য N তখনও 1 হয় নাই এর মােন এর জ আসেল কােনা Q পাওয়া
স ব নয়। যমন N যিদ 26 হয় তাহেল দখেব 2 হেত 9 সব সংখ ািদেয় যত বার ভাগ দওয়া স ব
ভাগ দওয়া হেয় গেল 13 বািক থােক। এর মােন এর জ আসেল কােনা Q খুঁেজ পাওয়া যােব
না। কন? কারণ Q এর িডিজট িলেতা আসেল 2 হেত 9 ই হেব তাই না? 0 আর 1 িবেশষ
ছাড়া ব বহার য হেব না তা মেন হয় একটু িচ া করেলই বুঝা যায়। তরাং কােডর েতই তােদর
"specially handle" কের ফল। তাহেল আমােদর সংখ া ধুমা 2 হেত 9 িদেয় ভাগ যােব। বা
আমরা আেরকটু িচ া কের বেল িদেত পাির য N সংখ ািট 2, 3, 5 আর 7 prime িল িদেয় ভাগ
যােব, আর অ কােনা prime িদেয় নয়। তরাং আমরা বর কের ফিল N ক 2, 3, 5 আর 7
িদেয় কয়বার কের ভাগ করা যায়। এখন খয়াল কর আমরা চাইেল 3িট 2 ক এক কের 8 বানােত
পাির, এেত কের আমােদর উ র এর িডিজট সংখ া িক 2 ঘর কেম যায়। আবার আমরা চাইেল িট
2 ক এক কের 4 বানােত পাির, 2 আর 3 ক এক কের 6 বানােত পাির অথবা িট 3 ক এক
কের 9 বানােত পাির। তরাং তামােক িচ া করেত হেব তুিম কীভােব এেদরেক combine করেব
যােত সবেচেয় ছাট সংখ া পাওয়া যায়। আর আশা কির এটা বুঝছ য িডিজট িলেক ছাট হেত বড়
অডাের সািজেয় Q বানােত হেব (758 বানােনার চেয় 578 বানােনা লাভজনক)। এই পযােয় এেস
তুিম িনেজ থেক একটু িচ া কর কীভােব তুিম 2, 3, 5 ও 7 দর combine করেব। আসেল 5 আর
7 ক তা combine করার িকছু নই, combine করেত হেব 2 আর 3 ক। কারণ 5 আর 7 ক
কারও সােথ combine করেত গেল তা আর 1 িডিজেট থােক না।
এখন নানা case িচ া করা ছাড়া আসেল কােনা উপায় নই। যিদ ধু একটা 2 বা একটা 3
থােক তাহেল তা িকছু করার নই। যিদ ধু এক গাদা 2 থােক তাহেল তা িতনটা িতনটা কের িনেয়
যত ণ স ব 8 বানােনা লাভজনক। যিদ এরপর 4 বানােনা স ব হয় তাহেল 4 নাহেল আবার 2.
কন? তুিম 21 , 22 , 23 . . . 21 0 এরকম 10 িট N এর জ িচ া কর তাহেলই বুঝেব। কে টে
সবসময় মাণ করার দরকার হয় না। যিদও এটা িঠক য মাণ না কের কােনা িকছু করা risky
িক তাও, মাণ অেনক সময় সােপ ব াপার। এর থেক িকছু উদাহরন হােত হােত কের যিদ তুিম
িনেজেক বুঝ িদেত পার য এটাই িঠক- তাহেলই হেব। এর মােন এই না য এরকম করেল ভুল হয়
না! যাই হাক, একই ভােব 3 এর ে ও িচ া করেত পার তেব সটা অেনক সহজ। এখন সম া
হেব যখন 2 ও থাকেব আবার 3 ও থাকেব। আবােরা িকছু ণ case analysis করেল বুঝেব থেম
9 বানােনার চ া করেত হেব, এরপর 8, এরপর 6, 4 এরকম। আেগই বেলিছ কন এরকম হেলা,
মাণ িক, এরকম ে কীভােব িচ া করব এতসব কের সবসময় লাভ নই। Case analysis
কের intuition এর িভি েত সমাধান দাঁড় করােত হেব।
যিদ codejam বা hackercup এর মত contest হয় যখােন একবারই submit করা যায়
সসব ে তামরা চাইেল একিট dp বা backtrack কাড কের দখেব তামার claim টা িক ধরা
যাক N = 1 হেত 1000 পয সিঠক িকনা। যিদ হয় তাহেল তুিম মাটােমািট সাহস পােব য হয়েতা
তামার সমাধান বড় N এর জ ও সিঠক।

২০
Timus 1020 Rope
সমস া: N (≤ 100) িট একই মােপর খুঁিটেক (সব খুঁিটই R ব াসােধর বৃ ) একিট convex polygon
এর N িট িব েত রাখা আেছ। একিট দিড়েক এই খুঁিট িলর চারপাশ িদেয় টানটান কের টানােনা হেল
সই দিড়র দঘ কত?
সমাধান: খুবই চমৎকার একিট সম া। খয়াল কর দিড়র িকছু অংশ টানটান আর িকছু অংশ গাল
গাল। টানটান অংশ হল িট বৃে র মােঝ শক। যেহতু বৃ িল একই ব াসােধর সেহতু শেকর
দঘ তােদর কে র দূরে র সমান হেব। এর মােন দিড়র সাজা অংশ িলর দঘ হেব convex
polygon এর পিরিধর সমান। িক গাল অংশ িল? এটাও খুব একটা কিঠন না। খয়াল কর সব েলা
গাল অংশ জাড়া লাগােল একিট বৃ হয়। এটােক এভােবও িচ া করেত পােরা, মেন কর তুিম দিড়
ধের হাঁটা করেল। গাল অংশ েলােত এেস তুিম R ব াসােধর বৃ ধের একটু ঘুরছ এভােব করেত
করেত আবার র জায়গায় আসেব। এই পেথ তুিম িক ঘুের ঘুের 360◦ ঘুেরছ বা R ব াসােধর বৃ
পুেরাটা ঘুেরছ। বা তুিম চাইেল মেন মেন ল া অংশ িল বাদ িদেয় গাল অংশ িলেক জাড়া লাগােয়
দখেত পােরা। তরাং আমরা যিদ বৃে র পিরিধ এবং পিলগেনর পিরিধ যাগ কির তাহেল মত দিড়র
দঘ পেয় যাব।

Timus 1044 Lucky Tickets. Easy!


সমস া: কত িল n (≤ 9 এবং n একিট জাড় সংখ া) িডিজেটর সংখ া আেছ যােদর অ িলর মােঝ
থম অেধেকর যাগফল শষ অেধেকর সমান হয়। যমন 1322 এখােন 4 িট অংক আেছ যার থম
িট অংেকর যাগফল আর শষ িট অংেকর যাগফল সমান।
সমাধান: এসব সম ার ে সবার আেগ দেখ িনেব য leading zero িক allowed িকনা।
যমন এই সম ার ে allowed. এখন n যিদ জাড় হয় তাহেল সম াটা বশ সহজ। n/2
দেঘ র সব িল সংখ ার জ তার অংক িলর যাগফল আমােদর বর করেত হেব। এরপর আমরা
বর করব কান যাগফল কতভােব হয়। ধরা যাক S যাগফল হয় k ভােব। তাহেল k ভােব থম
অেধক আর আরও k ভােব পেরর অেধেক আমরা S যাগফল ওয়ালা সংখ া বসােত পাির, অথাৎ
k 2 ভােব আমােদর ই অেধেকর অংেকর যাগফল একই হেত পাের। এভােব িতিট S এর জ
আমােদর k 2 বর কের তােদর যাগ করেলই হেয় যােব। আর কীভােব n/2 দেঘ র সকল সংখ া িল
েসস করেব? তােতা বশ সহজ, Timus 1005 এর সমাধােনর মত তামরা চাইেল backtrack
করেত পােরা, বা চাইেল লুপ চািলেয়ও করেত পােরা। যেহতু n এর মান সেবা 9 সেহতু n/2 এর
সেবা মান মা 4. অথাৎ চার িডিজেটর সকল সংখ ার যাগফল আমােদর বর করেত হেব। এটা তা
কােনা ব াপারই না তাই না? মেন কর তামরা লুেপর মাধ েম n/2 দেঘ র সকল সংখ ার অংক িলর
যাগফল বর করছ। অথাৎ 0 হেত 10n/2 −1 পয লুপ। আমরা িক চাইেল Timus 1005 এর মত
এই লুপ চালােনার পর অংক িলর উপর লুপ নাও চালােত পাির। মেন কর আমরা চাইিছ x এর অংক
সমূেহর যাগফল বর করেত। আমরা িলখেত পাির sum[x] = sum[x/10] + (x%10). তাহেলই
িক x এর অংক িলর যাগফল বর হেয় যােব। আলাদা কের অংক িলর উপর লুপ চালােনার দরকার
নই। এই সম ায় হয়েতা এই optimization এর দরকার নই, িক অ কােনা সম ায় কােজ
লেগ যেত পাের।

Timus 1197 Lonesome Knight


সমস া: একিট দাবার বােড একিট ঘাড়ার ান দওয়া আেছ। বলেত হেব দাবার বােডর কয়িট
ঘরেক এই ঘাড়া আ মণ কের আেছ। ইনপুট দওয়া হেব a1, g6 এরকম কের।
সমাধান: থমত আমােদর ইনপুটেক েসস কের বর করেত হেব য আমােদর ঘাড়া কান row
আর কান column এ আেছ। এই েসস করা তা বশ সহজ। তামরা ঘাড়ার ানেক একিট string

২১
এ ইনপুট নেব আর এই string এর থম character থেক a এর ascii মান বাদ দেব আর ি তীয়
character হেত 1 এর ascii মান বাদ দেব (word[0] - 'a' এরকম)। মেন করা যাক আমােদর
ঘাড়া আেছ (r, c) ত। এখন এখান হেত ঘাড়ািট কান কান ঘর আ মণ করেত পাের? এসব
ঘরেক আমরা এভােব িলখেত পাির (r + 2, c + 1), (r + 2, c − 1), (r − 2, c + 1) এরকম কের
মাট 8 িট। (r + 2, c + 1) এর মােন তা বুঝছ? এর মােন হল বতমান রা হেত ই রা িনেচ এবং
বতমান কলাম হেত এক কলাম ডােনর ঘর। এরকম কের একিট ঘাড়া 8 িট মুভ িদেত পাের আর
আমরা এই িতিট মুভ কই এরকম (r + 2, c + 1) এর মত কের কাশ করেত পাির।
িক সম া হল এই 8 িট ঘেরর িতিটই আমােদর দাবার বােড নাও থাকেত পাের। যমন
আমােদর বতমান সল যিদ হয় a1 তাহেল িক (r − 2, c − 1) বেল িকছু নই। তরাং আমােদর
চক কের দখেত হেব কান কান ঘর দাবার বােড আেছ (0 ≤ newR ≤ 7 এবং কলােমর ে ও
একই ধরেনর চক)।
আমরা চাইেল এই নতুন অব ান িল হােত হােত িলখেত পাির। অথবা চাইেল সহেজ কাড করার
জ row বরাবর অব ান পিরবতন এবং column বরাবর অব ােনর পিরবতনেক িট অ ােরেত রেখ
িদেত পাির: dr[] = {2, 2, −2, −2, 1, 1, −1, −1} ও dc[] = {1, −1, 1, −1, 2, −2, 2, −2}.
এরপর i এর একিট লুপ চালাব 0 হেত 7 পয এবং চক কের দখব (r +dr[i], c+dc[i]) আমােদর
বােডর ভতের আেছ িকনা। এভােব খুব চমৎকার ভােব অেনক ছাট কের কাড হেয় যােব।

UVa 202 Repeating Decimals

সমস া: a ও b িট সংখ া দয়া আেছ (0 ≤ a ≤ 3000, 1 ≤ b ≤ 3000). তামােক a/b ক


পৗনপিনক আকাের কাশ করেত হেব। যমন: 2/15 = 0.1(3).

সমাধান: এিট আমার অ তম পছে র একিট সম া। কারণ আমােদর দেশর বিশর ভাগ কেলজ
বা িব িবদ ালয় পড়ুয়া ছা ছা ীেদর এিট সমাধান করেত িদেল বশ confusion এ পের যােব িক
এর সমাধান ুল পড়ুয়ারাও বুঝেব বা চ া করেল িনেজ থেক বর করেত পারেব বা আসেল ুল
কেলজ থেকই আমরা এই ব াপাের ধারনা িনেয় এেসিছ।
আমরা আসেল ভােগর সময় কী কির? ভাগ দই, ভাগেশেষর িপেছ একিট শূ বসাই (হর লেবর
থেক বড় ধের িনি ), আবার ভাগ দই, আবার ভাগেশেষর িপেছ শূ বসাই এভােব চলেত থােক।
এখন খয়াল কর যিদ কখনও ভাগেশষ পুনরাবৃি হয় তাহেল িক ভাগফেল আমরা যই িডিজট িল
বিসেয়িছ তারাও িক পুনরাবৃি হেব, অথাৎ পৗেনাপুিনক। এখন বলত যেকােনা a ক b িদেয় ভাগ
করেলই কী এই পৗেনাপুিনক পাওয়া যােব? াঁ। কারণ তামার ভাগেশষ তা আসেল 0 হেত b − 1
এর মােঝই হেব তাই না? যেহতু মা b রকেমর ভাগেশষ হেত পাের সেহতু এক সময় না এক
সময় পুনাি ি হেবই। িক িব াস হে না? মেন কর আমরা 2 ক 15 িদেয় ভাগ করিছ। থেম তা
ভাগেশষ 2 িনেজই। এর পর 5, এর পর 5 এবং 5 চলেতই থােক। এ জ আসেল ি তীয় িডিজেটর
পর পৗেনাপুিনক চলেত থাকেব 0.1(3). এবার একটু কিঠন উদাহরণ নয়া যাক, 655/990. থেম
ভাগেশষ 655, এর পর 610, এর পর 160, এর পর 610. তাহেল এর পর থেক 160, 610,
160, 610 এরকম চলেত থাকেব। অথাৎ আমােদর থম িডিজেটর পর পেরর িট িডিজট বার বার
পুনরাবৃি হেত থাকেব। আমােদর উ র হেব 0.6(61). যেহতু b খুব একটা বড় না সেহতু নানা
ভােব এর সমাধান করা স ব।
মেন কর আমরা একিট 0/1 এর অ াের রেখিছ। েত সব ােন 0 থাকেব। এখন আমরা ভাগ
দওয়া করব। ভােগর পের যই ভাগেশষ থাকেব আমরা অ ােরর সই ভাগেশেষর ােন িগেয় 1
িলেখ রাখব। িক যিদ দিখ আেগই 1 আেছ এর মােন আমােদর ভাগ সাইেকেল পেরেছ। আর আমরা
এখন জেন গিছ এই সাইেকল কান ভাগেশষ থেক হেয়েছ, ধরা যাক এই ভাগেশষ হল x।
এখন আবার আমরা এই কাজটু করব। আবার থেক ভাগ করা কির। যখন আমরা x ক
ভাগেশষ িহসােব পাব এর মােন আমরা এখন সাইেকেল ঢুকিছ। এরপর আবার যখন x পাব, এর মােন
আমােদর সাইেকল শষ। এভােব আমরা পুেরা ভাগফলেক পৗনপিনক িহসােব ি ট করেত পাির।

২২
২.১ অ শীলনী
২.১.১ সম া
Simple
ˆ Timus 1264 Workdays ˆ Timus 1293 Eniya
ˆ UVa 1583 Digit Generator ˆ Timus 1409 Two Gangsters
ˆ Timus 2012 About Grisha N ˆ Timus 2023 Donald is a postman

ˆ UVa 10082 WERTYU ˆ UVa 401 Palindromes

ˆ UVa 1584 Circular Sequence ˆ UVa 1585 Score

ˆ UVa 1586 Molar mass ˆ UVa 1225 Digit Counting

ˆ UVa 455 Periodic Strings ˆ UVa 227 Puzzle

ˆ UVa 133 The Dole Queue ˆ UVa 1368 DNA Consensus String

ˆ UVa 10340 All in All ˆ UVa 1587 Box

ˆ UVa 1588 Kickdown ˆ UVa 11809 Floating-Point Numbers

ˆ UVa 1339 Ancient Cipher ˆ UVa 489 Hangman Judge

ˆ UVa 1591 Data Mining ˆ UVa 815 Flooded!

ˆ UVa 272 TEX Quotes ˆ Timus 1068 Sum

ˆ Timus 1082 Gaby Ivanushka

Easy
ˆ Timus 1025 Democracy in Danger ˆ Timus 1313 Some Words about Sport
ˆ Timus 1079 Maximum ˆ Timus 1149 Sinus Dances
ˆ Timus 1319 Hotel ˆ UVa 340 Master-Mind Hints

ˆ UVa 232 Crossword Answers ˆ UVa 213 Message Decoding

ˆ UVa 512 Spreadsheet Tracking ˆ UVa 201 Squares

ˆ UVa 220 Othello ˆ UVa 1590 IP Networks

ˆ UVa 508 Morse Mismatches ˆ UVa 509 RAID!

Medium

ˆ UVa 12412 A Typical Homework ˆ UVa 1589 Xiangqi

২.১.২ িহ ট

UVa 272: সম াটা কিঠন না। িবিভ জন িবিভ ভােব ইনপুট নেব। আিম য ভােব নই তাহেলা
gets ব বহার কের। আিম আসেল scanf, printf আর gets এর বাইের িকছু ব বহার কির না
ইনপুট আউটপুেটর জ । এসব ব বহােরর জ য সাবধানতা অবল ন করেত হয় তা িনেয় আিম
ইেতামেধ ই " া ািমং কে ট ডটা াকচার ও অ ালগিরদম" বইেয় বেলিছ। তরাং তা আবােরা
পুনরাবৃি করিছ না, ধু জািনেয় রাখলাম য gets ব বহার করেল একটু সাবধান হেত হয়।

Timus 1068: ভুেল যও না য N িক 1 এর থেক ছাট হেত পাের। পারত পে যেকােনা সম া


সমাধােনর সময় ইনপুেট সবেচেয় ছাট মান এবং বড় মান িদেয় ট কের দখা উিচত।
Timus 1025: সংখ া িলেক সট কের িনেয় িচ া কের দখ।
Timus 1313: মেন কর তামার row িল উপর হেত িনেচ আর column িল বাম হেত ডােন 0
হেত N −1 পয না ার করা। তাহেল িনেচর বাম কাণা হেত উপেরর ডান কাণা পয য diagonal

২৩
যায় তােত থাকা ঘর িলর জ row এর id আর column এর id এর যাগফল িক একই হেব।
আশা কির এই ি কটা ইেতামেধ ই তামরা জােনা। তাহেল একটু িচ া কের দেখা এই ি ক খািটেয়
কীভােব সহেজ এই সম া সমাধান করা যায়। িট নে ড লুপ চািলেয়ই িক সম া সমাধান কের
ফলেত পারেব!
Timus 1079: n এর সবেচেয় বড় মান িদেয় ট করেত ভুেল যও না। ক জােন overflow হয়
িকনা!
Timus 1149: ফাংশন, লুপ ইত ািদর ব বহার ঝালাই কের নবার জ খুবই ভাল একিট সম া।
এখােন আসেল িশখােনার তমন িকছু নই। তুিম িনেজ একটু ধীের ে ঠা া মাথায় িচ া কের কাড
কের ফল তাহেলই হেব।

২৪
অধ ায় ৩

STL াকিটস

STL এর পূণ প হেলা Standard Template Library. ব ল ব ব ত িকছু অ ালগিরদম


(sort, binary search ইত ািদ) এবং ব ল ব ব ত িকছু data structure (queue, stack ইত া-
িদ) এই STL এ আেছ। STL না জানেলও তুিম এই অধ ােয়র সম া িল সমাধান করেত পারেব।
িক যই কাজ STL এ হয়েতা এক ই লাইেন হেয় যােব স কাজ STL ছাড়া করেত হয়েতা ১৫-২০
লাইন কের লাগেব। তরাং যখােন STL ব বহার করা যায় সখােন STL ব বহার করা উিচত। তেব
STL অ ভােব ব বহার করা উিচত না। এর মােন এই না য তামােক জানেত হেব STL এর ভতের
কীভােব কাড করা আেছ। যিদ এমন কােনা সময় আেস য তামােক STL ছাড়া সম া সমাধান
করেত হেব তাহেল যন করেত পােরা। এই ান তামােক interview এর সময় বা কে টে র সময়
দখা যােব িবিভ ভােব সাহায করেছ। আর মােঝ মােঝ STL েলা কীভােব implement করা
আেছ তা জানেল ভাল হয়। তাহেল STL এর িবিভ complexity স েক ভাল ধারনা পাওয়া যায়।
তামােদর যােদর আ হ আেছ তারা STL স েক আরও গভীের পড়েত পােরা নেট খাঁজ কের। এই
অধ ােয় মূলত আমরা িকছু সম া দখব যা STL িদেয় সহেজ সমাধান করা যায়। তামরা চাইেল
থেম STL স েক অেনক িকছু পড়েত পােরা, সব STL িশেখ ফলেত পােরা। িক তােত কের
সম া হেলা সসব মেন থাকেব না। তেব তুিম যিদ স ভ করেত করেত শখ তাহেল সই STL এর
ব বহার মেন থােক অেনক িদন এবং পরবতীেত যখন অ কােনা সম ায় দরকার পড়েব তুিম চট
কের STL ব বহার করেত পারেব। আর এ অধ ােয়র সম া িল আসেল কীভােব সমাধান করেত
হেব সটা বলা মুল উে না। মুল উে হেলা কান সম ায় কান STL ব বহার করা যায় তা
দখােনা এবং সই STL িনেয় িকছু আেলাচনা করা। তরাং তামরা চ া করেব এই অধ ােয়র িতিট
সম ােক সখােন বলা STL ব বহার কের সমাধান করেত।

UVa 10474 Where is the Marble?


সমস া: তামােক N িট (N ≤ 10, 000) সংখ া দয়া হেব। সংখ া িল সেবা 10, 000 হেব। থেম
তামােক এই সব সংখ া ছাট হেত বড় সট করেত হেব। এরপর তামােক িকছু query দওয়া হেব
( ায় 10, 000 িট query)। িতিট query ত একিট কের সংখ া q দওয়া হেব। তামােক বলেত
হেব তামার সেটড সংখ ার িলে q আেছ িক না, থাকেল থম কান ােন আেছ। যমন: 1, 3, 3,
5 এই সেটড না ার িলেত 2 নই। আবার থম 3 আেছ 2nd ােন।
সমাধান: ধরা যাক সংখ া িল A নােমর একিট অ ােরেত ইনপুট নওয়া হেয়েছ। থেম আমরা এই
সংখ া িলেক সট করব। এজ আমরা STL এর sort ফাংশন ব বহার করব। আর এর জ আমােদর
algorithm হডার ফাইল include করেত হেব। সই সােথ "using namespace std;" এই
কথািটও িলখেত হেব। সাধারণত সব হডার ফাইল include করা শেষ এই লাইনিট আিম িলেখ
থািক। কন এই লাইনিট িলখেত হেব সটা আেরকটা িবশাল আেলাচনার জ িদেব। তামােদর আ হ
থাকেল namespace িলেখ সাচ িদও। আর stl এর যেকােনা হডার ফাইেলর জ তামােদর এই

২৫
লাইন িলখেত হেব (একবার িলখেলই চলেব)। এখন কােড তুিম যিদ িলখ "sort(A, A + N)" তাহেল
A[0] হেত A[N - 1] পয সট হেয় যােব। যিদ তামােদর সংখ া িল A[1] হেত A[N] থােক তাহেল
তামােদর িলখেত হেব "sort(A + 1, A + N + 1)"। মাট কথা তামােদর যিদ A[a] হেত A[b]
পয sort করেত হয় তাহেল িলখেত হেব "sort(A + a, A + b + 1)". কন এভােব িলখবা তা
জানেত হেল pointer িনেয় একটু পড়া না করেত হেব তামােদর।
সট তা করা হেলা, িক কীভােব বর করেব য query এর সংখ া এই অ ােরেত আেছ িক
না, থাকেল থেম কাথায় আেছ? এজ তামরা চাইেল িনেজ থেক binary search এর কাড
করেত পােরা অথবা stl এর lower bound বা upper bound ব বহার করেত পােরা। এেদর ব বহার
করেতও algorithm হডার ফাইেলর দরকার। Lower bound আর upper bound এর কানটা
য িক দয় তা আমার কখনই মেন থােক না। যখন ব বহার কির তখন নেট দেখ নই। Lower
bound ও upper bound ই ে ই আমােদর একিট সট করা অ াের িদেত হয় আর একিট সংখ া
িদেত হয়। Lower bound অ াের এর সই ান দয় যখােনর সংখ া query এর সংখ ার সমান বা
বড় এবং এেদর মােঝ সবেচেয় আেগর ান দয়। আর upper bound দয় এমন ান যার সংখ া
query এর সংখ া থেক বড় এবং এেদর মােঝ সবেচেয় আেগর ান দয়। যমন তামার অ াের
যিদ হয় 1, 2, 2, 4, 5 তাহেল 2 এর lower bound যিদ call করা হয় সিট িদেব থম 2 এর
ান, আর যিদ upper bound ক call করা হয় তাহেল িদেব 4 এর ান। এই lower bound বা
upper bound এর ফাংশন কীভােব call করেত হয়? "lower bound(A, A + N, q)" যখােন
A অ ােরেত 0 indexed ভােব তুিম স া িল রেখছ। একটা িজিনস, এইেয বললাম অমুেকর ান
দেব - এই ােনর মােন িক? Index? না, ওই ােনর pointer. তরাং তামরা যিদ index চাও
তাহেল এই lower bound এর return মান হেত A িবেয়াগ কের নেব। তাহেলই 0-indexed
অ াের পিজশন পেয় যােব। অথাৎ তামােক িলখেত হেব "lower bound(A, A + N, q) - A".
তাহেল তুিম index পেয় যােব। িক যিদ আমােদর অ াের 0 indexed না হেয় 1 indexed হত
তাহেল কীভােব কল করেত? িঠক sort ফাংশেন যভােব িশেখিছ সভােব "lower bound(A+1,
A+N+1, q)".
এখন আশা যাক এেদর time complexity ত। অেনেক মেন কের এটা তা binary search
এর মত, তরাং এর time complexity হেব লগািরদম। কথাটা িঠক আেছ আবার িঠক নই। সিত
কথা বলেত সব সময় এর complexity লগািরদম না। অ াের বা ভ র বা এই জাতীয় random
access করা স ব এরকম data structure এর ে এরা লগািরদম (random access করা
যায় মােন constant
( ) সমেয় যেকােনা index ক access করা যায় এরকম)। অ ে এরা
িলিনয়ার (O n ) যমন list, set ইত ািদ।১ এসব ে linear সময় লােগ কারণ list বা set
এসেবর ে i তম index এ ক আেছ এটা constant সমেয় বর করা স ব না। তাই এসব
ে স এেক এেক সকল element দেখ এরপর lower bound বা upper bound এর মান
িনণয় কের।
যাই হাক, তামরা চাইেল আরও সহেজ এই সম া সমাধান করেত পারেত। সট করার পর
তুিম একিট অ ােরেত িলেখ রাখেত পােরা য, কােনা একিট সংখ া সেটড অ ােরেত কাথায় থম
এেসেছ। এই কাজ তা িলিনয়ার সমেয়ই করা যায়। মেন কর সট করা অ ােরর শষ হেত েত যােব
এবং িলখেব য place[A[i]] = i তাহেলই হেব। িক যিদ আমােদর ইনপুেটর সংখ া িল 10,000
এর থেক বড় হয়, অেনক বড়? িচ া কর- এে ে সম া িক? সম া হল আমরা এেতা বড়
সংখ ােক index িহসােব ব বহার করেত পাির না বা করেত হেল যত বড় অ ােরর েয়াজন তত
বড় অ াের আসেল নওয়া স ব না। এই অব া থেক মুি িদেত পাের stl এর map. মেন কর
তামার কােছ িকছু নাম আেছ আর তার বয়স আেছ। তুিম M["hasan"] = 3 করেল hasan এর
িবপে 3 থাকেব এই ম ােপ। তুিম যিদ পের কখনও (যতবার) M["hasan"] কর 3 পােব। ম াপ
ব বহােরর জ তামােক map নােমর হডার ব বহার করেত হেব। এিট declare করার syntax
হেলা "map<string, int> M;" অথাৎ যই টাইপেক ম াপ করবা তা েত, আর যই টাইেপ ম াপ
করবা তা শেষ। এখন তুিম একিট অ ােরর মত কের ব বহার করেত পােরা এেক। "M[?] = ?"
কের তুিম map এ মান রাখেত পােরা আবার "? = M[?]" কের ম াপ থেক কােনা িকছুর মান
১ Set এর ে এর িনজ lower bound ও upper bound আেছ। অথাৎ যিদ "set<int> S" নােম একিট set তামার
কােছ থােক তাহেল তামরা "S.lower bound(q);" এভােব lower bound ব বহার করেত পােরা এবং তা লগািরদিমক হেব।
সাধারণ "lower bound(S.begin(), S.end(), q);" করেল িক িলিনয়ার সময় লাগেব।

২৬
বর করেত পােরা। িঠক অ ােরর মত। তরাং ইনপুেটর মান যিদ অেনক বড় হয় সে ে তামােক
long long
( ক )int এ ম াপ করেত হেব। Map এ কােনা িকছু রাখেত বা খুঁেজ বর করেত সময়
( )
লােগ O log n যখােন n হল map এর সই মুহূেতর সাইজ। আর n িট িজিনস রাখেত O n
memory লােগ।

UVa 101 The Blocks Problem


সমস া: 0 হেত n - 1 পয n িট ক আেছ যখােন n সেবা 25 হেত পাের। এছাড়াও 0 হেত n -
1 পয n িট pile আেছ। েত িতিট ক তার id এর সমান id এর pile এ থােক। অথাৎ i তম
ক i তম pile এ থােক। এরপর এেক এেক িকছু instruction দওয়া হেব। Instruction িল 5
ধরেনর হেত পাের। "move a onto b" বলেল a কেক b েকর উপের িনেত হেব। এজ তােদর
উপের যসব ক িছল তােদরেক তােদর র জায়গায় ফরত িদেত হেব। র জায়গায় ফরত
িদেত হেব মােন তােদর র pile এ ফরত িদেত হেব। একটা িজিনস খয়াল কর এখােন িক বেল
নায় য কীভােব ফরত িদেত হেব, সই জায়গায় িকছু থাকেল িক করেত হেব তা বলা নই। িচ া কের
দখেত পার কন বলা নাই, না বলেল কােনা িত আেছ িকনা (আেগ পুেরা বেলমটা তা পড়!)।
আেরকিট instruction "move a over b" বলেল a কেক b ক যই pile এ আেছ তার top
এ রাখেত হেব। এসময় a েকর উপের যত ক িছল তােদরেক তােদর র জায়গায় ফরত িদেত
হেব। "pile a onto b" বলেল b এর উপের থাকা সব কেক তােদর র জায়গায় ফরত িদেত
হেব আর a ক আর তার উপের যত ক আেছ তােদরেক b েকর উপের এেন রাখেত হেব। "pile
a over b" বলেল a ও তার উপেরর সব কেক b যই pile এ আেছ তার উপের এেন রাখেত হেব।
"quit" বলেল আমােদর অপােরশন শষ কের কান পাইেল এখন কান কান ক আেছ তা িনচ হেত
উপর এই েম ি ট করেত হেব।
সমাধান: Pile দেখই চট কের stack ব বহার করেত বেস যও না। কারণ আমােদর ধু pile এর
উপেরর িজিনস না ভতেরর িজিনসও লাগেব। মেন কর a কােনা pile এর ভতের আেছ। তাহেল তা
আমােদর ভতেরর িজিনস িলর উপর িদেয় লুপ চালােত হেব তাই না? াঁ, তামরা চাইেল অব
যত ণ না a পাও তত ণ ঐ stack থেক তুেল আেরকটা কােনা জায়গায় রাখেত পােরা। তেব
আিম িনেজ এই বেলেমর কাড করেল vector ব বহার করব। vector হেলা এমন একটা অ াের যা
েয়াজন মত ল া হয়। এিট ব বহােরর জ তামােক আেগ থেক বেল িদেত হয় না য তামার কত
সাইেজর vector লাগেব (চাইেল বলেত পার)। তামার যিদ নতুন কান সংখ া এর পছেন ঢুকােত
হয় তাহেল বলেব "V.push back(10);" তাহেলই এর পছেন 10 ঢুেক যােব। আবার চাইেল "pop
back" বেল পছন থেক সংখ া সরােতও পারেব। এসব িজিনস constant সমেয় হেব বেল ধের
িনেত পােরা অথাৎ কান সময় লাগেব না এসব করেত। এছাড়াও vector এর আেরকটা িবধা হেলা
তুিম চাইেল "V[4]" বেল এর 4 index এর সংখ ােক access করেত পারেব। মাট কথা এিট একিট
অ াের যা ব বহােরর েত তামােক সাইজ বেল িদেত হয় না। vector এর push back, pop
back ছাড়াও আরও অেনক ফাংশন আেছ। এেদর মােঝ ব ল ব ব ত িল হেলা size (vector
এর বতমান সাইজ িরটান করেব), clear (পুেরা vector ধুেয় মুেছ পির ার কের দেব) অ তম।
সিত কথা বলেত এই চারিট ফাংশন ছাড়া আর িকছু আমার লােগ না। একিট কথা, vector এর জ
erase, insert, find১ ইত ািদ িকছু ফাংশন আেছ। তামরা ভাবেত পােরা য "আহ কত র একিট
অ ােরর মােঝ আমরা insert, erase করেত পাির বা vector এর ভতের find করেত পাির।" না
ঐ কাজ করেত যও না। কারণ এেত insert বা erase বা find এর জ িলিনয়ার সময় লাগেত
পাের worst case এ। কবল মা push back, pop back আর কােনা index এ V [i] এর
মত কের access করা constant সমেয়র অপােরশন। আরও একিট কােজর ফাংশন আেছ আর
তাহেলা resize. নাম েনই বুঝেত পারছ এ িক কের। 100 সাইেজর একিট vector V ক যিদ বল
V.resize(50) তাহেল এর সাইজ 50 এ কেম যােব। আবার উলেটা ভােব যিদ 50 সাইেজর অ ােরেক
বল V.resize(100) তাহেল আরও 50 িট ান যাগ হেয় যােব। নতুন জায়গা িলেত যতদূর স ব
garbage value থাকেব। যিদ তুিম 0 িদেয় তােদরেক initialize করেত চাও তাহেল তামােক
১ Find মেন হয় vector এর িনজ ফাংশন না। এিট algorithm হডার ফাইেলর একিট ফাংশন যা sort/lower bound

ইত ািদর মত কের ব বহার করেত হয় অথাৎ find(V.begin(), V.end(), x) এরকম।

২৭
িলখেত হেব V.resize(100, 0). তামােদর যিদ n সাইেজর একিট অ াের লােগ তাহেল n ইনপুট
নবার পর V.resize(n) কের n সাইেজর অ াের বািনেয় ফলেত পােরা V ক। এর পর সাধারণ
ভােব &V[i] বা V[i] িদেয় ইনপুট আউটপুট বা িহসাব করেত পােরা।
তাহেল তামরা এই সম া vector ব বহার কের সমাধান কের ফলেত পার। য কয়িট অপাের-
শন দওয়া আেছ স েলা implement করেত হেল আমােদর জানেত হেব কান pile এ আমােদর
সংখ া আেছ। সই কাজ তামরা িত pile এ িগেয় তােত লুপ চািলেয় কের ফলেত পারেব। আবার
কােনা pile থেক যিদ উপেরর সংখ া সরােত চাও তাহেল pop back ফাংশন ব বহার করেব। কা-
না pile এ নতুন সংখ া ঢুকােত হেল push back ফাংশন ব বহার করেত পারেব। এরকম কের
vector ব বহার কের খুব সহেজই এই সম া সমাধান করা স ব।

UVa 10815 Andy's First Dictionary


সমস া: তামােক একিট ট ট দওয়া হেব। ট েট দািড় কমা বা আরও অ া punctuation সহ
capital বা small letter এ িলখা অেনক শ থাকেব। তামােক এই ট েট থাকা সকল িভ িভ শ
lexicographical অডাের সািজেয় ি ট করেত হেব। সই সােথ শ িলেক case insensitive িহ-
সােব ক না করেত হেব। অথাৎ apple, AppLE, APPLE সবই এক। ি ট করার সময় তামােক
শ িলেক lower case এ ি ট করেত হেব।
সমাধান: যিদ তামার কােছ একিট শ থােক তুিম তা খুব সহেজই তােক lower case এ িনেত
পারেব তাই না? যিদ মেন না থােক আবােরা বিল, িতিট character এর উপর লুপ চািলেয় তুিম
দেখা য character িট upper case িক না ('A' <= word[i] && word[i] <= 'Z')। যিদ হয়
তাহেল তােক lower case কর (word[i] = word[i] - 'A' + 'a'). এবার এই word ক stl এর
set এ ঢুিকেয় দাও। আমােদর গিণেতর set এর মত stl এর set এও একই িজিনস একািধকবার
থােক না। সই সােথ তুিম যিদ set এ লুপ চালাও তাহেল তুিম শ িলেক lexicographical এই
সট করা পাবা। আমােদর একিট সট লাগেব যা string ক রাখেব। এর জ তামার েয়াজন set
নােমর হডার ফাইল। এেক declare করেত হেব "set<string> S;" এই ভােব। খয়াল কর এখােন
িক আমরা stl এর string ও ব বহার করিছ (string হডার ফাইল)। আিম ব ি গত ভােব কখনও
char* এর set ব বহার কির নাই তেব এটা বলেত পাির য char* এর set ব বহার করেল আরও
অেনক ঝােমলা করেত হেতা (িনেজ থেক comparison function িলেখ িদেত হেতা)। মেন কর
তামার কােছ একিট শ আেছ "char word[20];" এ। তুিম এেক আমােদর set এ ঢুকােত চাও।
এজ ধু "S.insert(word);" িলখেলই চলেব। এখােন char এর অ াের িনেজ থেকই string এ
convert হেয় যােব। সব শেষ set এর সকল শ এর ভতর িদেয় লুপ চালােনার জ c++11
এর range based loop ব বহার করেলই চেল "for(string w : S)" এবার তুিম cout বা printf
িদেয় w ক print কের িদেলই হেলা। cout িদেয় ি ট করা সহজ তেব এেত সময় বিশ লাগেত
পাের। আিম এজ printf ব বহার কির। তেব stl এর string ক printf িদেয় ি ট করেত একটু
ক করেত হয় printf("%s", w.c str());. মূল সম ায় ফরার আেগ set এর িকছু দরকাির ফাংশন
বেল নই। size() - সট এর সাইজ এবং এে ে unique count দেব অথাৎ তুিম যিদ একই
িজিনস একািধকবার insert কের থােকা তা একািধকবার count হেব না, একবার count হেব।
এছাড়াও empty() - সট িক এখন ফাঁকা? count(x) - x কয়বার আেছ, আসেল সেবা একবারই
থাকা স ব তাই এিট হয় 0 বা 1 িরটান করেব। count এর complexity লগািরদিমক।
সবই তা বুঝলাম িক একটা ট ট থেক কীভােব শ িল পাব? এে ে িবিভ জেন িবিভ
উপায় অবল ন কের থােক। আিম space ওয়ালা ট ট ইনপুেটর ে সবসময় gets ব বহার কের
থািক। মেন কর একিট char line[100] অ ােরেত পুেরা লাইন ইনপুট িনেয়িছ। এরপর আিম সকল
non alphabet character ক space এ পিরবতন কের ফিল (একিট লুপ চালােলই হয়)। সই
সােথ চাইেল upper case letter কও lower case এ পিরবতন কের ফলা যায় (তাহেল আর পের
upper case, lower case িনেয় ঝােমলা করেত হয় না)। এবার stl এর istringstream ব বহার
কির (sstream হডার ফাইল)। এেক declare করেত হয় এভােব "istringstream iS(line);".
এর মােন line অ াের হেত একিট istringstream (পূণ প input string stream) বানােনা হেলা,
যার নাম iS. এবার আমরা এই লাইেনর িতিট শ েক আলাদা আলাদা কের চাই। খুবই সহজ-

২৮
while(iS >> w) যখােন w হেলা একিট stl এর string (string w). এবার এই শ েক stl এর
set এ ঢুিকেয় িদেলই হেয় যােব।
set ও istringstream এর যা ব বহার দখালাম এর বািহের তমন কােনা ব বহার নই, অ তঃ
আমার তমন লােগ না (set এর size ফাংশন ছাড়া)। set এ মােঝ মােঝ erase ব বহার করেত হয়,
কােনা একিট িজিনসেক set হেত মুেছ ফলার জ । এছাড়া lower bound বা upper bound
এর কথা তা আেগই বেলিছ। তুিম যিদ নেট কােনা একিট stl এর নাম িলেখ সাচ দাও তাহেল ব
উদাহরন পাবা।

Timus 1209 1, 10, 100, 1000...


সমস া: একিট sequence দওয়া আেছ: 110100100010000 . . .. বলেত হেব k তম অংক কত
যখােন 1 ≤ k ≤ 231 − 1.
সমাধান: যারা গিণত পছ কর তারা ফমুলা বর কের সমাধান করেত পােরা। থেম দখ কাথায়
কাথায় 1 আেছ। 1, 2, 4, 7, 11 ইত ািদেত। চ া কের দখ এেদর কােনা ফমুলা আনেত পােরা
িকনা। অেনক উপােয়ই ফমুলা বর করা যায়। যমন একটা উপায় হেত পাের pattern খয়াল কের:
1 = 1 + (0), 2 = 1 + (0 + 1), 4 = 1 + (0 + 1 + 2), 7 = 1 + (0 + 1 + 2 + 3). তরাং i তম
সংখ া হেব 1 + (0 + 1 + . . . i). ােকট এর ভতেরর অংেশর ফমুলা তা জােনাই! তরাং ইনপুট
k এর জ আমােদর দখেত হেব এমন কােনা i আেছ িকনা। তা quadratic equation সমাধান
করেলই সহেজই বর হেয় যােব।
ফমুলা বর না কেরও করা যায়। এটা খয়াল কর য এই sequence এ খুব বিশ 1 নই।
পাশাপািশ িট 1 এর দূর linear হাের বাড়েছ। অথাৎ থম িট 1 এর মােঝর র 0, ি তীয় িট
1
√এর মােঝর র 1, এর পেরর র 2 এরকম কের 3, 4, 5... তাহেল 2 দেঘ র মােঝ আসেল
31

2 এর বিশ 1 থাকেব না। কীভােব বুঝলাম? সহজ, িকছু ণ আেগই বেলিছ আমােদর i তম 1
31

থাকেব i2 এ (একদম
√ িঠক কের বলেল (i(i + 1)/2 + 1) এ)। তরাং আমরা বলেত পাির 231 এর
ভতের মাট 231 িট 1 থাকেব। আমরা খুব সহেজই একিট লুপ চািলেয় সব 1 এর ান বর কের
ফলেত পারব (মােন ফমুলায় না কের 0 + 1 + . . . i এর কাজ লুেপ করা) এবং তােদর একিট set এ
রাখেত পারব। এরপর িত ইনপুেট চক কের দখেত পােরা য set এ তামােদর ইনপুেটর সংখ া
আেছ িকনা। চাইেল তামরা ক কের িনেজ থেক binary search ও করেত পােরা। অথবা stl এর
count, find, lower bound বা upper bound ও ব বহার করেত পােরা।

UVa 156 Anagrams


সমস া: যিদ িট শে একই letter সমূহ একদম িভ অডাের থােক তাহেল তােদর anagram
বেল। যমন SPOT আর POTS. এই সম ার ে অ র িল িভ অডাের এবং িভ case
এ থাকেলও আমরা তােদর anagram বলব। আবার যিদ শ িটেত অ র িল একই অডাের থােক
িক তােদর কােরা case যিদ আলাদা হয় আমরা তােকও anagram ধরব। যমন spot আর spot
িক anagram না, িক spot আর SpoT আবার anagram. একিট ট েট যিদ কােনা একিট
শে র anagram না থােক তাহেল তােক ananagram বেল। আমােদরেক একিট দ text এর
সকল ananagram ক lexicographical অডাের ি ট করেত হেব।
সমাধান: এই সম ার বিশর ভাগ আেলাচনা UVa 10815 এর মত। ধু একিট িজিনস িনেয় কথা
বলব। কীভােব বুঝেব য কােনা একিট শে র anagram এর আেগ এেসিছল িকনা। থমত িচ া
কর িট শ anagram িকনা তা কীভােব বুঝেব। িট শ anagram হয় যিদ একই letter িল
িভ অডাের থেক থােক বা একই অডাের থােক িক কােনা একিট অ েরর case আলাদা হয়।
এর মােন শ িটেক একই হওয়া যােব না আর তােদর অ র িলেক sort করেল একই শ হেব
(case insensitive comparison করেত হেব, অথাৎ িট string compare এর সময় case

২৯
এর িভি েত িট অ রেক আলাদা মেন করা যােব না)। অথাৎ S1 আর S2 একই হওয়া যােব না
(S1 != S2) আর এেদেরক সট করার পর (sort(S1.begin(), S1.end()) ও S2 এর জ ও একই
রকম) ও যিদ তােদর ভতের কােনা upper case letter থােক তােদর small case এ পিরনত
করার পর S1 ও S2 একই হেব (S1 == S2). এইেয একিট শে র সকল character ক সট
কেরছ এবং তার ভতের যিদ কােনা upper case letter থােক তােক lower case এ পিরনত
করছ এেক বেল একিট শ েক canonical form এ আনা। এেত লাভ িক? লাভ হেলা- তামরা তা
মুল শ দেখ সরাসির বুঝেতিছেল না য এই িট শ anagram িকনা িক তােদর canonical
form দেখ সহেজই বুঝেত পারেব তারা anagram িকনা। অব এই সম ার ে canonical
form এর পাশাপািশ তামােক জানেত হেব মুল শ িট িক। কারণ িট শ িনেজরাই যিদ একই হয়
তাহেল তা আর তারা anagram হেব না।
এটু যিদ বুেঝ থােকা তাহেল আমার মেন হয় set ব বহার কের সম াটা সমাধান কের ফলেত
পারেব। তাও বিল। িট শ anagram হওয়ার শত িট। এক- তােদর একই হওয়া যােব না, ই-
তােদর ভতের একই অ র িল অ অডাের বা অ case এ থাকেত পাের। আমরা এেক এেক এই
িট শত েয়াগ করব। থেমই আমরা আমােদর ইনপুেট দওয়া সব শ েক একিট সেট ঢুকাব। তা-
হেল যিদ একই রকম িট শ থেক থােক আমরা তােদর পিরবেত একিট শ পাব। আমােদর থম
শত পুরন হেয় িগেয়েছ। এবার ি তীয় শত। আমােদরেক িতিট শে র জ তার canonical form
বানােত হেব। এখন এই একই canonical form ওয়ালা শ িলেক আমােদর বাদ িদেত হেব। কীভা-
ব? আমরা িট সট নব। একিট সেট থাকেব সসব canonical form যােদর anagram এখনও
খুঁেজ পাওয়া যায় নায়। অথাৎ ananagram শ িলর canonical form এর সট। আর আেরক
সেট থাকেব anagram শ িলর canonical form. আমরা এেক এেক শ িল আর তােদর
canonical form েসস করব। থেমই দখ নতুন শে র canonical form িক ananagram
এর সেট আেছ িকনা। যিদ থােক এর মােন এিট anagram. আমােদরেক ananagram এর সট
হেত সই canonical ফমেক মুেছ ফলেত হেব আর এই canonical form ক anagram এর
সেট insert করেত হেব। িক যিদ এই শ ananagram এর সেট না থােক তাহেল আমরা দ-
খব anagram এর সেট আেছ িকনা। যিদ থােক তার মােন এই শ ও anagram. যেহতু এই
canonical form ইিতমেধ ই anagram এর সেট আেছ সেহতু আমােদর করার িকছু নই। িক
anagram এর সেটও যিদ না থােক এর মােন এই শ িট আপাতত ananagram. তরাং এর
canonical ফমেক আমরা ananagram এর সেট insert করব। এই কাজ যিদ আমরা সকল
শে র জ কির তাহেল সব শ েসস শেষ আমরা সকল ananagram এর canonical form
পেয় যাব। এবার শষ কাজ- আমরা আবার আমােদর মূল শ আর তার canonical form এর িল
ধের ধের যাব। যিদ দিখ তার canonical form িট ananagram এর সেট আেছ তার মােন এই
শ িট ananagram. দাও ি ট কের। এরকম কের সকল ananagram ি ট করেত হেব। খ-
য়াল রখ, আমােদর ি ট করা শ িল িক lexicographcal order এ ি ট করেত হেব। কীভােব
করেব? যই শ িল ি ট করেব তােদর একিট set এ ঢুিকেয় তােদর ি ট করেত পার, বা একিট
vector এ ঢুিকেয় তােদর সট কের এরপর ি ট করেত পার। অথবা এইেয শষ লুেপ আমরা যখন
মুল শ আর তার anagram এর উপর লুপ চালাি লাম তখনই যিদ মূল শে র lexicographical
অডাের লুপ চালাই তাহেল আর ক কের আেরকিট set বা vector িনেত হেব না। আসেল আমরা
তা একিট set এ আমােদর সকল শ েক ঢুিকেয়িছলাম (আমােদর সমাধােনর থম সট) ঐ সেটর
উপেরই সবসময় কাজ করেলই হেব, আমােদর আর অিতির set বা vector িনেত হেব না।

UVa 12096 The SetStack Computer


সমস া: মেন কর একিট সট এর stack আেছ। এেক এেক তামােক সেবা 2000 িট অপােরশন
বলেব। Push বলেল তামােক একিট ফাকা সট {} পুশ করেত হেব। Dup বলেল তামােক stack
এর উপেরর যই সটিট আেছ তা আবােরা পুশ করেত হেব। Union বা Intersect বলেল stack হেত
উপেরর িট element ক pop কের তােদর union বা intersection ক পুশ করেত হেব। Add
বলেল একই ভােব stack এর উপেরর িট element িনেয় থমিটেক (stack এ য সবেচেয় উপের

৩০
িছল) ি তীয়িটর ভতের ঢুিকেয় িদেত হেব। যমন মেন কর A = {{}, {{}}} stack এর উপের
আেছ আর B = {{}, {{{}}}} stack এ উপর থেক ি তীয় ত আেছ। তাহেল এেদর union হেব
{{}, {{}}, {{{}}}}, intersection হেব {{}} আর add হেব {{}, {{{}}}, {{}, {{}}}}.
িতিট অপােরশেনর পর তামােক stack এর উপের থাকা সেটর সাইজ ি ট করেত হেব।
সমাধান: ও বাবা! সেটর সট! তেব এই দেখ ভয় পেয় গেল হেব না। আমােদর সমাধান করেত
হেব। আমরা যা করেত পাির তাহেলা িতিট সটেক একিট কের id িদেত পাির। ফেল একিট সেটর
ভতের যিদ কেয়ক ধাপ nested সটও থােক আমরা আসেল তার id িনেয় কাজ করব, সই nested
সট িনেয় না। অথাৎ িতিট সট এখন আসেল একিট id, আবার কােনা একিট সট বা id হেলা
অ িকছু id এর সট বা set<int>. stack এর উপেরর সেটর সাইজই হেলা আমােদর িত
অপােরশেনর পর উ র। যখনই নতুন কােনা সট তির হেব আমরা map এ দেখ নব য এই
সট আেগই এেসিছল িকনা, আর না আসেল তােক একিট নতুন id িদব। অথাৎ আমােদর map হেব
map<set<int>, int> অথাৎ এিট একিট int এর সট ক int এ map কের। এছাড়াও আমােদর
আেরকিট reverse map এর দরকার হেব অথাৎ কান id ত কান সট। তেব সজ তামরা
চাইেল map না ব বহার কের একিট vector ব বহার করেত পােরা (vector<set<int>>). আর
সব শেষ আমােদর একিট stack লাগেব। চাইেল তামরা সেটর stack িনেত পােরা, আবার চাইেল
id এর stack িনেত পােরা। id এর সট নওয়া মেন হয় িবধা জনক।
মেন কর আমরা একিট id এর stack িনলাম। Push বলেল আমরা একিট ফাকা সট িনেয় দখব
map এ ইেতামেধ ই এরকম কােনা সট আেছ িকনা, না থাকেল এেক একিট নতুন id িদেয় map
এ রাখব এবং সই id আমােদর stack এ push করব। Dup বলেল আমরা stack এর উপেরর
element িনেয় তােক আবার push করব। Union বা Intersect বলেল আমরা stack হেত িট
id িনেয় আমােদর vector হেত দখব এরা কান কান set. এর পর সই িট সেটর মােঝ union
বা intersect কের পাওয়া নতুন সটেক map, stack ও vector এ রাখব (এমনও হেত পাের য
map এ ইেতামেধ ই আেছ, সে ে map বা vector এ রাখার দরকার নই)। সবেশেষ Add এর
ে আমরা একিট id ক ওপর সেট ঢুিকেয় আেগর মত map, stack ও vector ক আপেডট
করব। এখােন একটা িজিনস খয়াল রখ, vector এ থাকা আেগর সটেক যন পিরবতন কের বস
না। id ক সেট insert করার আেগ তামােক সই সট copy কের িনেত হেব। এসব ছাট খাট ভুল
হেতই পাের। তামােদরেক debug কের কের বর করেত হেব এসব ভুল।
আমরা মাটােমািট map ও vector এর ব বহার ইেতামেধ ই দেখ ফেলিছ। এবার দখা যাক
stack এর ব বহার। আিম ধের িনি তামরা stack নামক ডটা াকচার ইেতামেধ ই জােনা। এিট
ব বহােরর জ আমােদর দরকার stack নামক হডার ফাইল। একিট int এর stack ক declare
করেত হয় stack<int> S এরকম কের। এর দরকাির ফাংশন িল হেলা push(x) - তাহেল x পুশ
হেয় যােব। pop() - তাহেল উপেরর element মুেছ যােব। খয়াল কর pop িক িকছু return কের
না, কবল উপেরর element ক ফেল দয়। top() - stack এর উপেরর element ক return
করেব তেব এিট মুেছ যােব না। empty() - এিট true দেব যিদ তামার stack ফাঁকা হয়। size()
- এিট stack এর সাইজ বলেব।

UVa 540 Team Queue


সমস া: অেনক িল মা ষ আেছ এবং বলা আেছ ক কান দেল। এখন এেক এেক মা ষ আসেছ। ক
আসেছ তা বলা আেছ। এক জন এেস যিদ দেখ তার দেলর কউ আেগ থেকই লাইেন আেছ তাহেল
স তােদর পছেন িগেয় দাঁড়ােব। যিদ না থােক তাহেল স সবার শেষ দািড়েয় যােব। যখন লাইন
থেক কউ বর হেব তখন লাইেনর থেক বর হেব। বলেত হেব লাইন থেক ক ক িক অডাের
বর হেব। মাট 200,000 এর মত instruction থাকেত পাের।
সমাধান: Stl এর queue ব বহার করেল বশ সহেজই সমাধান হেয় যােব। ই ধরেনর queue
রাখেত হেব। একিট queue ত থাকেব লাইেন কান কান দেলর মা ষ িক অডাের আেছ (ধরা যাক
এিট িবেশষ queue), আর িতিট দেলর জ আলাদা আলাদা queue. যখন একজন মা ষ আসেব
তখন তার দেলর queue দেখা। যিদ সিট ফাকা নাহয় তাহেল সই queue ত তােক ঢুিকেয়

৩১
দাও। যিদ ফাকা হয় তাহেল তােক সই queue ত ঢুিকেয় দাও এবং সই সােথ তার দলেক (মােন
তার দেলর id ক) িবেশষ queue ত ঢুিকেয় দাও। বর করার সময় দেখা িবেশষ queue এর
েত কান দল আেছ, সই দেলর queue এর সামেনর জনেক বর কের দাও। যিদ এর ফেল
সই queue ফাঁকা হেয় যায় তাহেল তার দলেক িবেশষ queue হেত বর কের ফল। তাহেলই এই
সম া সমাধান হেয় যােব।
Stl এর queue ব বহােরর জ আমােদর queue হডার ফাইল লাগেব। int এর queue ক
declare করেত হয় queue<int> Q এর মত কের। এর দরকাির ফাংশন িল হেলা- push(x) -
x পুশ হেয় যােব, pop() - পপ হেব িক এিট কােনা িকছু িরটান করেব না, front() - queue এর
সামেনর িজিনস িরটান করেব তেব পপ হেব না, size(), empty() ইত ািদ অ া stl এর মতই
কাজ করেব।

UVa 136 Ugly Numbers


সমস া: যসকল সংখ ার াইম ফ া র িল কবলমা 2, 3 বা 5 তােদর ugly সংখ া বেল। যমন
1, 2, 3, 4, 5, 6, 8, 9 ইত ািদ। তামােক 1500 তম ugly সংখ া বর করেত হেব।
সমাধান: এই সম া সমাধােনর নানা উপায় আেছ। এর মােঝ একিট উপায় তামােদর বলা যাক।
মেন কর একিট সেট থম িকছু ugly সংখ া আেছ। আমরা এেদর মােঝ সবেচেয় ছাটিট িনব (এবং
ঐ জায়গা থেক ঐ সংখ া মুেছ দব), এিট হেব আমােদর থম ugly সংখ া। এর পর এেক 2, 3 ও 5
িদেয় ন কের ঐ সেট এই নতুন সংখ া িল রাখব। এরপর আবার সবেচেয় ছাট সংখ ািট িনব, এিট
হেব আমােদর ি তীয় ugly সংখ া। আবার আমরা তােক 2, 3 ও 5 িদেয় ন কের এই নফল িলেক
সেট রেখ দব। এভােব চলেত থাকেব 1500 বার। একটু িচ া করেল বুঝেব থেম সেট ধু 1
থাকেলই চলেব। তরাং আমােদরেক সট হেত িতবার minimum সংখ া বর করেত হেব। stl
এর set এ এই কাজ স ব বা তামরা চাইেল priority queue ব বহার করেত পােরা। Priority
queue ব বহােরর সম া হল এখােন একই সংখ া একািধক বার ঢুকােল একািধক বার ঐ সংখ া
থাকেব। তাহেল িক আমােদর এই সম ায় ইবার 6 চেল আসেব (একবার 2 × 3 আেরকবার
3 × 2).১ তরাং ভাল হয় যিদ আমরা এখােন set ব বহার কির। set স েক মেন হয় ইেতামেধ ই
অেনক িকছু বেলিছ। িক একটা িজিনস বিল নাই কীভােব এ থেক সবেচেয় ছাট সংখ া পােব। সহজ
"*S.begin()" ( খয়াল কর েত একিট star আেছ)। সেটর সবেচেয় ছাট সংখ া পেয় গেল
এর পেরর কাজ হল সট থেক সই সংখ া মুেছ ফলা। x ক মুেছ ফলেত চাইেল আমরা িলখেত
পাির "S.erase(x)" এবং এজ লগািরদিমক সমেয়র েয়াজন। বািকটু আমার মেন হয় তামরা
কের ফলেত পারেব।

UVa 1592 Database


সমস া: একিট টিবল দওয়া আেছ। টিবেলর সেবা 10,000 িট row এবং 10 িট column
থাকেত পাের। টিবেলর িতিট সেল িকছু text আেছ। িতিট row ত একিট column এর text
তার পােশর column এর text হেত একিট কমা ারা পৃথক থাকেব। বলেত হেব এমন িট row
(r1 , r2 ) ও িট column (c1 , c2 ) আেছ িকনা যন (r1 , c1 ) = (r1 , c2 ) ও (r2 , c1 ) = (r2 , c2 )
হয়। অথাৎ ঐ সল িলর শ একই হয় িকনা।
সমাধান: িলিমট অ সাের তুিম চাইেলই r1 , r2 , c1 , c2 এর চারিট লুপ চালােত পারেব না। যেহতু
কলােমর িলিমট বশ কম তাহেল কলােমর িট লুপ চালােয় ফেলা। এেত কের আমােদর c1 , c2
িনিদ হেয় যােব। এখন কথা হেলা এমন িট r1 , r2 পাওয়া যােব িকনা যা আমােদর condition পূণ
কের। আমরা যা করেত পাির তাহেলা িতিট row ত িগেয় আমােদর িনবািচত িট কলােমর string
িনেয় তােদরেক জাড়া আকাের set বা map এ রাখেত পাির। যিদ সব row দখার পর দখ একই
১ যােদর এই কথা বুঝেত সম া হে - অথাৎ কন ইবার 6 আসেব তারা হােত হােত simulate কের দখ।

৩২
জাড়া একািধক বার এেসেছ তার মােন এরকম r1 , r2 পাওয়া যােব। যেহতু আমােদর ধু াঁ না
বলেলই চলেব না, r1 , r2 ও িদেত হেব, সেহতু আসেল আমােদর set িদেয় কাজ চলেব না। একিট
map িনেত হেব আর িলেখ রাখেত হেব য এই string জাড়া অমুক row ত এেসিছল। যখন আমরা
নতুন row ত এেস নতুন string জাড়া পােবা তখন আমরা map এ দখেবা এর আেগ এই জাড়া
এেসিছল িকনা বা আসেলও কাথায়। এভােবই আমরা আমােদর দরকাির r1 , r2 পেয় যাব।
এখন কােড আসা যাক। থম আমরা string জাড়া বানাব কীভােব? তামরা চাইেল একিট
vector িনেয় তােত string িল রাখেত পােরা। অথবা চাইেল একিট structure ক declare
কের তােত আমােদর িট string রাখেত পােরা। এর পর সই structure ক map করেত পােরা।
তেব সে ে সম া হেলা তামােদর সই structure এর comparison function িলখেত হেব।
এজ তামােদর < operator িট overload করেত হেব। এ িবষেয় তামরা নেট অথবা " া ািমং
িতেযািগতা" বইেয় দেখ িনেত পােরা। চাইেল অপােরটর ওভারেলাড না কের functor ও declare
করেত পােরা। তুিম যিদ vector ব বহার করেত তাহেল কােনা operator overload এর দরকার
হত না, কারণ string এবং vector জেনরই < operator ভাল মতই define করা আেছ।
তেব এই সম ার ে আমার কােছ িবধা জনক উপায় মেন হয় string এর pair নওয়া।
Pair হেলা stl এর একিট িজিনস। এেক আসেল ই member variable ওয়ালা একিট structure
ক না করেত পােরা। এিটর জ দরকার utility নামক হডার ফাইল। এিট declare এর উপায়
হেলা pair<string, string>. যিদ একিট variable এ তুিম একিট pair রাখেত চাও তাহেল তুিম
এরকম িলখেত পােরা "pair<string, string> P = make pair(A, B);" যখােন A ও B িট
string. কােনা একিট pair এর থম element ক ব বহার করার জ িলখেত হয় "P.first" আর
ি তীয়িটেক ব বহােরর জ "P.second". Pair এর িবধা হেলা এই ে তুিম যিদ pair এর
vector বা array িনেয় তােদর sort করেত চাও তাহেল কােনা অিতির comparison ফাংশন
িলখেত হেব না। তেব এর সম াও আেছ। ায়ই দখা যায় য িকছু র কাড করার পর মেন হয়
আহা আেরকটা variable থাকেল মেন হয় ভাল হয়। সে ে pair ক extend করা স ব হয় না।
তখন দখা যায় আমােদর নতুন কের structure বানােত হয়। এর ফেল অেনক কাড পিরবতন হয়।
এখন অব tuple আেছ। তামরা চাইেল tuple ব বহার করেত পােরা। আিম খুব একটা ব বহার
কির নাই এিট।
তাহেল string জাড়া represent করার ঝােমলা তা গল। িক আমােদর ইনপুট তা র
কের কলাম েলা আলাদা করা থাকেব না। সেলর মান িল কমা ারা পৃথক থাকেব। তােদর আলাদা
করা যায় কীভােব? বুি হেলা string এর push back ফাংশন ব বহার করা। gets িদেয় ইনপুট
িনেয় (কারণ লাইেন space থাকেত পাের) এর পর কমা না পাওয়া পয push back ফাংশন
ব বহার কের string বানােত থােকা। কমা পেল বা লাইন শষ হেয় গেল এই string ক ধের
একিট vector এ ঢুিকেয় দাও। তাহেল েসস শেষ একিট row এর িতিট column এর মান
আলাদা আলাদা কের vector এ পেয় যােব।

UVa 12100 Printer Queue


সমস া: একিট queue ত অেনক িল কাজ আেছ। িতিট কােজর একিট priority আেছ। তুিম
queue হেত থম কাজ িনেব যিদ দেখা এর থেকও বিশ priority ওয়ালা কাজ queue ত আেছ
তাহেল এেক সবার পছেন রাখেব। আর যিদ এরকম কাজ না থােক তাহেল তুিম এই কাজ করেব।
Queue ত একিট কাজ mark করা আেছ। বলেত হেব সই কাজিট কখন হেব। যেকােনা কাজ
করেত 1 িমিনট সময় লােগ, আর queue হেত কােনা কাজ িনেত বা রাখেত কােনা সময় লােগ না।
মাট কাজ মা 100 িট হেত পাের।
সমাধান: আমােদর জানেত হেব য বতমােন সবেচেয় বিশ কত priority এর কাজ আেছ। এ জ
তামরা একিট priority queue ব বহার করেত পােরা। একিট কাজ িনেয় দখেব এর priority আর
priority queue এর সবেচেয় বড় সংখ া সমান িকনা। সমান হেল এই কাজিট করেব, এবং করা
শেষ queue ও priority queue জায়গা হেতই এিট ফেল দেব। আর না হেয়(থাকেল queue)
এর শেষ এই কাজ রেখ দেব। যেহতু মা 100 িট কাজ সেহতু আমােদর এই O n2 +n log n

৩৩
( )
এর অ ালগিরদেম কােনা সম া হেব না। O n2 কারণ- হয়েতা িতবার সব কাজ দখার পর সব
( ) ( )
শেষরটা আমরা নব। তাহেল O n বার O n সাইেজর অ াের বা queue আমােদর ঘঁেট দখেত
( )
হে । আর িতবার priority queue থেক একিট সংখ া ফলেত সময় লােগ O log n . তরাং
( )
n িট িজিনস ফলেত সময় লাগেব O n log n . priority queue এর উপেরর সংখ া কত এই
ে র উ র পেত আসেল constant সময় লােগ।
একিট িজিনস, priority queue ব বহােরর জ তামােদর লাগেব queue নােমর হডার ফা-
ইল। এছাড়া সব কাজ queue এর মত, ধু মা এর front() ফাংশন না থেক থাকেব top() নামক
ফাংশন। এিট সবসময় এর ভতের থাকা সেবা মানিট top এ রােখ। এই সম ার ে িক set
ব বহার করেত যেয়া না। কারণ set এ একিট সংখ া একািধক বার insert করেলও সিট মা এক-
বার থােক। তামরা চাইেল set এর পাশাপািশ একিট map িনেয় তােত সংখ া িলর count রাখেত
পােরা িক তােত মেন হয় ঝােমলা বিশ হেয় যায়। এর থেক priority queue ই ভাল।

৩.১ অ শীলনী
৩.১.১ সম া
Simple
ˆ UVa 1593 Alignment of Code ˆ UVa 1594 Ducci Sequence
ˆ UVa 10935 Throwing cards away I ˆ UVa 10763 Foreign Exchange
ˆ UVa 1595 Symmetry ˆ UVa 230 Borrowers

ˆ UVa 1596 Bug Hunt ˆ UVa 822 Queue and A

ˆ UVa 12504 Updating a Dictionary ˆ UVa 511 Do You Know the Way to San Jose?

ˆ UVa 400 Unix Is

Easy
ˆ UVa 1598 Exchange ˆ UVa 12333 Revenge of Fibonacci
ˆ UVa 212 Use of Hospital Facilities ˆ UVa 207 PGA Tour Prize Money
ˆ UVa 814 The Letter Carrier's Rounds ˆ UVa 221 Urban Elevations

ˆ UVa 1597 Searching the Web

৩.১.২ িহ ট

UVa 1594: কােনা একিট sequence এর আেগ এেসিছল িকনা এটা বুঝার জ তামরা চাইেল
vector এর map রাখেত পােরা। অথবা তামরা ধর 200 বা 500 বার চ া করবা য শূ পেয়
যাও িকনা, পেল তা হেয়ই গল। আর না হেল বেল দাও য হেব না। চাইেল বেস বেস মাণ করেত
পােরা কন 200 বা 500 যেথ !
UVa 10763: এই সম া সমাধােন তামরা pair এর িট vector িনেত পােরা। একিটেত সাজা
pair রাখেব আেরকিটেত উলেটা pair (a,b এবং b,a). এখন িট vector ক sort কের তােদর
== িদেয় compare কের দেখা। তাহেলই হেয় যােব।
UVa 207: তামরা তা %s িদেয় ইনপুট আউটপুট কেরছ, িক %20s বা %9.2lf বা %-20s
এরকম ব বহার কেরছ? না জানেল একটু নেট দেখ জেন নাও। এই সম া stl এর অধ ােয় রাখার
কারণ হেলা sort এর জ comparison ফাংশন িলখেত শখা।
UVa 814: এই সম ায় একিট িজিনস িশখেল মেন হয় ভাল হয়। তাহল string এর find ফাংশন।
এেক তুিম যিদ কােনা একিট character দাও তাহেল তামােক বেল দেব থেম সই character

৩৪
কাথায় আেছ। এছাড়াও এর আেরকিট দরকাির ফাংশন আেছ, তাহেলা substr(x, y)- এিট x হেত
y - 1 পয substring দয়। আশা কির এই িট ফাংশন ব বহার কের তামরা email address
ক ই অংেশ ভে ফলেত পারেব। না পারেলও সম া নাই, শষ আ য় for loop তা আেছই।

৩৫
৩৬
অধ ায় ৪

Mathematics স িকত সম া

UVa 11582 Colossal Fibonacci Numbers!


সমস া: Fibonacci সংখ ার সং া তা জানাই আেছ তামােদর? f (0) = 0, f (1) = 1, f (n) =
f (n − 1) + f (n − 2). তামােদর a, b, n (0 ≤ a, b < 264 , 1 ≤ n ≤ 1000) দওয়া থাকেব।
বলেত হেব f (ab ) mod n এর মান কত।

সমাধান: তামরা িট উপােয় আগােত পােরা। একিট হেলা িবিভ n এর জ থম ৫০ িট f (i) mod
n ি ট কের দখা আর আশা করা যিদ কােনা িহ ট পেয় যাও। আর আেরকটা উপায় হেলা theoretically
িচ া করা। যারা অিভ কে টে ট তারা এই সম া দেখ থেম যা ভাবেব তাহল ab অেনক অেনক
বড় মান। তরাং হয় আমােদর matrix exponent এর মত িকছু করেত হেব নাহেল আমােদর
sequence ক সাইেকেল ফলেত হেব। যিদ কউ খুব recent সমেয় matrix exponent টক-
িনক িশেখ থােকা তাহেল তা কােনা কথাই নই, স সানে এটােক সই ভােব সমাধান করেত লেগ
যােব। িক একটা িজিনস, তামােক বর করেত হেব ab তম fibonacci সংখ া আর ab িক অেনক
অেনক বড় সংখ া। Matrix exponent প িতেত i তম fibonacci সংখ া বর করেত সময় লােগ
মাটােমািট log (i), তাহেল ab তম fibonacci সংখ া বর করেত লাগেব log (ab ) = b log (a)
সময়। যা অেনক অেনক বিশ হেয় যায়। তরাং matrix exponent িদেয় হেব না। তাহেল দখা
যাক এই sequence ক সাইেকেল ফলা যায় িকনা। n = 6 এর জ f (i) mod n এর মান িল
দখা যাক- 0, 1, 1, 2, 3, 5, 2, 1, 3, 4, 1, 5, 0, 5, 5, 4, 3, 1, 4, 5, 3, 2, 5, 1, 0, 1.
আমরা িক আমােদর সাইেকল পেয় গিছ, কারণ আমরা পর পর 0 আর 1 পেয়িছ, অথাৎ আমােদর
সাইেকলটা আবার থেক হেয় গেছ। এ অব ায় আমােদর মেন কেয়কটা ে র উদয় হেত
পাের। থমত, সবসময় সাইেকেল পড়েব িক না। ি তীয়ত, সাইেকেল পরেল িক এটা থেক সা-
ইেকেল পড়েব নািক মাঝা মািঝ কাথাও থেক। তৃতীয়ত, সাইেকেলর length িকরকম হেব। আমারা
এেক এেক এসব ে র উ র পাবার চ া কির।
থম - সবসময় সাইেকেল পড়েব িকনা। াঁ পড়েব। কন? কারণ আমরা সবসময় mod n
িনি , তরাং আমােদর সংখ া িল সবসময় 0 হেত n − 1 পয হেত পাের। তুিম যিদ পাশাপািশ
িট সংখ া নাও তারা মাট n2 রকম হেত পাের। অথাৎ n2 + 1 length পয যাবার পর যই
pair পাবা সটা অব ই এর আেগ এেসেছ কারণ n2 এর বিশ রকেমর pair হওয়া স ব না।
তরাং আমরা সবসময় সাইেকল পাব। ি তীয় - এই সাইেকলিট িক েত পড়েব িকনা অথাৎ
0, 1 . . . , 0, 1, . . . এরকম হেব িকনা। াঁ। কন? ধের নাও য এিট 0, 1 এ পের না, এিট মােঝর
কাথাও a, b ত পের অথাৎ f (i) mod n হেব 0, 1 . . . , a, b, . . . , a, b, . . .. এখন ি তীয় a, b
এর কথা িচ া কর। এর আেগর সংখ া কত? b - a. িক থম a, b এর আেগর সংখ াও b - a.
অথাৎ আমােদর সাইেকলটা আসেল a, b ত িগেয় পের না, তার আেগ িগেয় পের। িক এভােব
তা তুিম একঘর একঘর কের িপছােত থাকেতই পােরা তাই না? এর মােন আসেল সাইেকলটা 0, 1
থেকই হয়। এখন তৃতীয় - সাইেকলর length কত। থম ে র উ র থেক দেখছ য n2 এর

৩৭
মােঝ সাইেকেল পড়েবই। িক আসেল practically এর অেনক আেগই সাইেকেল পের। এমনিক n
এর মান 1000 এর মােঝ 3000 ধােপর মােঝই সাইেকেল পের যায়। িক ভােব বর করলাম? সহজ,
একটা কাড কেরিছ 7-8 লাইেনর।
তাহেল আর িক। িতিট n এর জ তামরা পুেরা সাইেকল বর কের আলাদা আলাদা vector
এ রেখ দাও (vector এর অ াের)। এবার ইনপুট পেল দেখা এই n এর জ সাইেকেলর length
কত। ধরা যাক c. তাহেল ab mod c বর করেত হেব। এটােতা bigmod ছাড়া িকছুই না। ধু খয়াল
রাখবা overflow যন না হয়। তাহেল আমরা f (ab ) mod n এর মান পেয় যাব যা vector এর
ab mod c তম সংখ া।

UVa 12169 Disgruntled Judge


সমস া: একটা ু জাজ মেন মেন চারিট সংখ া x1 , a, b, T িনেলা (0 ≤ x1 , a, b ≤ 10000). এর-
পর স xi = (axi−1 +b) mod 10001 ব বহার কের x2 , x3 , . . . x2T এর মান বর করল। এরপর
স তামােক x1 , x3 , x5 , . . . x2T −1 এর মান িল িদল আর তামােক বলল য x2 , x4 , x6 , . . . x2T
এর মান ি ট করেত। যিদ একািধক উ র থােক তাহেল যেকােনা একিট িদেলই চলেব। একািধক
উ র মােন এমনও তা হেত পাের য একািধক a, b এর জ একই x1 , x3 , x5 , . . . x2T −1 িক
িভ x2 , x4 , x6 , . . . x2T পাওয়া যায়। সে ে যেকােনা একিট িদেলই চলেব। T এর মান সেবা
100 হেত পাের।

সমাধান: আমরা যিদ a ও b এর উপর লুপ চালাই এবং 2T িট সংখ া বর কের দিখ য তারা সমান
িকনা তাহেল একটু বিশ সময় লেগ যায় a × b × T = 1010 . তাহেল কীভােব আগােনা যায়? তুিম
ই ভােব িচ া করেত পােরা। এক- a ও b ইিট লুপ না চািলেয় একিট লুপ চালােনা যায় িকনা। ই-
আমােদর x1 ও x3 দওয়া আেছ। এখান থেক কােনা ভােব a ও b এর মােনর ব াপাের কােনা
সাহায পাওয়া যায় িকনা।
থেম x3 ক x1 এর সােপে িলেখ দখা যাক- x3 ≡ ax2 + b ≡ a(ax1 + b) + b ≡
a2 x1 +ab+b( mod 10001) বা x3 −a2 x1 = b(a+1)+10001c যখােন c একিট integer১ .
যিদ আমরা a এর উপর লুপ চালাই তাহেল এই equation এ ইিট unknown থাকেব b আর c.
তাহেল আমরা আমােদর equation ক িলখেত পাির- bp+cq = r যখােন p, q, r constant এবং
b এর মান সেবা 10000 হেত পাের। কীভােব আমরা এরকম ভােব িলখলাম? সহজ, আমরা আেগর
সমীকরেণ p = a + 1, q = 10001 আর r = x3 − a2 x1 বসাই তাহেলই আমরা bp + cq = r
পেয় যাব। এখন আমরা b এর এমন সমাধান চাই যন তা অঋণা ক ও সেবা 10000 হয়। আমরা
সাধারনত unknown ক x, y, z ইত ািদ ারা কাশ কের থািক। তাই আমরা িবধার জ b ক
x ও c ক y ারা পিরবতন কির। তাহেল আমােদর সমীকরণ দাঁড়ায় px + qy = r.
আমরা িক এই ধরেনর সমীকরণ সমাধান করা জািন। আমােদর euclid এর অ ালগিরদম ব ব-
হার করেত হেব বা extended gcd খাটােত হেব। সে ে আমরা এমন x0 , y0 পােবা যন px0 +
qy0 = g যখােন g হল p ও q এর gcd. এর general solution হেব p(x0 +tq)+q(y0 −tp) =
g যখােন t হল integer constant. এটা আসেল extended gcd এরই একিট properties. এখন
আমােদর ডান পাশেক r এর সমান করার জ ই িদেক আরও একিট integer constant ধরা যাক
k িদেয় ন করেত হেব (k = r/g). তাহেল দাঁড়ােব kp(x0 + tq) + kq(y0 − tp) = r.
আমরা বেলিছলাম য আমরা এমন অঋণা ক b (যা পরবতীেত x হেয় িগেয়িছল) চাই যা এই
equation ক satisfy করেব এবং 10001 এর থেক ছাট হেব (বার বার 10000 এর সমান
বা ছাট বলার থেক 10001 এর থেক ছাট বলা সহজ)। অথাৎ 0 ≤ k(x0 + tq) < 10001 বা
−x0 /q ≤ t < 10001/qk − x0 /q. একটু উপের যিদ তাকাও তাহেল বুঝেত পারেব q = 10001.
তার মােন −x0 /10001 ≤ t < 1/k − x0 /10001. এখােন খয়াল কর 1/k িক খুবই ছাট
সংখ া, [−x0 /10001, 1/k − x0 /10001) এই বাউে ডর ভতের আসেল একিটর বিশ integer
থাকেব না। এর মােন এত ণ এেতা খেটখুেট এেতা এেতা constant, এেতা এেতা equation
১a ≡ b(modc) হেল আমরা িলখেত পাির a = b + kc যখােন k একিট integer.

৩৮
সমাধান কের আমরা জানেত পারলাম য, িতিট a এর জ আমরা আসেল সেবা 1িট b পােবা
যটা আমােদর x1 হেত x3 িদেত পারেব।
তাহেল সারমম দাঁড়াল- আমরা a এর উপর লুপ চালােবা। Extended gcd ব বহার কের b এর
মান বর করব। এরপর একিট T এর লুপ চািলেয় x1 . . . x2T বর কের িমিলেয় দখেবা য এরা
আমােদর ইনপুট এর সােথ মেল িকনা। আমােদর সময় লাগেব a×T = 106 . সােথ extended gcd
এর একটা ফ া র আেছ, আমরা সটােক গণায় ধরলাম না। আর আসেল আমােদর সকল x1 . . . x2T
এর মান বর না করেলও চেল। যখন কােনা একিট মান ম াচ করেব না তখন আমরা পেরর a এর
মান পরী া করব। এর ফেল সময় আরও কম লাগেব।

UVa 10375 Choose and divide

সমস া: তামােক p, q, r, s দওয়া আেছ যখােন (এেদর


) ( )সবাই অঋণা ক ও সই সােথ সেবা
10000. সই সােথ p ≥ q ও r ≥ s. তামােক pq / rs বর করেত হেব। এটা বলা আেছ য
উ র 108 এর বিশ হেব না এবং তামােক 5 digit precision পয ি ট করেত হেব।

সমাধান: আিম জািন না জােজর ট কস কতটু শি শালী। আিম এই বেলম পেল িক িক


সাবধানতা অবল ন (কের ) সমাধান
( ) করতাম তা দখাই। থমত এটা খয়াল করেত হেব য উ র ছাট
হেব মােন এই না য pq বা rs ছাট। এমন হেত পাের য ই জনই অেনক বড় িক ভাগ করেল ছাট
হেয় যায়। আবার সই সােথ যেহতু উ র আমােদর decimal এ িদেত হেব তরাং আমােদর খুব
perfectly এেদর মান বর করেত হেব সরকম কথাও নই। তরাং( আমােদর ) মাটােমািট সাবধানতা
অবল ন করেলই চলেব। সাবধানতা কন? মেন কর তুিম থেম rs বর কেরছ এটা অেনক বড়,
তরাং( তামার
) precision loss হেয় িগেয়েছ double এ রাখেত।১ ফেল তুিম যখন আেরকিট বড়
সংখ া pq ক ভাগ করবা তখন সই আেগর precision loss তামােক ভাগােব। মােন 101 ক
100 িদেয় ভাগ করা আর 100 ক 100 িদেয় ভাগ করা তা আলাদা িজিনস তাই না (যিদ কি উটার
মা ২ ঘর precision রােখ)? তাহেল িক করা যায়? থমত আমরা আমােদর term ক একটু ভে
িলিখ। (p−q+1)...p
1...q × (r−s+1)...r
1...s
. অথাৎ উপের এক সংখ া আেছ, িনেচ এক সংখ া আেছ।
উ র 108 এর বিশ হেব না, আর এেদর কােনা সংখ াই 104 এর বিশ হেব না।
তুিম যা করবা তাহেলা একিট variable িনবা ধরা যাক ans. আর L আর R িদেয় ans এর
জ lower এবং upper bound িঠক করা হয়। এই L আর R িক তা একটু পেরই পির ার হেব।
যাই হাক, ans এর মান েত 1 কারণ আমরা এখন এেক এেক সব সংখ া ন ভাগ করব। এখন
দেখা য আমােদর উ র L এর থেক ছাট িকনা, ছাট হেল এবং উপের যিদ এখেনা সংখ া বািক
থােক তাহেল এেক উপেরর একিট সংখ া িদেয় ন করবা। আর যিদ ans এর মান R এর থেক বড়
হয় এবং িনেচ যিদ এখেনা সংখ া থেক থােক তাহেল িনেচর কােনা একিট সংখ া ারা ভাগ করব।
আর আেগর িট condition যিদ পূণ না হয় তাহেল আর িক, বািক যেকােনা সংখ া িদেয় ন ভাগ
করেলই হেব। যিদ তামরা L = 1 আর R = 1012 নাও তাহেলই হয়েতা হেয় যােব। এখােন কােনা
ধরা বাধা িনয়ম নাই। মুল আইিডয়া হল আিম আমার ans ক কখনও খুব বড় হেত দব না আবার
খুব ছাট হেত দব না। তুিম চাইেল এই েসেসর েতই উপেরর সব সংখ ােক একিট vector
আর িনেচর সব সংখ ােক আলাদা আেরকিট vector এ রাখেত পােরা। অথবা যেহতু উপর িনচ
জায়গােতই সংখ া িল িট েপ আেছ সেহতু িট variable রেখও তুিম র বা সংখ া সামলােত
পােরা।

১ তুিম এভােব িচ া করেত পােরা য, কি উটার double এ কেয়ক ঘর রাখেত পাের মা । এখন যিদ তুিম এখােন অেনক

বড় মান রাখেত যাও তাহেল কি উটার শেষর িদেকর অংক আর রাখেব না, সখােন স 0 বিসেয় দেব।

৩৯
UVa 10791 Minimum Sum LCM
সমস া: তামােক N (< 231 ) দওয়া থাকেব। তামােক এমন িকছু সংখ া (একািধক হেত হেব)
বর করেত হেব যন তােদর লসা N হয় এবং সই সংখ া িলর যাগফল সবিন হয়। যমন N
= 12 হেল আমােদর সংখ া িল হেব 3 আর 4. কারণ এেদর লসা 12 এবং এেদর যাগফল 7
যা সবিন । তামােক সই সবিন যাগফলিট ি ট করেত হেব। মাট 100 িট test case দওয়া
থাকেব।
সমাধান: তামােক যিদ িকছু সংখ া দওয়া থােক তাহেল তােদর লসা কীভােব বর করেব? অেনক
উপােয়ই বর করা যায়। তার মােঝ একিট উপায় হেলা সংখ া িলেক prime factorization করা।
এরপর িতিট prime এর জ দখা য তামােক দওয়া সংখ ােদর মােঝ কােনা সংখ ায় তার
সবেচেয় বড় power কত আেছ। এভােব িতিট prime এর জ সই বড় power িদেয় ন করেলই
তুিম লসা পেয় যােব। উদাহরণ দওয়া যাক। ধর আমরা 4, 6, 18 এর লসা বর করেত চাই।
এখন 4 = 22 , 6 = 2 × 3 আর 18 = 2 × 32 . তাহেল 2 এর সবেচেয় বড় power আেছ 2, আর
3 এর সবেচেয় বড় power আেছ 2। তাহেল আমােদর লসা হেব 22 × 32 = 36. এর মােন যিদ
আমােদর লসা দওয়া থােক তাহেল এেক √ আেগ prime factorize কের নই। যেহতু লসা খুব
জাড় 231 হেত পাের আমরা খুব সহেজই √N এ তার prime factorize করেত পাির। বা তােত যিদ
খুব বিশ সময় লেগ যায় তাহেল আমরা N পয prime generate কের রেখ N ক prime
factorize করেত পাির। ধরা যাক এই prime factorization িট হল pk11 pk22 pk33 . . .. এর মােন
দাঁড়াল আমরা যই সংখ া িল িনবাচন করব তােদর িতিটেত p1 , p2 . . . এর বাইের কােনা prime
থাকা যােব না, আর এেদর power আবার যথা েম k1 , k2 . . . এর বিশ হওয়া যােব না। কীভােব
তুিম এই prime িলেক সংখ া িলর মােঝ distribute করেল সংখ া িলর যাগফল সবিন হয়?
তামরা চাইেল এখােন একটু িবরিত িনেয় িচ া করেত পােরা।
থমত, কােনা একিট prime একািধক সংখ ায় থাকেব না। কারণ একািধক সংখ ার মােঝ
কােনা একিটেত prime িটর সেবা power থাকেব। সিট বােদ বািক িল মুেছ িদেল আমােদর
সংখ া িলর যাগফল আরও কেম যােব তাই না? একটা উদাহরণ দখা যাক। ধর 12 = 22 × 3
তাহেল কােনা একিট সংখ ায় 22 থাকেব। তাহেল আমরা চাইেল একিট 22 রেখ বািক 2 সব মুেছ
ফলেত পাির। আবার 22 আর 3 চাইেল একই সংখ ােতও থাকেত পাের বা িভ সংখ ােতও থাকেত
পাের। যমন 22 , 3 হেত পাের বা 22 3 হেত পাের। কানটা লাভজনক? অব ই 22 + 3 < 22 3.
একটু িক বুঝেত পারছ কীভােব prime িলেক রাখেল যাগফল সবেচেয় কম হেব? াঁ তােদর
2
আলাদা আলাদা কের রাখেত হেব। অথাৎ pk11 , pk2 , . . . এরকম। কন? খয়াল কর এখােন মুল
ব াপার হল ab ছাট নািক a + b? দখা যাক, ab?a + b ⇒ ab − b?a ⇒ b? a−1 a
. এখােন ? মােন
হল আমরা জািন না য এখােন িক বসেব <, > নািক =. আমােদর ডান পাশ ায় 1 এর কাছাকািছ
একটা সংখ া। আর বাম পাশ তা কমপে 2. এর মােন সবসময় ab সংখ া a + b এর থেক বড়
হেব যখােন a, b িতিট prime এর power (আমােদর এ সম ার ে এিট সত , তাই বেল সব
ে ab > a + b না যমন 1 ∗ 1 > 1 + 1 িক সিত না)। অথাৎ আমােদর optimal সংখ া িল
2
হেব pk11 , pk2 , . . ..
সব শেষ একটা িজিনস, আশা কির খয়াল কেরছ য তামােদর সেট একািধক সংখ া থাকেত
হেব। তরাং যিদ দ N এ মা একিট াইম থােক তাহেল িক করবা সটা িনেজরা িচ া কের বর
কর।

UVa 12716 GCD XOR


সমস া: মাট 10,000 িট ট কস। িত কেস তামােক N (≤ 3 × 107 ) দওয়া থাকেব। তা-
মােক বলেত হেব এমন কত িল (A, B) আেছ যন 1 ≤ B ≤ A ≤ N হয় ও gcd(A, B) =
xor(A, B) হয়। যমন N = 7 এর জ উ র 4 এবং (A, B) িল হল (3, 2), (5, 4), (6, 4), (7, 5).
সমাধান: িট সংখ ার gcd এর সােথ xor এর কানই স ক আপাত দৃি ত দখা যাে না।
আমরা যসব প িতেত gcd বর কির তার সােথ xor তা দূেরর কথা bitwise representation

৪০
এরই কান স ক দখা যাে না। এরকম অব ায় যটা করা উিচত সটা হেলা pattern খাঁজা।
একটা ছাট কাড কের N এর মান 100 পয যসব pair পাওয়া যায় তােদর ি ট কের ফেলা।
িক এরপরও কােনা pattern পাওয়া যায় না। যমন িকছু িবদঘুেট pair হেলা (85, 68), (90, 72)
ইত ািদ। যারা আসেলই pattern খাঁজায় পটু তারা হয়েতা ইেতামেধ ই pattern পেয় গেছ। যিদ
খয়াল না কের থােকা তাহেল বিল এেদর gcd বা xor হল তােদর মােঝর পাথেক র সমান। যিদও
এটা িঠক য যেকােনা pair এর পাথক সবসময় তার gcd হয় না বা xor ও হয়না। তেব যিদ তােদর
xor ও gcd সমান হয় তাহেল তােদর পাথক ও এেদর সমান হয়। অ ত N এর মান সেবা 100
এর জ যত িল pair পেয়ছ তােদর সবার ে এটা সত । এখন িট িজিনস। থমত- এটা িক
আসেলই সত ? মাণ িক? ি তীয়ত- এটা কীভােব efficiently কাড করা যােব।
অেনেক থম এর উ র না বর কেরই ি তীয় অংেশ চেল যায়। অথাৎ মাণ না কেরই কাড
কের বা কাড কীভােব করেব তা িচ া কের। া ািমং কে ট এর সময় মাণ খুব একটা দরকাির
না। তুিম আরও িনি ত হেত হয়েতা N এর মান 1000 বা 10,000 পয চক কের দখেত পােরা।
যিদ এেতা পয তামার claim সিত হয় তাহেল ধের নয়া যায় য আসেল সব N এর জ তামার
claim সত হেব। যিদও যত ণ না মাণ করছ তত ণ মেন একটা খচখচ করেত থােক। তাহেল
চল এটা মাণ করা যাক। খয়াল কর, A − B ≤ xor(A, B). কন? যিদ B ত যসব bit 1
আেছ A তও যিদ তারা 1 থােক তাহেল A − B আর xor(A, B) সমান হেব। অ থা xor এর
মান বিশ চেল আসেব। আবার অ িদেক gcd(A, B) িক A আর B জনেকই ভাগ কের। তাই
gcd(A, B) িক A − B ক ভাগ কের। অথাৎ gcd(A, B) ≤ A − B. তাহেল দখেত পা
gcd(A, B) ≤ A − B ≤ xor(A, B). অথাৎ যিদ xor আর gcd সমান হয় তাহেল তারা A − B
এর সমান হেব। িক র সহেজ মাণ হেয় গল। িক মেন রেখা এই মাণ সহজ হেয়েছ কারণ
তুিম আেগ থেকই জােনা য এখােন A − B এর কােনা ভূিমকা আেছ। নাহেল তুিম A − B এর
সােথ gcd বা xor এর স ক খুঁজেত যেত না। মাট কথা তামার pattern খাঁজা বা explore
করার মানিসকতা থাকেত হেব।
এখন তাহেল ি তীয় ে িফের আসা যাক। কীভােব এিট সমাধান করবা। থমত িন য় তুিম
A ও B িটর উপেরই লুপ চালােত পারবা না। আবার ধু A বা ধু B এর উপের লুপ চািলেয় িক
লাভ হেব তাও বুঝা যাে না। এরা জন ছাড়া লুপ চালােনার মত candidate আেছ gcd. দখা
যাক gcd এর উপর লুপ চািলেয় লাভ হয় িকনা। ধরা যাক আমােদর gcd এর লুেপর variable হেলা
g. তাহেল আমরা A ও B স েক িক বলেত পাির? থমত A ও B উভেয়ই g এর multiple
( িণতক)। ি তীয়ত A - B হেব g এর সমান (আমরা িকছু ণ আেগ তাই মাণ কেরিছ)। এর মােন
আমরা যিদ A জািন তাহেল B হেব A − g. আমরা যিদ A এর উপর লুপ চালােত চাই তাহেল কীভােব
চালাব? একিট উপায় (হেলা) 1 হেত N পয i এর লুপ চািলেয় দখা য i িক g ারা িবভাজ িকনা।
িক এেত িতবার O N এর লুপ চালােত হয়। তা না কের তুিম সরাসির g এর multiple এর
উপর লুপ চালােত পােরা। g হেত N পয এবং িতবার লুেপর মান g পিরমাণ কের বািড়েয় [for(A
= g; A <= N; A += g)] অথবা 1 হেত N /g ( পয ) i এর লুপ চালাও তাহেল A হেব i × g. তাহেল
এই nested loop চলেত সময় লাগেব O N /g . যেহতু g এর লুপ 1 হেত N পয চালা
তাই মাট সময় লাগেব N /1 + N /2 + . . . N /N এবং এিট আসেল N log N . তরাং এই িট
nested লুপ চািলেয় আমরা A, B আর g জেন গলাম। আমরা খুব সহেজই চক করেত( পাির য)
xor(A, B) = g িকনা। িক gcd(A, B) = g িকনা তা চক করেত তা আরও একটা O log N
লাগেব। িক একটু িচ া কের দেখা এই চক এর কােনা দরকার নই। কারণ A আর B পাশাপািশ
g এর multiple. মােন A = ig হেল B = (i − 1)g এবং এেদর মােঝ g ছাড়া আর কােনা সাধারণ
ণনীয়ক নই কারণ g ছাড়া এরা হেলা i আর i − 1. আর পাশাপািশ িট সংখ া সবসময় coprime.
কন? মেন কর তারা coprime না। এর মােন এরা p ারা িবভাজ । এর মােন এেদর িবেয়াগফল
i − (i − 1) ও p ারা িবভাজ ( িট সংখ া p ারা িবভাজ হেল তােদর িবেয়াগফলও p ারা িবভাজ
হেব)। মােন 1 সংখ ািট p ারা িবভাজ । তােতা স ব না তাই না?
তাহেল আমরা আমােদর সমাধান পেয় িগেয়িছ। আমরা থেম gcd এর উপর লুপ চালােবা। এর
পর A এর উপর লুপ চালােবা যটা হেব gcd এর multiple. আর B = A − g. সবেশেষ চক
করব xor(A, B) = g িকনা। শষ!
তাহেল এই সম া থেক িক িশখলাম? িশখলাম য মােঝ মােঝ ধয ধের pattern খুঁজেত হয়।

৪১
UVa 1635 Irrelevant Elements
সমস া: মেন কর তামার ব ু n আর m িট সংখ া িনবাচন কেরেছ (1 ≤ n ≤ 105 , 2 ≤ m ≤
109 ). এবাের স n িট সংখ া a0 , a1 , . . . an−1 িনবাচন কেরেছ যখােন িতিট সংখ াই 0 হেত
m − 1 এর মােঝ। এবার স পাশাপািশ িট কের সংখ া যাগ করল। তাহেল স পল a0 + a1 , a1 +
a2 . . . an−2 + an−1 এই n − 1 িট সংখ া। এবার আবার স একই কাজ করল এবং পল n − 2
িট সংখ া। এভােব স করেতই থাকল যত ণ না স একিট সংখ া পল। এবার স এই সংখ ার
modm িনেলা। এখন তামােক বলেত হেব শষ সংখ ার উপের কান কান ai এর কােনা ভাব
নই। যমন n = 3 ও m = 2 হেল শষ সংখ ার উপের a1 এর কােনা ভাব নই। কন? কারণ
n = 3 এর জ শষ সংখ ািট হেলা a0 + 2a1 + a2 mod m আর যেহতু তুিম 2 িদেয় mod
িন সেহতু শষ সংখ ােত a1 এর কােনা ভাব নই।
সমাধান: যারা অিভ তারা এই সম া পড়ার সােথ সােথই বুঝেত পারেব য শষ সংখ া িক হেব।
এখােনই আসেল অিভ আর অনিভ েদর পাথক । অনিভ রা বশ িকছু সময় ব য় করেব এই
common িজিনস বর করেত আর অিভ রা এক দখােতই বুঝেত পাের য শষ মানটা িক হেব।
যিদ তামরা না জােনা য শষ মান িক হেব তাহেল n এর িবিভ মােনর জ শষ মান বর কের
দখেত পােরা। যমন n = 2 এর জ a0 + a1 . n = 3 এর জ a0 + 2a1 + a(2 . n) = 3
এর জ a + 3a + 3a2 + a3 . বুঝেত পারছ িক হে ? n এর জ এই মান হেব n−1 0 a0 +
(n−1) 0 (n−1)1 (n−1)
1 a1 + 2 a2 + . . . n−1 an−1 . কন? কারণটা বুঝার সবেচেয় ভাল উপায় হল pascal
এর triangle এর মত আঁকা এবং বর করা িতিট সংখ ার contribution কত কের। িচ ৪.১ এ
িজিনসটা বুঝার চ া কের দখেত পােরা। আমরা িক ি ভুজই এঁেকিছ তেব উলেটা কের। এখােন
আমােদর থম সংখ ািট হেলা উপেরর বাম কাণা এবং এর পর বািক সংখ া িল পরপর আেছ। এখন
কােনা একিট সংখ ার contribution হেলা সিট যই ােন আেছ সখান থেক িনেচর কাণায় যত
ভােব যাওয়া যায় তা। যমন িচে র a1 হেত িনেচর কাণায় যভােবই(যাও)না কন
(4−1তামােক
) একধাপ
বােম আর ই ধাপ ডােন যেত হেব। 1টা L আর 2টা R ক আমরা 2+1 1 = 1 ভােব সাজােত
পাির (ভুেল যও না আমােদর n এখােন িক 4)। একই(n−1ভােব
) তুিম িতিট ai এর জ যিদ একটু
িহসাব কর তাহেল দখেব ai এর coefficient হেব i .

a0 a1 a2 a3

নকশা ৪.১: Pascal Triangle


( )
মুল সম ায় িফের যাওয়া যাক। আমােদর িতিট i এর জ বর করেত হেব য ni (n ক
( )
মেন কর 1 কিমেয় িনেয়িছ) m ারা িবভাজ িকনা। এখােন m িক prime নাও হেত পাের। nr
বর করার অেনক উপায় আেছ। তামােক ( ) িবিভ উপায় এেক এেক িচ া কের দখেত (হেব।) আিম
plan করেত পাির য থেম দখেবা n0 িক m ারা ভাগ যায় িকনা, এর পর দখেবা n1 এভােব
( n)
n পয সব িল। তরাং আমােদরেক( )
পেরর টামেক আেগর টাম এর সােপে কীভােব বর করা
( ) ( n )
যায় তা িচ া করেত হেব। সহজ, ni ক িলখেত পাির ni = n−i+1 i i−1 . এরপর m ক prime
factorize কের ফেলা(এবং) বর কর এর ভতের কান কান prime আেছ আর তােদর power
কত। এবার এেক এেক ni িল বর কর। এজ তামােক িতবার n − i + 1 ন করেত হেব আর
i ভাগ করেত হেব। একটু িচ া করেল বুঝেব ন আর ভােগর সময় তামার কবল মা m এর prime
divisor েলােতই আ হ আেছ। আর অ prime েলা গা ায় গেলও কােনা সম া নই। এখন
তামােক যা করেত হেব তাহেলা এই prime িলর power মেন রাখা। যিদ দেখা সব িল power

৪২
ই m এ থাকা power এর সমান বা বড় তাহেল িবভাজ নাহেল িবভাজ না।
তাহেল আমােদর সমাধান দাঁড়াল- থেম m ক prime
( ) factorize কের এর prime divisor
আর তার power িল বর করব। এর পর এেক এেক ni বর করব (i এর মান 0 হেত n পয )।
িতবার একিট সংখ া ন আর ভাগ করব। এই ন ভােগর সময় আসেল আমরা দখেবা m এর
ভতের থাকা prime িল কতবার কের আেছ। ভােগর সময় এই count কমেব আর েনর সময়
বাড়েব। ন ভাগ হেয় গেল িতিট prime এর power চক কের দখেবা য m এ থাকা power
অেপ া কউ কম আেছ িকনা। যিদ কম থােক তাহেল িবভাজ না, আর যিদ সবাই বিশ বা সমান হয়
তাহেল িবভাজ । n িক খুব একটা বড় না তাই তােত খুব একটা বিশ prime factor থাকেব না।
তাই এই সমাধােনর complexity ও অেতা বিশ হেব না।

UVa 10820 Send a Table


সমস া: তামােক N (≤ 50, 000) দওয়া থাকেব। বলেত হেব কত িল (x, y) আেছ যােত কের x
ও y এর মােঝ কােনা সাধারণ ণনীয়ক না থােক (1 ≤ x, y ≤ N ). মাট 600 িট test case
থাকেত পাের।
সমাধান: x ও y এর মােঝ কােনা সাধারণ ণনীয়ক থাকা যােব না- এটা আসেল phi function
বা Euler's totient function এর কথা মেন কিরেয় িদে । phi(i) বেল য i এর সমান বা ছাট
কত িল সংখ া আেছ যার সােথ i এর∑ কােনা সাধারণ ণনীয়ক থাকেব না। এর মােন আমােদর
N
বেলেম x ≤ y এর জ উ র হেব i=1 phi(i) কারণ আমরা িতবা i = y ক fix করিছ আর
দখিছ য কত িল x পাওয়া যায়। আর phi(i) কীভােব বর করেত হয় তা া ািমং কে ট বইেয় বা
অ কাথাও দেখ িনেত পােরা। যিদ আমরা phi বর করা িশেখ যাই তাহেল আমরা phi এর একটা
cumulative sum এর অ াের বািনেয় রেখ িদেত পাির। Cumulative sum এর অ াের মােন হল
sum(i) = phi(1) + . . . phi(i)। এটা তা বর করা সহজ sum(i) = sum(i − 1) + phi(i).
যিদও আমরা phi(i) এ i এর থেক বড় সংখ া যারা i এর সােথ coprime তােদর পাই নাই তেব
এে ে আমরা সকল x ≤ y এর জ সমাধান পেয় িগেয়িছ। আর বািক থােক i > j যা আসেল
i ≥ j এর সমান, মােন আমরা িকছু ণ আেগ য মান বর কেরিছ তার ায় সমান। ায় কন বললাম
সটা তামরাই একটু কাগজ কলম ব বহার করেল বুঝেত পারেব।

UVa 1262 Password


সমস া: তামােক িট 6 × 5 (6 িট row, 5 িট column) সাইেজর character এর ি ড দওয়া
থাকেব। 5 length এর একিট শ valid password হেব যিদ শ িটর i তম character িট িট
ি েডরই i তম কলােম থােক। তামােক K দওয়া থাকেব। K তম lexicographically smallest
valid password ি ট করেত হেব।
সমাধান: Counting সম ার ে lexicographically smallest উ র বর করার একিট common
সম া এিট। মুল আইিডয়া হেলা তুিম বাম হেত ডােন এেক এেক উ রিটর character িল পূরণ
করেব। মেন কর তুিম ইেতামেধ ই থম i−1 ঘর পূরণ কের ফেলছ আর এরকম অব ায় K তম শ
বর করেত চা । এখন তুিম i তম ঘর পূরণ করেব। তুিম থেম এখােন A বসােনার চ া কর। যিদ
দেখা মাট X ভােব A বসােনা যায় তাহেল দেখা, X ≥ K িকনা। যিদ হয় এর মােন এই জায়গােত
A ই বসেব। আর যিদ নাহয় তাহেল K হেত X িবেয়াগ কর আর i তম ােন B বিসেয় চ া কর।
একই ভােব েয়াজেন C, D, E এই ভােব এেক এেক Z পয চ া কের যাও।
তাহেল কািহনী দাঁড়াল য আমরা যিদ password এর থম িকছু ঘর জানা থাকা অব ায় পেরর
ঘর িলেক কতভােব পূরণ করা যায় তা যিদ বর করেত পাির তাহেল আমােদর সম া সমাধান হেয়
যােব। আর এই ে র উ র মেন হয় সহজ তাই না? বািক column িলর িতিটেত কয়িট কের
character বসােনা স ব তা ন করেলই পেয় যাবা।

৪৩
একটা ছাট উদাহরণ দয়া যাক। মেন কর তুিম 10ম শ বর করেত চাও। তুিম করেল িক,
থম ােন A বসােল। এর পর তামার ব ুেক িজ াসা করেল, আিম থম ােন A বিসেয়িছ, তুিম
িক বলেব এই অব ায় কত িল valid শ আেছ? ধর তামার ব ু বলল 1 িট। তুিম বুঝেল 10ম
শ িট A িদেয় না। সই সােথ তুিম জেন গেল থম শ িট A িদেয় । তরাং এখন তামার
মাথা ব াথা 9ম শ িনেয় (কারণ থম শ তা বাদ)। এখন মেন কর তুিম থম ােন B বসােল আর
তামার ব ুেক িজ াসা করেল এবার বল কত িল valid শ আেছ। স বলল 50 িট। তাহেল তুিম
বুেঝ িগেয়ছ য থম ােন B বসেব। এবার তামার িচ া ি তীয় ান িনেয়। তুিম এখােন A বসােল।
আবার ব ুেক িজ াসা করেল য BA িদেয় শ কয়িট? তামার ব ু বলল 4 িট। তামার দরকার
9ম শ । তাহেল বুেঝ গেল ি তীয় ােন A না। এবং সই সােথ তুিম এখন থেক 5ম শে র স ান
করেব। ি তীয় ােন মেন কর B বসােল আর তামার ব ু বলল BB িদেয় শে র সংখ া 0িট।
তুিম এবার C িদেয় চ া কর। এভােব যিদ চািলেয় যাও তুিম দখেব পুেরা শ বািনেয় ফেলছ।
আর কয়িট শ বানােনা স ব তা বর করা বশ সহজ। থেম বর কর থম কলােম কত িল
character বসেত পাের। এটা বর করা সহজ, তুিম A হেত Z িতিট character এর জ দখেব
য সই character িট িট ি েডর থম কলােম আেছ িকনা। এরকম কের বর কর কত িল
character িট ি েডর থম কলােম আেছ। একই ভােব তুিম িতিট কলােমর জ এই সংখ া বর
কর। এেদর ন করেলই তুিম পেয় যােব য কত িল শ বানােনা স ব। যেহতু আমরা থম
িদেকর িকছু কলােম character বিসেয় ফলব তরাং তােদর বােদ বািক কলাম িল িনেয় িহসাব
করেলই আমরা সই বািক কলাম িল ব বহার কের কত িল শ বানােনা স ব তা পেয় যাব।

UVa 1636 Headshot


সমস া: একিট িপ ল আেছ। িপ লিটেত n িট িলর slot আেছ। কান slot এ িল আেছ কান slot
এ নই তা বলা আেছ। এখন তামার ব ু আর তুিম russian roulette খলেব। থেম তামার ব ু
িপ লিট িনেলা এবং িলর slot ঘুরাল। এর ফেল এখন িপ লিট random একিট slot এ আেছ।
এই অব ায় স fire করল িক কােনা িল ব েলা না। এবার তামার পালা। তামার হােত িট
option. এক- তুিম আবার slot িল ঘুরােব ফেল িপ লিট random slot এ যােব অথবা ই- তুিম
কােনা রকম না ঘুরােয়ই িল করেব। তামােক বলেত হেব কান উপােয় িল বর না হবার স াবনা
বিশ। যিদ ই উপােয়ই সমান হয় তাহেল বল য সমান। n এর মান 100.

সমাধান: আমরা ই উপােয়র স াব তা বর করব এবং তুলনা কের দখেবা য তারা সমান িকনা বা
সমান না হেল কান ভােব িল না বর হবার স াবনা বিশ। থেম সহজটা বর করা যাক- তুিম যিদ
slot ক ঘুরাও তাহেল িল না ব েনার স াব তা। এটা আসেল বিশই সহজ। তামার মাট n িট
slot আেছ। ধরা যাক তার a িটেত িল আেছ আর n − a িট ত নই। তুিম যিদ slot ক randomly
ঘুরাও তাহেল িল নাই এরকম slot আসার স াবনা হেলা n−a n . কন? কারণ যেহতু n িট slot
আেছ তাই randomly ঘুরােল n ধরেনর slot আসেত পাের। আর এেদর মােঝ n − a িটেত িল
নই। তাই িল নই এরকম slot আসেত পাের n − a ভােব। তরাং n − a ক n িদেয় ভাগ করেল
আমরা িল নই এরকম slot আসার স াবনা বর কের ফলেত পারব।
এখন চল বর করা যাক যিদ না ঘুরাও তাহেল িল বর না হবার স াবনা কত। যেহতু এর
আেগর বাের তামার ব ু যখন triggure িটেপেছ তখন কােনা িল বর হয় নাই তরাং তুিম জােনা
য এখন িপ ল এমন জায়গায় আেছ যার আেগর slot এ িল িছল না। তরাং তুিম খুব সহেজই
নেত পােরা এরকম অব ান কয়িট আেছ। এখন হল এেদর মােঝর কয়িট অব ােনর জ পেরর
অব ােনও িল নই। উদাহরণ দয়া যাক। ধরা যাক slot এর অব া 0011 (0 মােন িল নই, 1
মােন িল আেছ)। এখন তামার ব ুর ে slot থম িটর কােনা একিটেত িছল। যিদ তামার
ব ুর কােছ থম অব ােন থােক তাহেল তামার ে িল হেব না। আর যিদ তামার ব ুর কােছ
ি তীয় অব ােন থােক তাহেল তামার কােছ িল হেব। অথাৎ তামার কােছ িল হবার স াবনা
0.5. যিদ slot এর অব া 010101 হয় তাহেল িক িল হবার স াবনা 1. কারণ তামার ব ুর
ে যেহতু িল হয় নাই তরাং তামার ে িল হেবই কারণ সব 0 এর পের 1 আেছ। এটা
স াব তার খুব basic সম া।

৪৪
UVa 10491 Cows and Cars
সমস া: একিট game show ত a িট দরজার পছেন গািড় আর b িট দরজার পছেন গ আেছ।
তুিম থেম একিট দরজা িনবাচন করেল তামার জ । এর পর উপ াপক তামার দরজা ছাড়া অ
দরজার মােঝ c িট দরজা খুেল দখাল য সসেবর পছেন গ আেছ (c < b)। এবার তুিম তামার
দরজা বােদ অ যেকােনা দরজা িনবাচন করেল। বলেত হেব তামার গািড় পাবার স াবনা কত।
সমাধান: ধরা যাক n = a + b অথাৎ মাট দরজার সংখ া n. এখন মেন কর তুিম একিট দরজা
িনবাচন করেল, তাহেল এেত গািড় থাকার স াবনা na . বািক আেছ n − 1 িট দরজা। এর মােঝ c িট
দরজা আমােদর উপ াপক খুেল দিখেয় িদেয়েছ য তােদর পছেন গ আেছ। তাহেল বািক থােক
মাট n − 1 − c িট দরজা। যেহতু আিম যই দরজা িনবাচন কেরিছ তার পছেন গািড় আেছ (কারণ
আমরা ধের িনেয়িছ য a/n probability ত আমােদর থম দরজার পছেন গািড় আেছ) তাই বািক
n − 1 − c িট দরজার মােঝ গািড় আেছ a − 1 িট। তাহেল আিম যিদ বািক n − 1 − c িট দরজার
একিট িনবাচন কির তােত গািড় থাকার স াবনা n−1−ca−1
. তরাং আমরা থম যই দরজা িনবাচন
কেরিছলাম তােত এবং ি তীয় যই দরজা িনবাচন করলাম তােত গািড় থাকার স াবনা na × n−1−c
a−1
.
আবার এমনও হেত পাের য আমরা যই দরজা থেম িনবাচন কেরিছলাম তােত গ আেছ। এটা
হবার স াবনা nb . এবার বািক n − 1 িট দরজার মােঝ উপ াপক c িট দরজা খুেল গ দিখেয়িছল।
বািক থােক n − 1 − c িট দরজা। এর মােঝ গািড় আেছ a িট। আমরা যিদ বািক n − 1 − c িট
দরজা থেক randomly িনবাচন কির তাহেল গািড় পাবার স াবনা n−1−c a
. অথাৎ থম দরজায়
গ আর ি তীয় দরজায় গািড় পাবার স াবনা n × n−1−c . তাহেল গািড় পাবার মাট স াবনা
b a

দাঁড়ােব na × n−1−c
a−1
+ nb × n−1−c
a
.
যারা probability ত একদম নতুন তােদর মেন আসেত পাের এরকম ন কের যাগ করলাম
কন। অেনক ভােবই এর ব াখ া দওয়া যায়। মেন কর তামার কােছ িতনিট coin আেছ এবং এেদর
head পরার স াবনা p1 , p2 , p3 . থেম তুিম থম coin টস করেব। যিদ head পের তাহেল ি তীয়
coin, আর যিদ থম coin এ tail পের তাহেল তৃতীয় coin টস করেব। বলেত হেব সবেশেষ যই
কেয়নিট টস করেব তােত head পরার স াবনা কত। খয়াল কর, থম coin টস করার পর িক ই
রকম ঘটনা ঘটেত পাের। p1 স াবনায় head পরেত পাের, এবং সই ে তুিম ি তীয় coin টস
করেব এবং তােত head পরার স াবনা p2 . এই ঘটনা িট একে ঘটার স াবনা p1 p2 . একই ভােব
আমরা বলেত পাির থম coin এ tail ও তৃতীয় coin এ হড পরার স াবনা (1 − p1 )p3 . যখন িট
ঘটনা একে ঘটােনা দরকার তখন তােদর স াবনােক ন করেত হয়। এবার আমােদর বর করেত
হেব শেষর coin এ head পরার স াবনা। শেষর coin ি তীয় coin হেত পাের অথবা তৃতীয়
coin হেত পাের। তরাং ি তীয় coin এ head "অথবা" তৃতীয় coin এ head পরার স াবনা হেলা
p1 p2 + (1 − p1 )p3 . এখােন যাগ কেরিছ, কারণ আমরা ইিট ঘটনার কােনা একিট ঘটার স াবনা
বর করেত চেয়িছ। অথাৎ "অথবা" হেল আমােদর স াব তােক যাগ করেত হয়। িক কন "এবং"
হেল ন আর "অথবা" হেল যাগ? এভােব িচ া করেত পােরা- মেন কর তামার সামেন একিট dart
board আেছ। তুিম সই dart board ক সমান িতনভােগ ভাগ করেল। এর পর একভাগেক সবুজ,
এক ভাগ ক নীল আর আেরক ভাগেক লাল রং করেল। যেহতু িতনিট রেঙর জায়গার ফল সমান
তাই তুিম যিদ একিট dart ছুেড় মার আর যিদ সটা board এর একিট random িব েত িগেয়
আঘাত কের সই িব িটর রং লাল হবার স াবনা 1/3 ( ই রেঙর মােঝ পড়েল িক হেব িচ া না
করেলও চলেব)। একই ভােব সবুজ হবার স াবনা 1/3, নীল হবার স াবনা 1/3. এখন যিদ বেল
সবুজ "অথবা" নীল হবার স াবনা কত। িক করেব? যাগ হেব তাই না? কারণ নীল হবার স াবনা
1/3, সবুজ হবার স াবনা 1/3 তাই নীল বা সবুজ হবার স াবনা 1/3 + 1/3 = 2/3. বা অ ভােব
যিদ িচ া কর তাহেল দখেব "নীল বা সবুজ" এর ফলেক যিদ তুিম মাট ফল িদেয় ভাগ
কর তাহেল দখেব 2/3 পেয়ছ। তরাং অথবা হেল যাগ। এখন িচ া কর তামার কােছ এরকম
িট board আেছ আর তুিম িট বােড িট dart মারেল। িটই নীল িব েত পরার স াবনা কত?
1/3 × 1/3 = 1/9 কন? কারণ এই িট dart 9 ভােব পরেত পাের- (লাল, লাল), (লাল, নীল),
(লাল, সবুজ), এরকম আরও 6 রকম। এবং যেহতু সব িল রেঙ পরার স াবনা একই তাই এেদর
যেকােনা একিট combination পাবার স াবনা 1/9. আর এেদর মােঝ একিটর ে ই িটই

৪৫
নীল। অথাৎ 1/9. তরাং এবং হেল ন। িঠক counting এর মতই। Counting এর ে ও িক
"অথবা" এর ে তুিম যাগ কর আর "এবং" হেল ন।

UVa 11181 Probability Given


সমস া: একিট দাকােন N িট িজিনস আেছ (N ≤ 20). এেদর িতিটর কনার স াব তা দওয়া
আেছ p1 , p2 . . . pN . তামােক বলা আেছ য মাট r িট িজিনস কনা হেয়েছ। তাহেল িতিট িজিনেসর
জ বলেত হেব য সিট কনার স াব তা কত।
সমাধান: মেন কের বস না য i তমিট কনার স াব তা তা দয়াই আেছ pi . এখােন িক অিতির
আেরকিট কথা বলা আেছ। "তুিম যিদ জােনা য r িট িজিনস কনা হেয়েছ" তাহেল কান িজিনস কনার
স াব তা কত তা বল। তামােক যখন p1 , p2 . . . pN ইত ািদ বলা িছল সটা িছল unconditional.
কােনা শত নই, কােনা ধরা বাধা নই িকছু নই। এই অব ায় i তম িজিনস কনার স াবনা হেলা
pi . িক তামােক যা িজ াসা কেরেছ তােত িক একটা বাড়িত condition যাগ কের িদেয়েছ- যিদ
তুিম জােনা য r িট িজিনস কনা হেয়েছ তাহেল বল ...। ব াপারটা একটা ছাট উদাহরেণ বুঝােনা
যাক। মেন কর Real Madrid আর Barcelona এর মােঝ ফাইনাল খলা হে । য িজতেব স
একটা cup পােব। এখন খলার আেগ তামার ফসবুেকর িবেশষ (!) ব ুেদর status পেড় তুিম
বুঝেত পারছ য যেহতু আজ Messi খলেছ না তাই Barcelona জতার স াবনা 30% আর Real
Madrid এর 70%. িক মেন কর পরিদন তুিম ফসবুক খুেল দখেল য Barcelona কাপ িজেতেছ।
এখন যিদ তামােক কউ িজ াসা কের "Barcelona কাপ িজেতেছ, এখন বল barcelona খলায়
িজেতেছ তার স াবনা কত"। এর উ র সহজ তাই না? "100%". কারণ তামােক বলা হেয়েছ
"Barcelona িজেতেছ" এই সােপে বল য Barcelona জতার স াবনা কত। এই সম ােতও
একই ঘটনা ঘটেছ। তামােক বলা হেয়েছ য "r িট িজিনস কনা হেয়েছ" তাহেল বল কান িজিনস
কনার স াবনা কত।
ইটা িজিনস নয়া যাক। ধরা যাক p1 = 0.3 আর p2 = 0.8. তাহেল-

ˆ 1 ও 2 িটই কনা হেয়েছ তার স াবনা 0.3 × 0.8 = 0.24

ˆ 1 কনা হেয়েছ িক 2 কনা হয় নাই তার স াবনা 0.3 × 0.2 = 0.06

ˆ 1 কনা হয় নাই িক 2 কনা হেয়েছ তার স াবনা 0.7 × 0.8 = 0.56

ˆ িটই কনা হয় নাই তার স াবনা 0.7 × 0.2 = 0.14

এখন মেন কর তামােক বলা হেলা য r = 1 িট িজিনস কনা হেয়েছ। এর মােন মােঝর ইিট
ঘটনার কােনা একিট ঘেটেছ। আমােদর মাট ঘটনার space চারিট থেক কেম িট ত নেম গেছ।
আেগ চারিটর যাগফল িছল 1 এখন মােঝর িটর যাগফল 0.06 + 0.56 = 0.62 এিট হল আমােদর
ঘটনার space. এখন এই space এ ি তীয়িট (অথাৎ 1 কনা হেয়েছ িক 2 কনা হয় নাই) ঘটার
স াবনা 0.06/0.62 আর তৃতীয়িট ঘটার স াবনা (অথাৎ 1 কনা হয় নাই িক 2 কনা হেয়েছ)
0.56/0.62. তাহেল 1 কনার স াবনা 6/62 আর 2 কনার স াবনা 56/62. বুঝেত পারছ তা
কীভােব িহসাব করলাম? থেম বর করলাম আমােদর দওয়া condition ঘটার স াবনা কত।
সটাই হেলা আমােদর এখনকার space. এবার এই space এর িতিট ঘটনা ঘটার স াবনা বর
কেরিছ। চাইেল িজিনসটােক িকছুটা weighted িহসাব িনকাশ মেন করেত পােরা। আমােদর িট
ঘটনা ঘটার স াবনা সমান না, এরা হেলা 0.56 আর 0.06। তরাং তােদর িতিট ঘটার স াবনা
হেলা 0.56+0.06
0.56
আর 0.56+0.06
0.06
.
এখন তা বলেব- r এর মান 1 বেলই এেতা সহেজ হেয়েছ। n = 4 আর r = 2 এর জ কের
দখাও না, মাথার ঘাম পােয় পড়েব! াঁ হয়েতা হােত হােত পুেরাটা করেত অেনক ক হেব িক
তুিম যিদ মূল আইিডয়াটা বুেঝ থােকা তাহেল আর পুেরাটা হােত হােত করার দরকার নই। মেন কর
তুিম r িট িজিনস যত ভােব কনা যায় তার িতিটেক িল করেল এবং তােদর স াব তা বর করেল।
তাহেল আমােদর space হেব এই সব স াব তা িলর যাগফল (S)। আর যিদ িজ াসা করা হয়

৪৬
1 কনার স াবনা কত? তাহেল এই িলে র দেখা কান কানটায় 1 আেছ। তােদর স াব তার
যাগফল বর কের (তােক) S িদেয় ভাগ করেলই হেয় যােব। তাই না? যেহতু N এর মান মা 20
হেত পাের সেহতু Nr আসেল খুব একটা বড় না। তামরা চাইেল backtrack কের N িট িজিনস
থেক r িজিনস িনবাচন করেত পােরা। অথবা চাইেল bitmask এর লুপ চািলেয়ও করেত পােরা। এই
ব াপাের আমরা থম অধ ােয়ই আেলাচনা কেরিছ। তরাং এখােন এই িনেয় বলার দরকার নই।
তরাং তামরা তামােদর পছে র মথড ব বহার কের এই সম া সমাধান কের ফল।

UVa 580 Critical Mass


সমস া: তামােক N দওয়া থাকেব (N ≤ 30). বলেত হেব কত িল N দেঘ র শ আেছ যা U
আর L িদেয় তির এবং শ িটর কাথাও না কাথাও পাশাপািশ 3 িট U আেছ।
সমাধান: কাথাও পাশাপািশ িতনিট U আেছ বর করার চেয় পাশাপািশ কাথাও িতনিট U নই
বর করা সহজ। কন? কারণ পাশাপািশ িতনিট U " কােনা না কােনা জায়গায়" থাকেত হেব এটা
িহসােবর থেক " কাথাও" থাকেব না িহসাব করা সহজ। তুিম মেন কর এেক এেক character িল
বসা । পাশাপািশ িতনিট U আেছ িকনা এটা জানার জ তামার আেগর িট character তা
জানেত হেবই সই সােথ জানেত হেব ইতমেধ এর আেগ কাথাও পাশাপািশ িতনিট U িছল িকনা।
িক যিদ আমােদর সম া হয় পাশাপািশ িতনিট U বসেব না, তাহেল ধু আেগর িট character
জানেলই চলেব, কারণ আমরা কখনই পাশাপািশ িতনিট U বসাব না। তরাং আমরা যিদ বর করেত
পাির য N দেঘ র কত িল শে পাশাপািশ িতনিট U নই তােক আমরা যিদ 2N হেত বাদ দই
তাহেলই আমােদর উ র পেয় যাব।
এখন হেল কীভােব বর করেব কত িল শ আেছ যােত পাশাপািশ িতনিট U নই। এিট
একিট counting সম া এবং counting সম ায় DP হর হােমশায় ব বহার হেয় থােক। মেন কর
dp[n] হল n দেঘ র valid শে র সংখ া। এখন একিট n দেঘ র valid শ িতন উপােয় তির হেত
পাের-

ˆ েত L. সে ে আমরা বািক n − 1 দঘ dp[n − 1] ভােব বানােত পাির।

ˆ েত UL. সে ে আমরা বািক n − 2 দঘ dp[n − 2] ভােব বানােত পাির।

ˆ েত UUL. সে ে আমরা বািক n − 3 দঘ dp[n − 3] ভােব বানােত পাির।

আমরা িক েত UUU বসােত পারব না। তরাং আমােদর recurrence হেব dp[n] =
dp[n − 1] + dp[n − 2] + dp[n − 3]. Base case আশা কির িনেজরা বর কের িনেত পারেব।
Base case আসেল তমন িকছু না। কান কান n এর জ আমরা আমােদর ফমুলা ব বহার করেত
পারব না তাই base case. খয়াল কর য n এর মান যিদ 1, 2 বা 3 হয় তাহেল আমরা আমােদর
ফমুলায় negative সংখ া বা 0 এর জ dp জানেত চাি । িক আমরা তােদর মান জািন না (হয়েতা
0 এর জ চাইেল বর করা যায়)। তরাং 1, 2 এবং 3 ক base case মেন করেত পার, এবং
তােদর মান কাগেজ কলেম বর কের ফল। এরপর এই ফমুলা ব বহার কের বািক n এর জ dp[n]
বর কের ফল।

UVa 12034 Race


সমস া: একিট িতেযািগতায় n িট ঘাড়া অংশ িনে (N ≤ 1000). বলেত হেব কতভােব ঘাড়-
দৗেড়র ফলাফল হেব। এই সম ার ে একািধক ঘাড়া একই ান দখল করেত পাের। একিট
উদাহরণ িদেয় ব াপারটা বুঝা যাক। মেন কর িট ঘাড়া অংশ িনে । মাট িতন রকেমর ফলাফল হেত
পাের। এক- িট ঘাড়াই থম, ই- থম ঘাড়া থম আর ি তীয় ঘাড়া ি তীয়, িতন- থম ঘাড়া
ি তীয় আর ি তীয় ঘাড়া থম। যেহতু উ র অেনক বড় হেত পাের তামােক উ র mod10056
এ িদেত হেব।

৪৭
সমাধান: বুঝাই যাে counting dp. ধরা যাক dp[n] হেলা n িট ঘাড়ার িতেযািগতায় কত ভােব
ফলাফল হেত পাের। ( )এখন একিট i এর লুপ চালাও য এই িতেযািগতায় কত জন থম হেয়েছ। এই
i িট ঘাড়া আবার ni ভােব িনবাচন করা যায়। এখন বািক n − i িট ঘাড়ার িতেযািগতার ফলাফল
কত রকম হেত পাের? খুব সহজ dp[n − i] রকম। তাহেল আমরা যা করব তাহেলা n এর একিট লুপ
চালােবা 1 হেত 1000 পয dp[n] বর করার ( জ
) । এর ভতের i এর একিট লুপ চালােবা কত জন
থম হেয়েছ তার জ । এর পর এেক এেক ni dp[n − i] যাগ করেলই আমরা dp[n] পেয় যাব।
( ) ()
এখােন আমােদর ni জানার দরকার। আসেল েতই সব ji বর কের রাখেত পােরা। এজ
(n) (n−1) (n−1) ( )
i = i−1 + i এই recurrance ব বহার করেত পােরা। তাহেল O n2 সমেয় সব িকছু
generate হেয় যােব।

UVa 1638 Pole Arrangement


সমস া: n িট building আেছ (n ≤ 20) যােদর উ তা যথা েম 1, 2, . . . n. এই building িল
যেকােনা order এ থাকেত পাের। যমন- 4, 2, 3, 1 একিট উদাহরন (িচ ৪.২)। এখন তুিম
যিদ বাম িদক থেক দেখা তাহেল িক ধু 4 উ তার building দখেত পারেব। যিদ ডান িদক
থেক দেখা তাহেল িতনিট building দখেত পারেব যােদর উ তা 1, 3, 4. তুিম িক 2 উ তার
building দখেত পারেব না কারণ সিট 3 উ তার building িদেয় ঢেক গেছ। এখন তামােক
বলা আেছ বাম িদক হেত কয়িট building দখা যায় (L) আর ডান িদক হেত কয়িট দখা যায় (R).
বলেত হেব n িট building ক কত ভােব সাজান যায়।

নকশা ৪.২: UVa 1638

সমাধান: আরও একিট coutning dp সম া। হয়েতা তুিম িচ া করেব য কান order এ building
িল বসােব। তুিম থেম থম ােন building বসােব, এর পর ি তীয় ােন। িক তা করেল কান
কান building বিসেয়ছ এবং কান order এ বিসেয়ছ তা মেন রাখেত হয়। যেহতু n ≤ 20 তাই
কান order এ কান কান building বিসেয়ছ তা মেন রাখা খুব বিশ হেয় যায়।
আেরকিট আইিডয়া হেত পাের য- building িলর height এর order এ বসান। হয়েতা ভাবেত
পােরা 1 হেত i building িল বসােনার পর আমরা যিদ বাম থেক কয়িট building দখা যায় আর
ডান থেক কয়িট দখা যায় এই ইিট সংখ া state এ রািখ তাহেলই হেব। িক আমার মেন হয়
তােতও হেব না। কারণ যসব building দখা যায় না তােদর অব ানও একিট পূণ ব াপার।
মেন কর 20, 10, 30 আর 20, 30. এখন মেন কর 20 আর 30 এর মােঝ 40 বসােব। থম ে
সই বসােনার জায়গা িক িট, িক ি তীয় ে একিট। তরাং দখা যায় না এরকম building
এরও িক ভুিমকা আেছ। তাহেল িক করা যায়?
একটু যিদ িচ া কর তাহেল বুঝেব য বাম বা ডান িদক হেত সবেচেয় দূের বা সবেচেয় বড় যই
building দখা যােব সটা হেলা n. তাহেল আমরা আমােদর সম ােক একটু সাজা করেত পাির
আর তাহেলা বাম হেত n পয L িট আর ডান হেত n পয R িট building দখা যায় কত ভােব।
আেরকটা িজিনস খয়াল কর n এর বাম িদেক কয়িট building আেছ সিটই আসল ব পার কান কান

৪৮
height এর আেছ তা িক ব াপার না। মেন কর n এর বােম x িট building আেছ। আমরা চাইেল
সসব building এর height ক 1 হেত x এ map করেত পাির। অথাৎ সবেচেয় ছাট building 1,
এর পেরর বড়িট 2 এরকম কের সবেচেয় বড়িট x. তাহেল আমরা আসেল আমােদর সম ােক ইিট
সহজ সম ায় ভাগ কের ফলিছ। মেন হয় এটু কথা এখেনা অেনেকর কােছ অপির ার লাগেছ।
পির ার কের বলা যাক।
আমরা একিট লুপ চািলেয় িঠক করব n এর বােম মাট কয়িট building আেছ। ধরা যাক i
িট। আমরা িকছু ণ আেগ বেলিছ এই i িট building
( এর) height কােনা ব াপার না, কারণ এেদর
পরই আেছ n উ তার building. তাই আমরা n−1 i ভােব এই i িট building িনবাচন করেত
পাির। আমরা চাইেল এই i িট building ক 1 হেত i height এ map করেত পাির। আর বািক
n − 1 − i িট building ক ডােন রাখেত পাির আর তােদর একই ভােব mapping করেত পাির (1
হেত n − 1 − i পয )। তাহেল আমােদর সম া দাঁড়ায় i িট building ক কতভােব সাজান যায়
যন বাম হেত দখেল L − 1 িট building দখা যায় (L তমিট হেব n height এর)। একই ভােব
ডান িদেক n − 1 − i িট building ক কত ভােব সাজান যায় যন ডান হেত দখেল R − 1 িট
building দখা যায়। আমরা এই িট count ক ন কের i এর জ উ র পােবা। এভােব i এর
লুেপর িত ে র জ উ র যাগ করেল আমরা আমােদর আসল উ র পেয় যাব।
তাহেল আমােদর সম া reduce হেয় দাঁড়াল 1 হেত n পয n িট building ক (তােদর
height 1 হেত n) কত ভােব সাজােল বাম হেত দখেল X িট building দখা যােব। এটার সমাধান
িক ই িদক হেত দখার মত কেরই হেব। থেম n তম building ক বসাও। আর আেরকিট লুপ
চালাও এর বােম কয়িট আর ডােন কয়িট building (ncr করেত হেব)। ধরা যাক বােম i িট building.
তাহেল তামােক বর করেত হেব i িট building ব বহার কের X - 1 িট building দখা যােব এভােব
কত ভােব building িল সাজান যােব। এর মােন আমােদর dp এর state হেব (n, X). এর ভতের
চলেব i এর একিট লুপ। এবং সিট (i, X − 1) ক call করেব। আর বািক n − i িট building ক
ডান িদেক তা ই া খুিশ মত বসান যােব কারণ আমরা তা তােদর বাম িদক হেত দখেতই পারব
না।

UVa 1639 Candy


সমস া: িট বাে র িতিটেত n িট কের চকেলট আেছ (n ≤ 200, 000). তামার ব ু p স াব তায়
থম বা িনবাচন কের, তরাং 1 − p স াব তায় ি তীয় বা িনবাচন কের। স য বা িনবাচন
কের সখান থেক একিট চকেলট খায়। একিদন হেলা িক স তার িনবািচত বা খুেল দেখ সখােন
কােনা চকেলট নই। বলেত হেব ওপর বাে চকেলেটর expected পিরমাণ কত।
সমাধান: আমরা একিট লুপ চালােবা অ বাে কয়িট চকেলট বািক থাকেব তার উপর। ধরা যাক i
পিরমাণ বািক থােক। এর মােন এমন একিট পযায় আসেব যখন একিট বা (a) থেক n িট চকেলট
খাওয়া হেয় যােব, ওপর বা (b) হেত n − i িট খাওয়া হেয় যােব এবং এই সময় এেস আবার n িট
চকেলট খাওয়া a বা হেত খাইেত চাইেব। তার মােন এই পযােয় এেস a বা থেক ( n িট)খাওয়া হেয়
যােব এবং b বা থেক n − i িট খাওয়া হেয় যােব। এই খাওয়ার order মাট n+n−i n ভােব হেত
পাের। এখন ধু খাওয়ার order কত রকম হেব সটা বর করেলই তা হেব না, তােদর probability
ও বর করেত হেব। a বা হেত n িট খাওয়ার probability হেলা pn , b বা হেত n − i িট খাওয়ার
probability হেলা (1−p)n−i . সই সােথ( সবেশেষও
) n+1আবার a বা(n−i)
হেত খেট চাইেব, অথাৎ আরও
একিট p. তাহেল মাট probability হেব 2n−in p ×(1−p) . একই ভােব b বা হেত n
িট খাওয়ার ঘটনা আলাদা ভােব
(n) িহসাব করেত হেব। এখন কথা হেলা এই সংখ া কীভােব বর করবা?
n এর িবশাল মােনর জ i এর মান িক অেনক বড় হেব, আবার p n
এর মানও িক অেনক ছাট
হেব। তরাং সরাসির িহসাব করেল মেন হয় উ র সিঠক আসেব না। এই ে logarithm খাটােত
হয়। আমরা আমােদর সূ সরাসির না ব বহার কের যা করব তা হল তার logarithm বর করব-
log (2n − i)! − log n! − log (n − i)! + (n + 1) log p + (n − i) log (1 − p). আর এই
িহসােবর পর তার exponent নব (e এর power). এভােব আমরা বর করিছ কত probability
ত b বাে (ি তীয় বাে ) i থাকেব। এভােব সব i এর জ probability বর কের তােক i িদেয় ন

৪৯
কের এেদর সবাইেক যাগ করেল আমরা expectation পেয় যাব। একটা িজিনস, log n! এর মান
কীভােব বর করবা? সহজ, log n! = log 1 × 2 × . . . × n = log 1 + log 2 + . . . + log n.
তরাং আমরা েতই সকল দরকাির n এর জ log n! এর মান বর কের রাখেত পাির।

UVa 10288 Coupons


সমস া: মাট n ধরেনর পন আেছ (n ≤ 33) আর অেনক িল বা আেছ। তুিম যিদ একটা বা
খুল তাহেল তার মােঝ একিট random পন পােব। পনিট n ধরেনর মােঝ যেকােনা ধরেনর হেত
পাের। তামােক বলেত হেব expected কত িল বা খুলেল তুিম সব ধরেনর পন পােব।
সমাধান: আমার অ তম পছে∑ র expected value এর সম া। কারণ সাধারণত আমরা expectation
সম ােক approach কির iP (i) এর মত কের। িক এই সম ািট সমাধান করেত হয় একটু
অ ভােব। মেন কর আমােদর কােছ i িট িভ ধরেনর পন আেছ। তাহেল expected কয়িট বা
খুলেল আমরা নতুন ধরেনর পন পােবা? যেহতু আমােদর কােছ ইেতামেধ ই i ধরেনর পন আেছ
এর মােন আমােদর কােছ n − i ধরেনর পন নই। একিট বা খুলেল এই n − i ধরেনর কােনা
একিট হবার স াবনা p = n−in . তাহেল আমােদর expected 1/p িট বা খুলেত হেব নতুন পন
পাবার জ । এভােব আমরা i + 1 িট িভ ধরেনর পন পাবার জ expected বা খুলার পিরমাণ
পেয় যাব। আর এেক এেক আমরা i + 2, i + 3 . . . n পয উ র বর কের ফলেত পারব।
অেনেক হয়েতা ভাবেত পােরা নতুন পন পাবার probability p হেল expected বা খুলার
পিরমাণ 1/p কন? এটা খুব একটা কিঠন না। নতুন পন পেত j িট বা খুলার দরকার মােন থম
j−1 বাের নতুন পন উেঠ নাই, যার স াবনা (1−p)(j−1) আর j তম বাের নতুন পন পাওয়া গেছ,
যার স াবনা p. তরাং j িট বা খুলার পর নতুন পন পাবার স াবনা (এবং j িট বা খুলার আেগ
িক
∑ নতুন পন পাবা ∑ না) P (j) = p ×(j−1)
(1 − p)(j−1) . তরাং আমােদর expected value হেব
j × P (j) = j × p × (1 − p) . তামরা চাইেল এই series
∑ jsum বর করেত পােরা
অথবা একটু calculus খাটােত পােরা। আমরা জািন 1/(1 − p) = p . আমােদর সমীকরণটা
ায় একই ধরেনর। থমত আমােদর মূল সমীকরেণ (1 − p) এর power নওয়া হি ল। আমরা

আমােদর series sum এ p এর বদেল 1 − p বসাই। 1/p = (1∑− p)j . এই সমীকরণেক তুিম
যিদ p এর সােপে differentiate কর ∑তাহেল পাবা −1/p(i−1)
2
= −j × (1 − p)(j−1) . আর
একটু এিদক অিদক করেলই 1/p = j × p × (1 − p) পেয় যাবা। তেব এটা মেন হয়
একটু কিঠন হেয় গল। আেরকটা উপােয় দখােনা যাক। মেন কর আমােদর expected value হেব
E. এখন p স াব তায় থম বােরই আমরা নতুন পন পেত পাির 1 × p। অথবা 1 − p স াব তায়
থম বার নতুন পন উেঠ নায়। তাহেল এর পের নতুন পন পেত তামােক E িট বা খুলেত
হেব (এখন য একিট খুলেল সিট বােদ) অথাৎ (1 − p)(1 + E)। তরাং আমােদর সূ দাঁড়াল
E = p + (1 − p)(1 + E) আর এটােক সমাধান করেল দাঁড়ােব E = 1/p.

UVa 11346 Probability


সমস া: (−a, −b) হেত (a, b) পয rectangle িট একিট special জায়গা। তামােক এই special
জায়গার মােঝ একিট (x, y) িব randomly িনবাচন করেত হেব (x আর y ক য পূণ সংখ া হেত
হেব এমন কথা নই) যন (0, 0) ও (x, y) িব িদেয় তির rectangle িটর ফল S এর হেত
বড় হয়। S, a, b এর মান তামােক ইনপুট িহসােব দওয়া থাকেব। বলেত হেব সরকম একিট িব
িনবাচেনর স াবনা কত।
সমাধান: যারা ইেতামেধ ই কেলেজ calculus পেড়ছ তারা জােনা য এসব সম ার ে আম-
রা একিট quadrant এ িহসাব িনকাশ কির কারণ অ সব quadrant এ সব িহসাব িনকাশ
symmetric হয়। এখােন যমন আমােদর special জায়গা এবং (x, y) এর সােথ মূল িব র
rectangle সবই symmetric. তরাং আমরা ধু first quadrant এ িহসাব িনকাশ করব।

৫০
তাহেল আমরা ধু (0, 0) হেত (a, b) এইটু special জায়গা িনেয় মাথা ব াথা করব। কথা
হল এর মােঝ কান টু জায়গা থেক (x, y) িনবাচন করেল মূলিব র সােথ ফল S এর বড়
হেব। একটু িচ া কের দেখা, xy = S রখার িব িলর সােথ মূল িব িঠক িঠক S ফল
তির কের। এর উপেরর (up) িব িলর সােথ S এর থেক বিশ এবং এর িনেচর িব িলর সােথ
S এর থেক কম ফেলর আয়তে তির কের। তাহেল আমােদর বর করেত হেব xy = S
এই রখার িনেচ special জায়গার ফল। এই পিরমান যিদ আমরা ab হেত িবেয়াগ কির তাহেল
আমরা পাব সই অংেশর ফল যা হেত (x, y) িনবাচন করেল আয়তে ে র ফল S হেত
বড় হয়। এই ফলেক যিদ আমরা ab িদেয় ভাগ কির তাহেল আমরা আমােদর উ র পেয় যাব।
এখন কথা হল এই xy = S রখার িনেচর অংেশর ফল কীভােব বর করব।

3 (4, 3)

2 xy
=
4

0
0 1 2 3 4 5

নকশা ৪.৩: (a, b) = (4, 3) এবং S = 4

আমরা একটা উদাহরণ িনেয় কাজ কির তাহেল মেন হয় িবধা হেব। ধরা যাক (a, b) = (4, 3)
আর S = 4. তাহেল first quadrant এর যই িচ হয় তা িচ ৪.৩ এ দওয়া হেলা। xy = S = 4
এিট একিট বাঁকা রখা দখেতই পা । আর সই সােথ আমরা (0, 0) হেত (4, 3) এই আয়তে ও
এঁেকিছ। আমােদরেক িচে র shaded জায়গার ফল বর করেত হেব। কারণ এই জায়গােত
যিদ আমরা কােনা (x, y) িনবাচন কির তাহেল মূল িব র সােপে তার আয়তে ে র ফল S
অেপ া কম হেব। দখেলই বুঝেত পারছ shaded জায়গােক ই অংেশ ভাগ করেত পােরা। একটা
হেলা ছাট আয়তে আেরকটা হেলা xy = 4 এর িনেচর অংশ। ছাট আয়তে ে র উপেরর ডান
কাণা আেছ (S/b, b) = (4/3, 3) ত। যার ফল S/b × b = 4/3 × 3 = 4 = S. বািক
থােক S/b = 4/3 হেত a = 4 পয xy = 4 এর িনেচর অংেশর ফল। এিট একিট সহজ
∫a S a

integration x dx = S ln x S ) . তামরা চাইেল
= S(ln (a) − ln (S/b)) = S ln( ab
S/b S/b

a বা b এর মান বিসেয় এই মান বর করেত পােরা। তাহেল আমরা অ অংেশর ফল বর


করলাম যখােনর িব িলর সােথ মূলিব র আয়তে ে র ফল S এর কম। আমরা যিদ ab
হেত এই ফল বাদ দই তাহেল (0, 0) হেত (a, b) পয সই অংেশর ফল পােবা যখােনর
িব িলর সােথ মূলিব র আয়তে ে র ফল S এর বিশ। এবং সবেশেষ এেক যিদ আমরা ab
িদেয় ভাগ কির তাহেল সই িব িনবাচেনর probability পেয় যাব। আর একটু যিদ সাবধান থাক
তাহেল একটা special case াে ডল য করেত হেব তা ইতমেধ ই বুেঝ গছ। Case টা হেলা
যিদ (0, b) হেত (a, b) এই লাইন xy = S ক ছদ না কের, অথাৎ S/b > b.

১ ln (a) − ln (b) = ln (a/b)

৫১
UVa 10900 So you want to be a 2n -aire?
সমস া: একিট game show ত েত তামােক 1 টাকা দওয়া হেব। এরপর এেক এেক তুিম n
রাউ ড খলেত পারেব (n ≤ 30)। িতিট রাউে ডর েতই তামােক একিট করা হেব।
পারার স াবনা t হেত 1 এর মােঝ কােনা একিট random সংখ া (0 ≤ t ≤ 1). তুিম চাইেল
িটর উ র না িদেয়ই quit করেত পােরা। quit করেল তামার কােছ যত টাকা আেছ তা তামার
হেয় যােব। আর যিদ quit না কর তামােক ে র উ র িদেত হেব। তুিম যিদ ে র উ র িদেত
পােরা তাহেল তামার টাকার পিরমাণ ি ণ হেয় যােব এবং তুিম পেরর রাউে ড যােব। আর যিদ ভুল
হয় তাহেল তামার টাকার পিরমাণ 0 হেয় যােব এবং খলা শষ হেয় যােব। তুিম তামার expected
টাকার পিরমাণ maximize করেত চাও। বলেত হেব এই expected টাকার পিরমাণ কত।
সমাধান: আমরা dp এর মত করব। আমরা বর করব যিদ আমরা i তম রাউে ড থািক তাহেল
expected টাকার পিরমাণ কত। আমােদর base case িক হেব? মেন কর আমরা n তম রাউে ড
আিছ, তখন যিদ আমরা িঠক ে র উ র িদতাম তাহেল n + 1 রাউে ড উঠতাম। এখােন আর কােনা
নই। এখােন আমােদর খলা শষ করেতই হেব আর তাহেল আমরা 2n টাকা পােবা। তরাং
আমােদর base case হেব f (n + 1) = 2n . এখন recurrence এর পালা। হল i তম রাউে ড
expected টাকার পিরমাণ কত। আমরা জািন আমােদর ে র উ র পারার স াবনা t হেত 1 এর
মােঝ যেকােনা একিট সংখ া। ধরা যাক p. তামার হােত ইিট অপশন। এক- আমরা quit করব
তাহেল আমরা 2i−1 টাকা পােবা। ই- ে র উ র িদব। যিদ ে র উ র দাও তাহেল কত টাকা
পাবা? p স াব তায় f (i+1) টাকা পাবা আর (1-p) স াব তায় 0 টাকা। তাহেল ে র উ র িদেল
expected টাকার পিরমাণ হেব p × f (i + 1). এখন তুিম চাও তামার টাকার পিরমাণ maximize
করেত। তাহেল িক করেব? ে র উ র দেব নািক দেব না? সহজ উ র- যা করেল expected
টাকার পিরমাণ বিশ হেব সটা করবা। অথাৎ max(2i−1 , p × f (i + 1)). এিট হেলা p এর জ
expected টাকার পিরমাণ। িক p এর মান তা t হেত 1 পয হেত পাের। তাহেল? তাহেল যা
করেত হেব তাহেলা তুিম t হেত 1 পয সব মােনর জ expected টাকার পিরমাণ যাগ কর এবং
সই সােথ t হেত 1 পয যত িল সংখ া আেছ তা িদেয় ভাগ∫ কর। িক t হেত 1 পয তা অসংখ
1
সংখ া আেছ। িক করবা? উপায় হেলা integration- 1−t 1
t
max(2i−1 , pf (i + 1))dp. কন
(1 − t) িদেয় ভাগ হেলা? কারণ তুিম t হেত 1 পয integrate কেরছ। এটা িকছুটা গড় নবার
মত।
এখন কথা হেলা এই integration করবা কীভােব? f (i + 1) একিট constant কারণ এিট p
এর উপর িনভর কের না। ধের নই C = f (i+1). তাহেল আমরা আমােদর integration ক একটু
∫1
সহজ কের িলখেত পাির 1−t 1
t
max(2i−1 , pC)dp. যিদ pC < 2i−1 ⇒ p < 2i−1 /C হয়
তাহেল আমােদর max এর মান হেব 2i−1 আর নাহেল হেব pC. তাহেল আমরা আমােদর integral
ক ই অংেশ ভাগ করেত পাির t হেত 2i−1 /C আর 2i−1 /C হেত 1. ধু একটা িজিনস খয়াল
রেখা য 2i−1 /C যিদ t এর থেক ছাট হয় বা 1 এর থেক বড় হয় তাহেল যন তুিম উলটা পালটা
িকছু না কর।
তাহেল এই সম ার মাধ েম তামরা দখেল কীভােব expectation এর সম ােত আমরা
calculus ব বহার করেত পাির। আর Integration এর ফাংশন যিদ max ওয়ালা হয় তাহেল আমরা
কীভােব তােক ভে িলেখ সমাধান করেত পাির।

UVa 11971 Polygon


সমস া: তামােক একিট N দেঘ র একিট সরলেরখা দওয়া আেছ। তুিম এেক randomly K িট
জায়গায় কাটেল (1 ≤ N ≤ 106 , 1 ≤ K ≤ 50)। এর ফেল য K + 1 িট সগেম ট তির হেলা
তা িদেয় একিট polygon গঠন করেত পারার probability কত?

সমাধান: িনঃসে েহ এিট একিট কিঠন সম া। সিত কথা বলেত এিট পড়ার সােথ সােথ আিম
কােনা idea পাই নাই। যিদ pattern খাঁজার মাধ েম সমাধান করেত চাও তাহেল বশ সহেজই

৫২
সমাধান হেয় যােব। তেব যিদ িনেজ থেক গািণিতক ভােব সমাধান করেত চাও তাহেল েসসটা খুব
একটা সহজ হেব না। নেট খুঁেজ chinese site হেত আিম অ ত 4 িট িভ ধরেনর সমাধান দেখিছ।
এ থেক িট এখােন দখােনা যাক।
যভােবই সমাধান কর না কন মূল আইিডয়া হেলা K + 1 িট সগেমে টর মােঝ সবেচেয় বড়
সগেমে টর দঘ 1/2 এর থেক কম হেব। অথাৎ আমােদর বর করেত হেব িতিট সগেমে টর দঘ
1/2 এর থেক ছাট হবার probability কত? কন 1/2 এর থেক ছাট হেব? মেন কর সবেচেয়
বড় সগেম টটা িনলা। এরপর বািক সগেম ট িল জাড়া লািগেয় লািগেয় তুিম বড় সগেমে টর অ
মাথায় পউছাবা। যিদ বড়টার দঘ 1/2 এর থেক বড় হয় তাহেল তুিম কখনই অ াে পাঁছােত
পারেব না। আর যিদ 1/2 এর সমান হয় তাহেল কবল অপর াে পাঁছােব একিট লাইন তির
কের, polygon হেব না। আর যিদ সবেচেয় বড়টা 1/2 এর থেক ছাট হয় তাহেল আমরা polygon
বানােত অব ই পারব। ও াঁ ভাল কথা, বেলেম বেলিছ সগেমে টর দঘ N িক এখােন আিম
এই দঘ 1 ধের কাজ কেরিছ। কন? কারণ, আমােদর উ র আসেল N এর উপর িনভর করেব না
তাই না? একিট 1 দেঘ র যখােন যখােন কাটা valid, 100 দেঘ র সখােন সখােন কাটা valid।
মােন propotionally কাটেত হেব- এই আর িক। যিদ তুিম 1 এর 1/3 ত কাট তাহেল 100 এর
100/3 ত কাটবা- এরকম। যিদ কাটা িল 1 এর ে valid হয় তাহেল 100 এর ে ও valid
হেব। তরাং আমােদর N এর দরকার নই। আমরা আমােদর িহসাবেক সহজ করার জ ধের িনেত
পাির সগেমে টর দঘ 1. এখন আমােদর থম সমাধান দখা যাক।
আমরা " িতিট segment এর দঘ 1/2 এর থেক ছাট হেব" এিটর probability না বর কের
" কােনা একিট segment এর দঘ 1/2 এর সমান বা বড় হেব" এটার probability বর করব।
খয়াল কর কােনা একিট segment যিদ 1/2 এর সমান বা বড় হয় তাহেল আর কউ িক 1/2
এর সমান বা বড় হেব না কারণ বািক যই অংশ আেছ তােত অ ত িট সগেম ট বসােত হেব (আিম
ধের িনি K > 1 কারণ K = 1 হেল িট সগেম ট হয় আর িট বা িদেয় কখনই polygon
হয় না)। মেন কর আমরা K বার randomly কেটিছ এবং K + 1 িট সগেম ট পেয়িছ। ধরা যাক
এেদর দঘ হেলা x0 , x1 , . . . xk এবং x0 হল সবেচেয় বড়টা। আমরা এেক সরলেরখার একদম বাম
সাইেড রাখেবা। তাহেল x0 এর অ মাথা অব ই [1/2, 1] এর মােঝ থাকেব। ধু তাই না, আসেল
যই K িট িব েত কাটা হেব সব িলই [1/2, 1] এর রে পড়েব। এই probability কত? কােনা
একিট িব [0, 1] এই রে র শষ অেধেক পড়েব তার probability 1/2. তাহেল K িট িব ই
শষ অেধেক পড়েব তার probability হেব K টা 1/2 ন অথাৎ 21K . তাহেল এটাই িক উ র? না,
এখােন আমরা ধের িনেয়িছ য x0 অথাৎ সবেচেয় বড় segment িট বােম থাকেব। িক তুিম যখন
random ভােব K জায়গায় কাটেব তখন তা সবেচেয় বড়টা বােম নাও থাকেত পাের। তাহেল উপায়
িক? মেন কর তুিম random ভােব K িট জায়গায় কাটার পর segment িলর বাম থেক ডােন দঘ
িল হেলা y0 , y1 , . . . yK . তুিম cyclically ঘুরােত থােকা যত ণ না সবেচেয় বড়টা বােম আেস
অথাৎ তুিম দখবা y1 , y2 , . . . yK , y0 এরপর y2 , . . . , yK , y0 , y1 এরকম কের তত ণ cyclically
ঘুরােত থাকবা যত ণ না সবেচেয় বড়টা বােম আেস। তাহেল এভােব তুিম যেকােনা ভােব কাটার
জ ঘুিরেয় ঘুিরেয় বড়িটেক সবেচেয় বােম আনেত পারেব। যিদ এটা সিত হয় তাহেল একবার ভাব
যিদ েতই সবেচেয় বড়টা বােম থােক তাহেল তােক ঘুিরেয় ঘুিরেয় িন য় িবিভ জায়গায় নওয়া
স ব? যেহতু মাট K +1 িট সগেম ট আেছ তাই এেক K বার ঘুরান যােব আর িনেজ একটা, মাট
K + 1 অব ায় িনেয় যাওয়া স ব। এর মােন আসেল কােনা একিট সগেম ট 1/2 এর থেক বড়
পাবার স াবনা K+1 2K
কারণ বােম সই বড়টা পাবার স াবনা 21K আর তােক K + 1 ভােব ঘুিরেয়
নানা জায়গায় িনেয় যাওয়া যায় আর এই সব নানা জায়গা তামােক সব অব া িদেত সাহায করেব।
তাহেল আমােদর polygon বানােত পারার probability হেব 1 − K+1 2K
.
এবার ি তীয় সমাধান দখা যাক। আমরা calculus ব বহার করব। ধরা যাক আমােদর সবেচেয়
বড় segment িটর দঘ x. আমরা x এর সােপে integration করব। যেহতু এিট 1/2 এর
থেক বড় হেব তাই আমােদর integration এর র হেব [0.5, 1]. এখন আমােদর বড় segment
িট এক সাইেড হেত পাের বা ভতের হেত পাের। ধরা যাক এিট বাম সাইেড। তাহেল বাম সাইড
হেত িঠক x দূরে একিট কাটা হেব। যিদ আমরা dx ক খুব ছাট জায়গা ধির তাহেল এই x দূরে
একিট কাটা হবার স াবনা dx
1 = dx যখােন 1 হল পুেরা সরলেরখার দঘ । এখন এই কাটিট K
িট কােটর যেকােনািটই হেত পাের। কততম কাটিট এখােন? সজ একিট K ন হেব (কত ভােব

৫৩
ওখােন কাট হেত পাের? K ভােব। কারণ K কােটর যেকােনা কাটই ওখােন হেত পাের)। আর এই
কাট ছাড়া বািক কাট িল ডান িদেকর বািক 1 − x জায়গায় হেব। তরাং বািক K − 1 কােটর িতিট
ডােনর (1 − x) এ পড়ার probability (1 − x)K−1 . তরাং বােম x দেঘ র কাট হবার স াবনা
K(1 − x)K−1 dx. একই ভােব যিদ x অংশিট যিদ ডান িদেক হয় তাহেল একই probability
( তরাং 2 িদেয় ন হেব). এখন ধরা যাক আমােদর বড় সগেম টিট সাইেড না হেয় মােঝ। তাহেল
এই ে এই সগেম ট এর বােম একিট িব পড়েব আর ডােন আেরকিট। মেন কর আমরা ডান
হেত x অংশ অ রেঙ রং কেরিছ। তাহেল আমােদর x এর বাম মাথা আসেল রং না করা যেকােনা
জায়গা থেক হেত পাের। রং না করা অংেশর দঘ (1 − x) তাই এই অংেশ একিট কাট হবার
স াবনা (1 − x). এখান থেক x দূর ডােন আমােদর আেরকিট কাট হেত হেব। এর স াবনা dx.
এখন খয়াল কর K িট কােটর মােঝ x এর বাম মাথায় একিট আর ডান মাথায় আেরকিট কাট আেছ।
বােমরিট K িট কােটর যেকােনািট হেত পাের আর ডােনরিট হেত পাের (K − 1) ভােব (উদাহরণ
প- তৃতীয় কাট বােম আর থম কাট ডােন)। তাহেল এই িট কাট হেত পাের K(K − 1) ভােব।
তরাং এেদর ন করেল x এর ই িদেক িট কাট হবার স াবনা বর হেয় যােব। বািক থােক বািক
K − 2 িট কাট। এরা আসেল x বােদ বািক জায়গার যেকােনা কাথাও হেত পাের। x বােদ বািক
অংেশর দেঘ র যাগফল (1 − x) তাই এটা হেত পাের (1 − x)K−2 ভােব। তরাং x মােঝ হবার
স াবনা K(K − 1)(1 − x)(1 − x)K−2 dx. তাহেল x মােঝ হবার স াবনা আর সাইেড হবার
স াবনােক যাগ কের যিদ integration কর তাহেল উ র পেয় যােব।
েতই বেলিছ িনঃসে েহ এিট একিট কিঠন সম া। এবং একবার পেড়ই তুিম এটা বুঝেত
পারবা আিম আশা কির না। সিত কথা বলেত চাইিনজ িলখােক translate কের এর পর এই সমাধান
বুঝেত আমার বশ অেনক ণ লেগেছ।

UVa 1640 The Counting Problem


সমস া: তামােক িট সংখ া a ও b দওয়া হেব (1 ≤ a ≤ b ≤ 108 ). বলেত হেব এেদর মােঝ
যত িল সংখ া আেছ (এই িট সহ) তােদর সব িলেত কান digit কয়বার কের আেছ। অথাৎ 0
কয়বার, 1 কয়বার এভােব 9 পয সব digit কয়বার কের আেছ বলেত হেব। যিদও মূল সম ােত
a ≤ b বলা নাই িক এখােন আেলাচনার িবধার জ আিম এই condition আেরাপ কেরিছ। যিদ
b < a হয় তাহেল ধু তােদর swap কের িনেলই হেব।
সমাধান: এিট একিট র সহজ mathematical সম া। যসব সম ােত বেল য a ও b এর
মােঝ িকছু একটা count করেত বা িহসাব করেত তখন সাধারণত যা করেল সহজ হয় তাহেলা তুিম
একিট ফাংশন f (n) িলখেব যটা 1 হেত n পয উ র বর কের। এর পর তুিম f (b) − f (a − 1)
করবা, তাহেল তুিম a হেত b পয উ র পেয় যােব। আমরা এই সম ােতও এই ি ক খাটােত
পাির।
তরাং আমােদর বেলম দাঁড়াল, একিট মান n দওয়া হেল তুিম কীভােব 1 হেত n পয সব
সংখ ার িডিজট িলর সংখ া বর করেব। বুঝার িবধার জ আমরা একটা উদাহরণ নই- 315097.
আমরা 1 হেত 315097 পয সংখ া িলর িডিজেটর সংখ া বর করেত চাই। অথাৎ এই সংখ া িলেত
কান িডিজট কয়িট কের আেছ। এিট একিট 6 অংেকর সংখ া। আমরা এেক এেক িতিট অংেক যাব
এবং সখােন 0 হেত 9 পয লুপ চালােবা আর িজ াসা করব এই ােন এই িডিজট 1 হেত n পয
কয়বার আসেত পাের। মেন কর আমরা জানেত চাি i তম ঘের (ডােনর ঘর অথাৎ lsb এর জ
i = 0, এর বােমর ঘেরর জ i = 1 এরকম) d িডিজটিট কত বার আেস। এই ে d এর লুপ
চলেব 0 হেত 9 পয , আর i এর লুপ চলেব 0 হেত 5 পয (কারণ সংখ ািট 6 িডিজেটর আর আমরা
0 indexing ধেরিছ)। ধরা যাক 315097 এর জ i = 3 ও d = 1 এর জ এই count আমরা
বর করেত চাই। িতনিট িজিনস দখেত হেব i = 3 এর বােম িক আেছ (L = 31)? ডােন িক আেছ
(R = 097)? আর িনেজ িক (S = 5)? থেম দখেত হেব d আর S এর স ক িক। ছাট, বড় না
সমান। িতন ে িতন রকমভােব গণনা করেত হেব। d = 1 এর জ এিট S = 5 হেত ছাট। এই
ে ক না কর কখন কখন এখােন 1 আসেব? i = 3 এ যখন 1 আসেব তখন আমােদর বােমর
সংখ া িক 0 হেত 31 পয মাট 32 (L + 1) িট সংখ ার যেকােনািট হেত পাের। আবার আমােদর

৫৪
ডােনর সংখ া 000 হেত 999 পয মাট 1000 (10i ) রকম হেত পাের। তাহেল 1 আসেব মাট
32 × 1000 বার বা ফমুলায় িলখেল (L + 1)10i বার। যিদ d > S হয়? তাহেল িক আমােদর
বােমর সংখ া 31 হেত পারেব না। কন? ধর d = 7 > S = 5 এখােন দেখা (31)7(???) এরকম
কােনা সংখ া িক 1 হেত 315097 এর মােঝ নই। তার মােন আমােদর বােমর অংশ হেত পাের
0 হেত 30 পয মাট 31 রকম। আর ডােনর সংখ া আেগর মতই 1000 রকম। এ হেত আমরা
বর করেত পাির 7 কয় বার আসেব। বািক থােক d = 5 = S = 5 এর case. এই ে বােম
31 আসেত পারেব িক যখন 31 আসেব তখন আবার ডােন 000 হেত 999 পয সব িল সংখ াই
হয়েতা আসেত পারেব না। কবল 000 হেত 097 (R) পয আসেত পারেব। বােম 0 হেত 30 হেল
িক হেব তােতা d > S এর case থেকই বর কের ফেলছ। আর যিদ বােম L এর সমান হয় তাহেল
ডােন R + 1 রকম সংখ া আসেত পাের। তরাং এই ভােব আমরা সকল i এর ােন সকল d এর
সংখ া েন ফলেত পারব।
তেব িকছু িজিনেস সাবধান হেত হেব। যমন আমােদর এই উদাহরেণ i = 5 এ d = 0 কখনই
হেব না। আবার যখন i = 0 হেব তখন R এর মান কত হেব? আসেল আিম িনেজও জািন না য R
এর মান কত ধরেল িমলেব। আিম হেল এখােন কােনা risk নব না। বরং এখােন R ছাড়াই িহসাব
করব। ধর 315097 এ শষ ঘের (অথাৎ i = 0 এর ে ) 1 কত বার আেস? সহজ 1 যতবার
আসেব এর বােম 0 হেত 31509 পয মাট 31510 িট সংখ া আসেব। আর এর ডােন যেহতু
কােনা ঘর নাই তাই R এর িহসাব করার কােনা দরকার নই। একই ভােব d = S বা d > S এ
েসস করেত হেব।
আবােরা বিল, এই সম া বেল বুঝােনা কিঠন। আিম তামােক খুব জাড় সমাধােনর পথ বেল
িদেত পারব। িক তামােক িনেজ থেক এটা বুঝেত হেব। কারণ এেত অেনক step আেছ এবং
িতিট step এর জ ফমুলা বর করেত হেব। আিম িনি ত এর থেক হয়েতা সহজ উপােয় িহসাব
করা স ব যটা আমার মাথায় এই মুহূেত আসেছ না। তামরা কউ সরকম সমাধান পেল সবাইেক
জািনেয় িদও।

UVa 10213 How Many Pieces of Land?


সমস া: একিট ellipse এর পিরিধর উপর n িট িব নাও (1 ≤ n ≤ 231 )। এবার িত িট িব
িনেয় তােদর মােঝ রখা টান। এেত কের ellipse িট অেনক ভােগ িবভ হেব। বলেত হেব সেবা
কত ভােগ ভাগ করা স ব।
সমাধান: এই সম া সমাধােনর িট উপায় দখা যাক।
থম উপায় হেলা এটা িব াস করা য উ র একিট polynomial হেব। কত degree এর তা
জািন না। তেব polynomial হেবই। এজ আমরা আসেল কেয়কিট n এর মােনর জ উ র বর
করব। ভাল হয় যিদ তুিম n = 1, 2, . . . 6 এরকম কত িল n এর জ যিদ উ র বর করেত পােরা।
আিম জািন n এর এরকম বড় মােনর জ উ র হােত হােত বর করা ক কর িক করার িকছুই
নই। তুিম যিদ একটু ক কের এই মান িল বর করেত পােরা তাহেল সমাধােনর অেনক কােছ চেল
আসেব। n এর যত িল মােনর ∑জ উ রi বর কেরছ িঠক তত িড ী এর polynomial নাও, এে ে
যমন 6 িড ী এর p(n) = ai × n . যেহতু আমরা n = 1 . . . 6 এর জ f (n) জািন সেহতু
আমরা যিদ n এর মান আর f (n) এর মান বসাই তাহেল 6 িট variable (a0 , . . . a5 ) এর 6 িট
equation পেয় যাব। এবার gaussian elimination ব বহার কের আমরা a0 . . . a5 সবার মান
বর কের ফলেত পারব। তামরা চাইেল Lagrange এর interpolation ফমুলাও ব বহার করেত
পােরা। ফমুলািট আিম আর এখােন তুেল িদলাম না। কারণ আিম মেন কির এিট একটু advanced
িজিনস। যিদ কােরা আ হ থােক তাহেল wiki দখেত পােরা। হয়েতা পের কােনা এক সময় এটা
িনেয় িলখব।
ি তীয় উপায় হেলা euler's formula- V − E + F = 2 যখােন V হেলা vertex এর সংখ া,
E হেলা edge এর সংখ া আর F হেলা face এর সংখ া। Face মােন আমােদর সম ায় যই "ভাগ"
বলা হেয়েছ সটা। তেব খয়াল রাখেত হেব face ধু ভতেরর অংশ না বািহেরর অংশও িনেত পাের।
একটা উদাহরণ দয়া যাক তাহেলই পির ার হেব। একিট ি ভুজ নাও। ি ভুেজর িতনিট vertex,
িতনিট edge এবং ইিট face একিট বািহের আর আেরকিট ভতের। তাহেল ফমুলা খােট িকনা

৫৫
দেখা 3 − 3 + 2 = 2. র মত খােট। এবার একিট বগ আঁক আর তার িট কণ আঁক। আমােদর
vertex িক 5 টা। বেগর চার কাণা আর কেণর ছদ িব । Edge িক 8 িট। বেগর চার বা আর
কেণর ছদ িব হেত বেগর কাণা িলেত। আর face িক 5 িট। বেগর ভতের 4 ভাগ আর বািহের
এক ভাগ। তাহেল 5 − 8 + 5 = 2. বুঝেতই পারছ এই ম ািজকাল ফমুলা আমােদর জীবনেক কত
সহজ কের িদেত যাে ! আমােদর সম ায় আমরা যিদ vertex আর edge এর সংখ া বর করেত
পাির, তাহেল এই ফমুলা ব বহার কের আমরা face এর সংখ া খুব সহেজই বর কের ফলেত পারব
(ভুেল যও না এই ফমুলা িক বািহেরর face কও count কের)। থেম তুিম িচ া কর কীভােব
িব িল বসাবা। আইিডয়া হেলা এমন ভােব বসাবা যন এমন কােনা িব যন না থােক যখােন
িদেয় 2 িটর বিশ ellipse এর কণ যায় (ellipse এর কণ বলেত বুঝাি আমােদর বসােনা িব
দর মােঝ আঁকা রখা িল)। কারণ যিদ কােনা িব িদেয় িতনিট কণ যায় আমরা চাইেল একিট
িব েক সিরেয় একিট ভাগ বাড়ােত পাির। তুিম একটু কাগেজ কলেম এেক দেখা। মেন কর একটা
X এর মােঝ িদেয় I এঁেকছ। আর আেরক জায়গায় িঠক মাঝ িদেয় না এেক একটু সিরেয় এঁেকছ। এই
ইভােব আঁকা ছিবর face এর সংখ া েন দেখা তাহেলই বুঝেব। অব আমােদর বসােনা n িট
িব েত যত খুিশ কণ িমিলত হাক আমােদর সম া নই। তাহেল হল vertex কয়িট? একিট
ছিব আঁকা যাক।

1
2 9

3
8

4
7

5 6

নকশা ৪.৪: Ellipse এর উপর n = 9 িট িব

িচ ৪.৪ এ আমরা ellipse এর উপর 9 িট িব এঁেকিছ। মেন কর আমরা জানেত চাই 1 − 5


এই লাইেনর উপর 1 আর 5 ছাড়া আর কয়িট িব আেছ? সহজ, খয়াল কর এই লাইেনর বােম
আেছ 3 িট িব আর ডােন আেছ 4 িট িব । তাহেল এেক মাট 3 × 4 িট জায়গায় ছদ করেব।
এর মােন কােনা একিট রখার বােম যিদ i িট িব থােক তাহেল ডােন থাকেব n − i − 2 িট িব ।
তরাং এিট মাট i(n − i − 2) িট ছদ িব তির করেব। িক 1 থেক লাইন যিদ আমরা 2 এ
টানতাম তাহেল i = 0. যিদ 3 এ টানতাম তাহেল i = 1 এভােব যিদ 9 এ টানতাম
∑n−2 তাহেল i = 7.
তরাং একিট িব হেত যত িল কণ তির হয় তােত মাট ছদ িব র সংখ া i=0 i(n − i + 2).
যেহতু একিট িব থেক উৎপ কণ িলেত এেতা িল ছদ িব পাওয়া যায় সেহতু n িট িব হেত
উৎপ কণ িলেত ছদ িব র সংখ া এর n ন হেব। তেব একটা িজিনস, এখােন িক over count
হেয়েছ। কত বার over count হেয়েছ? িতিট ছদ িব িক িট কেণর উপর থােক। িতিট কেণর
া িব র জ এই ছদ িব count হেব। অথাৎ যিদও AB আর CD িট কেণর একিট ছদ িব ,
িক সিট A, B, C ও D এই চারিট িব সােপে ই count হেব। তরাং িতিট ছদ িব 4 বার
count হেয়েছ। তাই আমােদরেক sum িটেক 4 িদেয় ভাগ করেত হেব। সই সােথ খয়াল রেখা
আমরা িক া িব িন নাই এখেনা। তরাং ঐ sum ক 4 িদেয় ভাগ কের n এর সােথ যাগ
করেল আমরা vertex এর সংখ া পেয় যাব। যেহতু n অেনক বড় আমরা লুপ চািলেয় এই sum
বর করেত পারব না। আমােদরেক sum িটর closed form বর করেত হেব। আমরা ৪.১ এ এটার

৫৬
closed form বর কের দিখেয়িছ।


n−2
V′ = i(n − i + 2)
i=0

n−2
= ni − i2 + 2i
i=0

n−2 ∑
n−2 ∑
n−2
(৪.১)
= ni − i2 + 2i
i=0 i=0 i=0

n−2 ∑
n−2 ∑
n−2
=n i− i2 + 2 i
i=0 i=0 i=0
(n − 2)(n − 1) (n − 2)(n − 1)(2n − 3) (n − 2)(n − 1)
=n − +2
2 6 2

এবার E বর করা যাক। আমরা E একটু সহেজ বর করব। আমরা যিদ আমােদর ােফর সব
vertex এর degree এর যাগফল বর করেত পাির তােক 2 িদেয় ভাগ করেলই E পেয় যাব। এই
সম ায় degree এর যাগফল বর করা সহজ। কারণ িতিট ছদ িব র degree 4 আর শীষিব
িলর degree n + 1 (িচে 1 এর সােথ 2 হেত কের 9 সবার একিট edge আেছ। সই সােথ
1 এর সােথ িট ellipse এর border আেছ, এ িলও edge, অথাৎ ellipse এর border বরাবর
1 য 2 আর 9 এর সােথ যু তার কথা বলিছ)। তরাং এেদর সবাইেক যাগ কের 2 িদেয় ভাগ
করেলই আমরা E পেয় যাব। এখন আমরা euler এর ফমুলায় V ও E এর মান বিসেয় F এর মান
বর করেলই আমােদর সম া সমাধান হেয় যােব।
একটা িজিনস। n এর মান িক 231 এর মত হেত পাের। আবার আমােদর ফমুলােত n3 এর টাম
আেছ। আমরা যিদ long long এও িহসাব কির তাহেলও overflow হেব। তরাং আমরা চাইেল c++
এ bigint এ কাড করেত পাির অথবা java ত কাড করেল আমরা java এর built in library এর
BigInteger ব বহার করেত পাির। আিম বলব তামােদর উিচত c++ ও java ই ভােবই সমাধান
করা। ই উপােয়র সােথ পিরিচত থাকা ভাল।

UVa 1363 Joseph's Problem


∑n
সমস া: n ও k দওয়া থাকেব (1 ≤ n, k ≤ 109 ). i=1 k mod i বর করেত হেব।
সমাধান: সাধারণত তুিম যিদ কাথাও i এর উপর িবশাল লুপ দেখা আর লু√েপর ভতের i যিদ ভাগ
অব ায় থােক (integer division) তাহেল বিশর ভাগ সময় একিট র n মথড কােজ লােগ।
আমরা i এর মান 1 হেত 30 এর জ 30/i এর মান টিবল ৪.১ এ ল কির।
যখন তুিম ছাট ছাট সংখ া িদেয় ভাগ কেরছ তখন িনত নতুন মান পাওয়া যায়। যমন 1 িদেয়
ভাগ করেল 30, 2 িদেয় করেল 15 আবার 3 িদেয় করেল 10. িক যিদ বড় মান িদেয় কর তখন
দখা যায় অেনক িলর জ একই মান আেস। যমন 16 হেত 30 যাই িদেয় 30 ক ভাগ কর না
কন 1 হেব। 11 হেত 15 যাই িদেয় ভাগ কর না কন 2 হেব। তরাং মূল আইিডয়া হেলা তুিম i
এর মান ক ই ভােগ ভাগ করেব ছাট আর বড়। ছাট মান িল িদেয় ভাগ কের কের k/i এর মান
বর করেব। আর বড় িল িদেয় ভাগ করেব না। বরং বড় িল িদেয় ভাগ করেল √ যই উ র আেস সই
উ েরর উপর লুপ চালােব। এখন ছাট বড় ভাগ করেব কীভােব? সাধারণত k িদেয় এর সােপে
আমরা ছাট আর বড় ভাগ
√ আলাদা কের থািক। ছাট i িলর জ আমরা 1 হেত তত ণ লুপ চালাব
যত ণ √ k/i এর মান k এর বড় হয়। তাহেল আমরা সই সব i েসস কের ফেলিছ যােদর জ
k/i > k.

৫৭
i 30/i i 30/i i 30/i
1 30 11 2 21 1
2 15 12 2 22 1
3 10 13 2 23 1
4 7 14 2 24 1
5 6 15 2 25 1
6 5 16 1 26 1
7 4 17 1 27 1
8 3 18 1 28 1
9 3 19 1 29 1
10 3 20 1 30 1

সারনী ৪.১: 30/i এর টিবল

√ এবার বড় i িল েসস করা যাক। আমােদর ল হল সসব i েসস করা যােদর জ √ k/i ≤
k হয়। মেন কর আমােদর উ র হল j (অথাৎ আমরা j এর একিট লুপ চালাি 1 হেত k পয )।
তুিম িক বলেত পারেব কান কান মােনর জ j উ র হেব? অথাৎ আমরা যিদ decimal division
এর কথা ভুেল যাই তাহেল আমরা সসব a চাই যন k/a = j হয়। অথাৎ a = k/j. িকছু উদাহরণ
দখা যাক। j = 1 হেল 30/1 = 30 যিট হেলা 1 উ র হবার শষ মাথা (কারণ 31 িদেয় ভাগ
করেল 0 হেয় যায়)। আমরা যিদ j = 2 িদেয় ভাগ কির তাহেল পাই 30/2 = 15 (16 িদেয় ভাগ
করেল 1 হেয় যায়) এবং এিট হেলা 2 উ র হবার শষ মাথা। j = 3 িদেয় ভাগ করেল 30/3 = 10
পাই এবং 10 হল 3 উ েরর শষ মাথা। তরাং আমরা উ র এর উপর যিদ লুপ চালাই এবং তা িদেয়
যিদ
√ k ক integer ভাগ কির তাহেল আমরা সই উ র এর শষ মাথা পেয় যাব। তেব এই কাজ
k এর থেক বিশ উ েরর জ করেত যও না (যিদ j এর লুপ িঠক মত চািলেয় থাক তাহেল এই
সম া হেব না)। বা করেলও একটু সাবধােন কিরও। যমন আমােদর উদাহরেণ যিদ আমরা উ র 9
ধরেত চাই এবং 30/9 = 3 কির তাহেল িক হেব না। 3 এ িক উ র √ 10. আসেল 9 উ র আলা
কােনা সংখ াই নই। তুিম যিদ একটু িচ া ভাবনা কর তাহেল বুঝবা য k পয িতিট মান উ র
হবার যাগ । তাই এ িনেয় আমরা ওত িচ া করব না। যাই হাক আমরা যিদ জািন 1 উ র হেব শষ
কান সংখ ায় (30), 2 উ র হেব শষ কান সংখ ায় (15), 3 উ র হেব শষ কান সংখ ায় (10)
তাহেল িক আমরা কান উ র কয়বার বা কান কান সংখ ার ে কানিট উ র আসেব সব বর
কের ফলেত পারব। যমন আমরা বলেত পাির 1 উ র হেব 16 হেত 30, 2 উ র হেব 11 হেত
15 ইত ািদ। আমরা চাইেল এখন যই সব সংখ ার জ j উ র তােদর count িনেত পাির, তােদর
যাগফল িনেত পাির ইত ািদ।
এত ণ আমরা একটা সমাধােনর টকিনক বললাম। এই সমাধােনর টকিনক ব বহার কের আমরা
আমােদর সম া কীভােব সমাধান করা যায় তা দখেবা। থমত খয়াল কর, আমােদর সম ায়
লুেপর ভতের mod আেছ। এেক আমরা ভােগ পিরবতন করেত পাির। ∑nk mod i = k − (k/i)i
যখােন ভাগিট
∑n হেলা integer division. তরাং আমরা
∑n িলখেত পাির i=1 k − (k/i)i বা আসেল
আমােদর i=1 (k/i)i বর করেলই চেল কারণ i=1 k = nk। এবার আমােদর টকিনক কােজ
লাগেব। থেমই দেখ নাও n িক k এর থেক বড় িকনা। বড় হেল i = k + 1 হেত n এর জ k/i
য 0 হেব তােতা আমরা আেগ থেকই √ জািন। তরাং সসব বাদ। আমরা ধের িনেত পাির n ≤ k.
এখন আমরা ছাট বড় ই ভাগ করব √ k এর িভি েত। থেম i = 1 হেত লুপ চািলেয় (k/i)i
বর করেত থাকব যত ণ k/i > k হয় ( খয়াল করেত হেব i যন আবার n এর থেক বড় না
হেয়
√ যায়)। এবার ভাগফেলর উপর লুপ চালােনার পালা। আমরা এবার j এর লুপ চালােবা 1 হেত
k পয । িতবার j উ র হেব এরকম শষ সংখ া বর করব k/j. j + 1 উ র হেব এরকম শষ
সংখ া k/(j + 1). তরাং k/(j + 1) + 1 হেত k/j পয সংখ া িলর জ k/x = j হেব যখােন
x হেলা ঐ রে থাকা যেকােনা সংখ া। তরাং আমােদর sum য িছল (k/i)i এর উপর সটা
এখন পালেট হেয় যােব jx কারণ আমরা ধেরিছ j হল ভাগফল আর x হেলা সরকম সংখ া িল।

৫৮
তরাং িত j এর জ আমরা যিদ x িল অথাৎ k/(j + 1) + 1 হেত k/j পয এর যাগফল বর
কের ফলেত পাির তাহেলই হেব। আর এই যাগফল চাইেলই ফমুলার সাহােয বর কের ফলা যায়।
একটা িজিনস আবােরা খয়াল রাখেত হেব যন এই য সংখ ার র এর মােঝ যন n এর থেক বড়
সংখ া না থােক। নেত কিঠন লাগেলও আসেল এটা ওত কিঠন না। তুিম একটু কাগেজ কলেম িনেজ
থেক িচ া কের দেখা আর কাড কের দেখা তাহেলই পির ার হেয় যােব।

UVa 11440 Help Mr. Tomisu


সমস া: M ও N িট সংখ া দওয়া হেব (1 ≤ M ≤ N ≤ 107 এবং N − M ≤ 105 ). 2 এবং
N! (N factorial) এর মােঝ কত িল সংখ া আেছ যােদর সকল prime divisor ই M হেত বড়?
500 িট test case থাকেত পাের।
সমাধান: এধরেনর mathematical সম ার ে সমাধােনর কােনা িনিদ টকিনক নই। মূলত
observation এর দরকার। অথাৎ কাগজ কলম িনেয় এিদক অিদক নানা িদক থেক িচ া কের
সমাধান করেত হেব। এই সম ার ে মূল observation হেলা 2 থেক N! এর মােঝ যসকল
সংখ া M! এর সােথ coprime তারাই উ র। কন? কারণ M! এর ভতের M এর থেক ছাট
সব prime আেছ। আবার M এর থেক বড় কােনা prime এেত নই। তরাং যসকল সংখ া M!
এর সােথ coprime তারাই উ র। phi(M !) িক বর করা সহজ তাই না? এিট হেলা M !(1 −
1/p1 )(1 − 1/p2 ) . . . যখােন pi হেলা M এর সমান বা ছাট prime. তরাং আমরা যিদ 107
পয সকল prime generate কের ফিল তাহেল খুব সহেজই 107 পয সকল সংখ ার factorial
এর phi function আমরা বর কের ফলেত পারব। কীভােব?
খয়াল কর phi((i − 1)!) এর সােথ phi(i!) এর খুব close স ক আেছ। থমত ফমুলার
থম term িট (i − 1)! হেত i! হেয় যােব। সই সােথ যিদ i prime হয় তাহেল (1 − 1/i) নােমর
একটা term চেল আসেব। অথাৎ যিদ i prime না হয় তাহেল phi((i − 1)!) এর সােথ i ন
করেলই phi(i!) পাওয়া যােব। আর যিদ prime হয় তাহেল (i − 1) ন করেলই হেব। এভােব
আমরা phi(i!) precalculate কের ফলেত পারব। িক এটােতা বর হেলা M ! এর সমান বা ছাট
কয়িট coprime সংখ া আেছ (M! এর সােথ)। আমােদর তা দরকার N ! এর সমান বা ছাট কয়িট
coprime আেছ (M! এর সােথ)। আসেল phi(M !) ক তামরা যিদ N !/M ! িদেয় ন কর তাহেলই
হেব। কন? দেখা 1 হেত M! এর মােঝ x যিদ M! এর সােথ coprime হয় তাহেল (2M ! + x)
ও coprime হেব, (3M ! + x) ও হেব। অথাৎ 1 হেত M! এর মােঝর coprime এর িল M!+1
হেত 2M!, 2M! + 1 হেত 3M! ইত ািদর মােঝও থাকেব। তরাং আমােদর phi(M !) এর সােথ
N !/M ! বা (M + 1)(M + 2) . . . N ন করেত হেব। যেহতু N − M ≤ 105 তাই আমরা িত
case এ এই কাজ করেতই পাির।

UVa 10214 Trees in a Wood


সমস া: তামােক [−a, a] × [−b, b] সাইেজর একিট ি ড দওয়া থাকেব যখােন 1 ≤ a ≤
2000, 1 ≤ b ≤ 2 × 106 . তুিম যিদ (0, 0) ত দাঁড়াও তাহেল তামােক বলেত হেব কয়িট ি ড
িব দখেত পারেব। যমন, তুিম যিদ (0, 0) ত দাঁড়াও তাহেল তুিম (1, 1), (−1, 1) এেদর দখেত
পারেব িক (2, 2), (10, 10), (5, 0) এেদর দখেত পারেব না। সম ার িবধার জে ধের নাও
(0, 0) ক আমরা গণার ভতর ধরব না অথাৎ এই িব িট দখা গল িক গল না তা িনেয় না ভাবেলও
হেব।
সমাধান: মূল সম ায় এই count ক মাট ি ড িব র সংখ া িদেয় ভাগ কের output করেত হেব,
িক আমার মেন হয় তামরা সবাই মাট ি ড িব র সংখ া িনেজরাই নেত পারেব। তরাং এখােন
আমরা কয়িট িব ক দখেত পারব সটার উপর নজর দই। থম কথা, আমরা চার axis এ চারিট
িব দখেত পারব (1, 0), (0, 1), (−1, 0), (0, −1). আমরা যিদ কােনাভােব বর করেত পাির য

৫৯
থম quadrant এ (axis বরাবর িব বােদ) কয়িট ি ড পেয় টেক আমরা দখেত পারব, তাহেল
তােক চার িদেয় ন করেলই আমরা সকল quadrant এর জ উ র বর কের ফলেত পারব।
কারণ সব quadrant হেলা symmetric. তরাং আমরা জানেত চাই [1, a] × [1, b] এর মােঝ
কান কান িব েক আমরা দখেত পারব। ধরা যাক আমরা (i, j) ক দখেত পাই। তাহেল িক
(ki, kj) ক আমরা দখেত পারব না। আবার অ ভােব বলেল বলা যায় যিদ (i, j) একিট িব
হয় এবং i ও j এর যিদ একিট সাধারণ ণনীয়ক g থােক তাহেল (i/g, j/g) ারা (i, j) বাধা া
হেব। অথাৎ আমরা সসব (i, j) ক দখেত পারব যােদর কােনা সাধারণ ণনীয়ক নই। তার মােন
আমােদর বর করেত হেব 1 ≤ i ≤ a, 1 ≤ j ≤ b হেল কয়িট (i, j) এর জ gcd(i, j) = 1 বা i
ও j পর র coprime হেব। আিম এখােন এিট সমাধােনর ইিট উপায় িব ািরত বলব আর আেরকিট
advanced উপােয়র জ সামা hints দব। যােদর ই া তারা যন নেট দেখ িনেত পাের।
থম উপায় হেলা euler এর phi function ব বহার করা। িকছু ণ আেগই আমরা দেখিছ i এর
সমান বা ছাট এবং তার সােথ coprime এরকম সংখ ার count হেলা phi(i). আর িকছু ণ আেগই
(UVa 11440) এ দেখিছ এই coprime িল িত i িট সংখ ায় repeat হয়। অথাৎ 1 হেত i এর
মােঝ যত িল সংখ া i এর সােথ coprime, i + 1 হেত 2i এর মােঝ িঠক ততিট সংখ াই coprime,
2i + 1 হেত 3i এর মােঝও। এভােব চলেত থাকেব। তরাং আমরা i এর একিট লুপ চালােবা 1 হেত
a পয । এবং িতিট i এর জ আমরা দখেবা 1 হেত b এর মােঝ কত িল সংখ া আেছ যারা i এর
সােথ coprime. এজ আমরা থেম phi(i) বর করব এবং b/i িদেয় (integer division) ন
করব। বািক থাকেব i(b/i) + 1 হেত b পয সংখ া িল। এখােন বািক সংখ ার পিরমাণ b mod i
তাই না? কারণ এ িল হেলা i এর সবেথেক শষ multiple থেক b পয সংখ া িল। যেহতু i
এর মান a থেক বড় না তরাং এর মান 2000 থেকও বড় না। অথাৎ এই য অিতির সংখ া তা
কখনই 2000 থেক বড় হেব না। আর এিট িতিট i এর জ ই। তরাং আমরা বলেত পাির 20002
িট সংখ ার জ আমােদরেক আলাদা কের gcd বর করেত হেব। এটা িত case এ কােনা ব াপার
না। যিদও কয়িট case ( থাকেব
) সটা আমােদর বলা নই। তাহেল আমােদর এই সমাধােনর time
complexity হেব O a2 . সমাধানটা হেলা- আমরা i এর একিট লুপ চালােবা 1 হেত a পয । তার
phi(i) বর করব এবং b/i িদেয় ন করব। এরপর i(b/i) + 1 থেক b পয লুপ চািলেয় i এর সােথ
gcd বর কের দখেবা য তােদর gcd 1 িকনা। এভােব gcd 1 ওয়ালা pair এর সংখ া count
করব।
এবার ি তীয় উপায় বলা যাক। যখনই দখবা coprime হেত হেব বা তােদর gcd g হেত হেব
এরকম ধরেনর কথাবাতা বলা থাকেব তখন এই প িত ায়ই কােজ লােগ। যিদ বলত gcd(i, j) = g
কত িল (i, j) এর জ হেব? তাহেল িজিনসটা কিঠন। িক যিদ বলত gcd(i, j) g এর multiple
হেব কত ভােব? তাহেল িক সই উ র বর করা সহজ। এিট িক (a/g)×(b/g) (integer ভাগ)।
কন? কারণ [1, a/g] × [1, b/g] এই ি েডর যেকােনা িব ধরা যাক (x, y) তাহেল (gx, gy)
িব িট [1, a] × [1, b] ি েড থাকেব এবং তােদর gcd হেব g এর multiple. এখন একটা িজিনস
িচ া কর [1, a] × [1, b] এই ি েড যেকােনা (x, y) এর gcd িক সেবা M = min(a, b)।
তাহেল আমরা 1 হেত M পয িতিট সংখ া i এর জ বর করেত পাির কত িল িব আেছ যােদর
gcd i এর multiple. তাহেল আমােদর সম া িনেচর সম ায় পিরণত হেব-
f ও g িট n সাইেজর অ াের দওয়া আেছ। f [i] এ থাকেব g এর অ ােরেত i এর multiple

এর পিজশন িলেত যসব সংখ া থাকেব তােদর যাগফল অথাৎ f [i] = j g[j] যখােন j হেলা i
এর multiple. f এর মান সমূহ দওয়া আেছ, g এর মান িল বর করেত হেব।
এিট একিট common সম া। অথাৎ িবিভ সম া সমাধান করেত গেল এরকম সম ায়
reduce হেয় চেল আেস। এই সম া n log n এ সমাধান করা যায়। আইিডয়া হল g এর মান
পছন থেক বর করা, অথাৎ থেম g[n], এরপর g[n − 1], এরপর g[n − 2] এরকম কের
এেক এেক g[1] পয মান বর করেত হেব। মেন কর g[i] এর মান বর করেত চাও। যেহতু
আমরা পছন থেক মান বর করিছ তরাং i এর থেক বড় সব index এ g এর মান ইেতামেধ ই
বর কের ফেলিছ। অথাৎ আমরা i বােদ i এর সব multiple এর মান বর কের ফেলিছ। এখন
আমরা যিদ f [i] হেত i বােদ i এর অ া multiple এর index এ থাকা g এর মান িবেয়াগ কির
তাহেল g[i] বর হেয় যােব। অথাৎ তুিম যখন g[4] বর করেত চাইেব তখন যা করেত হেব তাহেলা
g[4] = f [4] − g[8] − g[12] − g[16] . . .. আর এটার complexity য sieve এর মত হেব তােতা

৬০
বুঝেতই পারছ।
তৃতীয় উপােয়র কথা আিম িব ািরত বলব না। যােদর আ হ আেছ তারা mobious inversion
( )
পেড় দখেত পােরা। এভােব করেল complexity িত কেস O n হেব (যিদও sieve এর মত
precalculation লাগেব একটা)।

UVa 1393 Highways


সমস া: একিট n × m সাইেজর ি ড দওয়া আেছ (1 ≤ n, m ≤ 300)। মেন কর ি েডর িতিট
িব এেককিট শহর। এখন তুিম িতিট শহেরর pair এর মােঝ রা া বানােব। এর ফেল িকছু রা া
overlap করেত পাের, যমন (1, 1) হেত (2, 2) পয রা া (1, 1) হেত (3, 3) পয রা ার সােথ
overlap কের। এসব ে ছাট রা ােক িবেবচনা করার দরকার নই। তামােক বলেত হেব মাট
কত িল রা া আেছ। এই গণনার সময় horizontal বা vertical রা া িলও িবেবচনার বািহের রেখা।
সমাধান: আমরা ইেতামেধ ই িশেখ এেসিছ য যিদ i ও j এর gcd 1 হয় তাহেল (0, 0) হেত (i, j)
পয রখা টানেল সিট কােনা িব র উপর িদেয় যায় না। অথাৎ এই রা া অ কােনা ছাট রা ােক
overlap কের না। আমরা এরকম সব ছাট ছাট রা া নব তাহেলই আমােদর মূল সম া সমাধান
হেয় যােব। আসেলই িক তাই? না। খয়াল কর (0, 0) − (1, 1) এবং (1, 1) − (2, 2) এ রা া
িট কাউেকই cover কের না। িক এ িটেক আলাদা কের count করেল overcount হেয় যােব।
তাহেল িক করা যায়? আমরা িক সবেচেয় বড় রা া িল count করব? আমরা যিদ তা করেত
পারতাম তাহেল আসেলই এই সম া সমাধান হেয় যত। িক আিম এভােব ভেব কােনা সমাধান
আনেত পাির নাই।
যভােব সমাধান হেব তাহেলা িত direction এর জ বর করা য কত িল রা া আেছ যা
এই বরাবর চেল। যমন একিট 3 × 3 ি েড কত িল (1, 1) direction এর রা া আেছ? 3 িট।
(0, 0), (1, 0), (0, 1) এই িতনিট িব হেত। অ িব িল হেত তুিম যিদ (1, 1) বরাবর রা া টান
তাহেল হয় তা সরাসির বাইের যায় ( যমন (2, 0) হেত) অথবা আেগর িতনিট রা ার উপর থােক ( যমন
(1, 1) হেত)। তাহেল আমরা i ও j এর উপর লুপ চালােবা। যিদ দিখ তােদর gcd 1 না তাহেল তা
বাদ। আর নাহেল আমােদর বর করেত হেব এই িদক বরাবর কত িল িভ িভ রা া আেছ। বা অ
ভােব কত িল িব থেক এই রা া হেত পাের? ধরা যাক আমরা জানেত চাইিছ (x, y) হেত
এই রা া হেত পাের িকনা। এখান থেক যিদ কােনা রা া হয় তাহেল এর পেরর িব হেব
(x + i, y + j). আর আেগই বেলিছ এই রা া অ কােনা রা ােক overlap করেত পারেব না। তাই
আমরা (x−i, y −j) ও দখেবা। কারণ যিদ (x−i, y −j) িব িট আমােদর ি েড থােক তাহেল ঐ
িব থেক (i, j) িদেকর রা া (x, y) হেত একই িদেকর রা ােক overlap করেব। তাহেল
(x, y) হেত রা া হেত পারেব যিদ (x + i ≤ m এবং y + j ≤ n) এবং (x − i < 0 বা
y − j < 0) হয়। এরকম কত িল (x, y) পাওয়া যােব? এরকম ে যটা করা উিচত তাহেলা
একটা ছিব আঁকা এবং valid অংশ িচি ত কের সই অংেশ কত িল িব আেছ তা count করা।
এই অংশ তামােদর উপর ছেড় দয়া যায়।( )
তাহেল এভােব আমরা িত case এ O nm এ সমাধান করেত পাির। মেন হয় এই complexity
ত( accepted
) হেয় যােব। তেব তামরা যারা সমাধানেক আরও ভাল করেত চাও তারা িচ া কের
O 3002 এ precalculation কের রাখা যায় িকনা চ া কের দখেত পােরা। সমাধানটােত dynamic
programming ব বহার করেত হেব। এই সমাধানটা যত না math স িকত তার থেক অেনক বিশ
dynamic programming স িকত। তাই এখােন আর এ িনেয় আেলাচনা বাড়ালাম না।

UVa 1642 Magical GCD


সমস া: n িট ধনা ক সংখ া দওয়া আেছ যখােন n সেবা 105 এবং িতিট সংখ া সেবা 1012
হেত পাের। এমন একিট contiguous subsequence বর করেত হেব যার element িলর gcd

৬১
এবং সই subsequence এর length এর ণফল যন সকল contiguous subsequence এর
মােঝ সবেচেয় বিশ হয়। যমন- যিদ আমােদর মূল sequence হয় 30, 60, 20, 20, 20 তাহেল
আমােদর উ র হেব 80 যা আমরা শষ চারিট element িদেয় তির contiguous subsequence
থেক পােবা।
সমাধান: এখােন সবেচেয় বড় observation হেলা-
মেন কর তুিম i এ শষ হয় এরকম সকল contiguous subsequence িনেল এবং তােদর
gcd িল বর করেল। এখােন আসেল log a এর বিশ িভ িভ gcd নই যখােন a হল আমােদর
i তম সংখ া। অথাৎ তুিম যিদ (i), (i − 1, i), (i − 2, i − 1, i), . . . (1 . . . i) এরকম index িলর
জ যিদ যথা েম gcd(a[i]), gcd(a[i−1], a[i]) . . . gcd(a[1], . . . a[i]) বর কর তাহেল এখােন
log a[i] এর থেক বিশ িভ gcd থাকেব না।
কন? কারণ খুব সহজ। মেন কর তুিম i এ শষ হওয়া সকল contiguous subsequence এর
জ gcd বর করেল। অথাৎ gcd(a[i]), gcd(a[i], a[i − 1]) এভােব gcd(a[i] . . . a[1]) পয ।
এরা একিট non increasing sequence. কারণ আেগর সংখ ার সােথ নতুন আেরকিট সংখ া
লািগেয় gcd বর করেল নতুন সংখ া কখনই আেগর সংখ া থেক বড় হেব না। আর যিদ ছাট হয়
তাহেল কমপে ই ন ছাট হেব। কারণ পেরর সংখ া তা আেগর সংখ ােক ভাগ দেবই। আর
যিদ সই সােথ ছাট হেত হয় তাহেল কমপে ভােগর সমান হেব। তার থেক ছাটও হেত পাের,
িক বড় হবার স াবনা নই। অথাৎ যখন ছাট হে তখন অ ত 2 ভাগ হেবই। তরাং আমােদর
এখােন আসেল log(a[i]) এর থেক বিশ িভ gcd থাকেব না। কারণ তুিম যিদ a[i] ক log a[i]
বার 2 িদেয় ভাগ কর তাহেল তা 1 হেয় যােব। আর একবার যিদ 1 হেয় যায় তাহেল তা আর ছাট
হেত পারেব না।
তাহেল কীভােব আমরা এই সম া সমাধান করব? খুব সহজ। আমরা একিট অ ােরেত িভ িভ
gcd এর জ িলেখ রাখেবা য এই gcd পেত আমরা সেবা এেতা দূর যেত পাির। অথাৎ g gcd
পেত আমরা i হেত j পয যেত পাির (j < i), g' পেত হয়েতা k পয যেত পাির (k < j).
এরকম। যখন আমরা নতুন সংখ া অথাৎ i + 1 তম সংখ া নব তখন আমরা নতুন সংখ ার সােথ
পুরাতন gcd (g, g' ইত ািদ) িলর gcd বর করব। যিদ পাশাপািশ িট gcd একই হয় তাহেল
ঐ ইিট range ক merge কের দব। এভােব চলেত থাকেব। উদাহরণ দওয়া যাক, মেন কর
আমােদর sequence এ িট সংখ া আেছ a[0] = 25, a[1] = 60. তাহেল আমােদর অ ােরেত
িলখা থাকেব 60 পেত 1 পয যেত হয়, আর 5 পেত 0 পয যেত হয়। এখন মেন কর নতুন
সংখ া আসল 35 (a[2] = 35). তখন আমরা িলখব 35 পেত 2 পয যেত হয়। 5 পেত যেত
হয় 1 (gcd(35, 60) = 5), 5 পেত যেত হয় 0 (gcd(35, 5) = 5). খয়াল কর শষ িট gcd
একই, তরাং এেদর merge কের আমরা িলখেত পাির 5 পেত 0 পয যেত হয়। এই কাজ আসেল
খুব সহেজই কাড করা যােব, স িনেয় িব ািরত বলিছ না। এই সম া সমাধােনর মূল িজিনস হেলা
log n সং া observation.

UVa 10868 Bungee Jumping


সমস া: w ভেরর এক জন লাক একিট ি জ এর উপর হেত bungee jumping করেব। ি জিট s
উ তায় আেছ। এখন লাকিট যিদ লাফ মাের তাহেল স একিট free fall body িহসােব কাজ করেব,
অথাৎ স কােনা বাধা ছাড়া পৃিথবীর িদেক আসেব এবং তার accelaration হেব g (অিভকষজ
রণ). দিড়িটর দঘ l. যখন তার দূর ি জ হেত l এর থেক বিশ হেয় যােব তখন bungee
এর দিড় তােক উপের টানেব। ধরা যাক স l দূরে র থেকও ∆l দূর বিশ অিত ম কেরেছ।
সসময় দিড়িট উপেরর িদেক k∆l force এ টানেব। লাকিট মািটেত িনরাপদ ভােব পৗঁছােব যিদ
মািট েশর সময় তার বগ 10ms−1 এর বিশ নাহয়। যিদ তার বিশ হয় তাহেল লাকিট মের
যােব। তামােক w, l, s, k এর মান দওয়া আেছ। বলেত হেব লাকিট িক িনরাপেদ মািটেত নামেত
পারেব নািক মের যােব নািক মািট পয আসেতই পারেব না।
সমাধান: িনঃসে েহ আরও একিট বশ কিঠন সম া। সিত বলেত এই সম া সমাধান করা আমার

৬২
জ ও এক রকেমর physics ঝালাই।
এই সম া সমাধােনর জ আমােদর মূল যই theorem জানেত হেব তাহেলা- শি র কােনা
ংস নই, এিট কবল এক প হেত অ েপ পা িরত হয়। এখােন মা ষিট একিট ি েজর উপর
দািড়েয় আেছ। তরাং তার একিট potential energy (ি িত শি ) আেছ। এখন স যিদ লাফ দয়
তাহেল যত ণ না স মািটেত আসেছ তত ণ তার potential energy কমেত থাকেব। িক এই
কমা শি কই যােব? এর এক অংশ পিরণত হেব kinetic energy (গিত শি ) ত আর আেরক
অংশ পিরণত হেব bungee দিড়র potential energy ত, কারণ দিড়র দঘ l এর থেক বিশ হেয়
গেল সিট আবার িপেছ (মােন উপের) টানেত করেব। তরাং আমােদর কাজ এই সব energy
বর করা।
তামরা চাইেল potential energy এবং kinetic energy এর ফমুলা বা তার derivation
নেট দখেত পােরা। মূল কথা হেলা m ভেরর কােনা ব যিদ ভূপৃ হেত h উ তায় থােক তাহেল
তার potential energy হেব mgh যখােন g হেলা অিভকষজ রণ। আর v বেগর কােনা ব র
kinetic energy হেলা 21 mv 2 . আর সম ােতই বলা আেছ য bungee দিড় যিদ সাম অব া হেত
∆l দূর সরােনা হয় তাহেল সখােন দিড়িট k∆l শি েয়াগ করেব। তাহেল দিড়র সাম অব া
থেক z দূরে এর potential energy এর পিরমাণ কত হেব? এভােব িচ া কর x এ থাকেত এর
উপর কাজ করা বেলর পিরমাণ kx. এখন যিদ তুিম তােক খুব ছাট dx দূর সরাও তাহেল কাজ
∫z
হেব kxdx (কাজ = বল x সরণ). তাহেল 0 হেত z পয সড়ােত কােজর পিরমাণ 0 kxdx বা
2 kz .
1 2

তাহেল আমরা আমােদর েয়াজনীয় সব ফমুলা জািন। এখন আমােদর কাজ িকছু equation দাঁড়
করােনা। েতই বেলিছ শি র ংস নই। তরাং একদম েত যখন লাকিট ি েজর উপের িছল
তখন তার potential energy এর পিরমাণ িছল wgs. যেহতু স তখন ি র অব ােন িছল তাই
তার kinetic energy 0. তরাং েত মাট energy wgs.
এখন মেন কর স লাফ িদল এবং x দূর অিত ম কের ফলল। এই অব ায় তার potential
energy হেব wg(s − x). িক kinetic energy? এটা তার বেগর উপর িনভর কের, ধরলাম তার
বগ v, তাহেল kinetic energy হেব 21 wv 2 . আর bungee দিড়র potential energy? যিদ
x ≤ l হয় তাহেল িক দিড়র potential energy 0. কারণ এখেনা দিড় তার সাম অব ায় যায়
নাই, সাম অব া হেত দূের যাওয়া তা দূেরর কথা। তরাং এই ে আমােদর শি র িনত তা সূ
বেল wgs − wg(s − x) = 12 wv 2 কারণ আমােদর potential energy ত যই পিরমাণ পিরবতন
হেয়েছ তা স ূণ kinetic energy ত পা িরত হেয়েছ, দিড়র potential energy ত পিরণত
হয় নাই। এখন যিদ s ≤ l হয়, অথাৎ দিড়র দঘ যিদ ি েজর উ তার চেয় বড় হয় তাহেল আমরা
এই সূ হেত v এর মান বর করেত পাির (x = s বিসেয়)। এবং v এর মান 10 এর সােথ তুলনা
কের দখেবা য লাকটা মের যায় নািক ভালভােব মািটেত পৗঁেছ।
এখন যিদ x > l হয় তাহেল? এবার তাহেল দিড়র potential energy আেছ। সাম অব া
থেক এিট x − l দূরে আেছ। তরাং এর potential energy হেব 12 k(x − l)2 . অথাৎ আমােদর
equation হেব wgs − wg(s − x) = 12 wv 2 + 12 k(x − l)2 . এখন িক করেব? এই সমীকরেণ
x = s বিসেয় v বর করেব? না। তার আেগ দখেত হেব দিড় আেদৗ মািটেত পৗঁছায় িকনা। যিদ
দিড় মািটেত না পৗঁছায় তাহেল মািটেত পৗঁছানর আেগই কাথাও থেক স ফরত িগেয়েছ। িঠক
সই জায়গােত সই মুহূেত v = 0 হেয় গেছ। তাই উপেরর equation এ v = 0 বিসেয় x বর
কর। যিদ দেখা য x < s এর জ সমাধান আেছ তার মােন স মািট েশর আেগই িফের গেছ।
আর নাহেল মািট শ কেরেছ। যিদ মািট শ কের তাহেল x = s বিসেয় v এর মান বর কের
ফল।

LOJ 1278 Sum of Consecutive Integers


সমস া: একিট পূণসংখ া N দওয়া থাকেব (1 ≤ N ≤ 1014 ). বলেত হেব N ক কত ভােব
একািধক ধনা ক িমক পূণসংখ ার (consecutive positive integers) যাগফল িহসােব কাশ

৬৩
করা যায়। যমন N = 15 ক আমরা িতনভােব কাশ করেত পাির 1 + 2 + 3 + 4 + 5, 4 + 5 + 6
এবং 7 + 8. Test case সংখ া 200 িট।
সমাধান: এধরেনর সম া িল সমাধান করা খুব একটা কিঠন না। যা করেত হয় তাহেলা এেক ফমুলার
আকাের িলখেত হেব এরপর সই ফমুলা কতভােব সমাধান করা যায় তা দখেত হেব। যমন এই
সম ােত আমরা ধরেত পাির আমােদর িসিরেজর র সংখ া a আর মাট n িট সংখ া আেছ সই
িসিরেজ। তাহেল আমােদর িসিরজ টা হেব a, a + 1, . . . (a + n − 1). এেদর যাগফল হেব N .
আর শত মেত n > 1 এবং a > 0 হেত হেব। এই িসিরেজর সংখ া িলেক∑যাগ করেল কত হেব?
n(2a+n−1) n−1
2 . িবিভ ভােব এই যাগফল বর করা যায়। একিট উপায় হেলা i=0 a + i তেব সহজ
উপায় হেলা গাউেসর প িত ব বহার করা। এ িনেয় এর আেগর বইেয় আেলাচনা হেয়েছ তেব যিদ
কউ না জেন থােকা নেট দেখ িনেত পােরা। যাই হাক, তাহেল এই যাগফেলর মান হেলা N .
এর মােন আমরা িলখেত পাির n(2a+n−1)2 = N বা n(2a + n − 1) = 2N . আমরা N জািন
িক a বা n জািন না। আমােদর ল হেলা কত িল valid a ও n এর মান পাওয়া যােব তা বর
করা। এই ফমুলা থেক একিট িজিনস পির ার য n হেব 2N এর একিট ণনীয়ক। আর িক িক
বুঝা যায়? যেহতু আমােদর ডান পাশ একিট জাড় সংখ া তরাং আমােদর বাম িদেকর িট factor
এর একিটেক অব ই জাড় হেত হেব। িক একটু খয়াল করেল তুিম আরও িকছু আিব ার করেব।
যমন মেন কর n জাড়, তাহেল 2a+n−1 অবশই িবেজাড় হেব। আবার যিদ n িবেজাড় হয় তাহেল
2a + n − 1 অব ই জাড় হেব। উদাহরণ দখা যাক, ধর N = 6. তাহেল n(2a + n − 1) = 12.
আমরা 12 ক নানা ভােব factor করেত পাির 1 × 12, 2 × 6, 3 × 4. এর মােন আমােদর n এই 6
িট সংখ ার কােনা একিট হেবই। িক কান কানিট হেত পাের? তুিম যিদ n এর মান ধর 2 তাহেল
2a + n − 1 ক হেত হেব 6 (কারণ n(2a + n − 1) = 12) আর তাহেল a = 5/2. এরকম কের
সকল n এর জ আমরা a এর মান বর করেত পাির। এবং এই মান িলর িদেক তাকােল আমরা
বুঝেত পারব কান কান মান n এর জ valid আর কান কানিট না। valid িক না কীভােব বুঝেব?
যিদ n ও a িটই পূণসংখ া হয় এবং n > 1, a ≥ 1 হয় তাহেলই সিট valid. আরও একিট উদাহরণ
দখা যাক। ধর N = 15. তাহেল n(2a + n − 1) = 30. 30 ক আমরা কত ভােব factorize
করেত পাির? 1 × 30, 2 × 15, 3 × 10, 5 × 6. তরাং n = 1, 2, 3, 5, 6, 10, 15, 30 এই 8
রকম মান হেত পাের। এর মােন িক N = 15 ত উ র 8? না। আমরা Problem Description এ
দেখিছ উ র 3. তাহেল কািহনী িক? থমত n > 1 হেত হেব। তাই 1 বাদ। এখেনা 7 িট মান বািক
আেছ। তুিম যিদ n = 10 চ া কর তাহেল দখেব 2a + n − 1 = 3 আর তাহেল a = −3. িক a
ক ধনা ক হেত হেব। এর মােন n = 10 হেত পারেব না। একই ভােব n = 6, 15, 30 হেত পারেব
না। এর মােন সমাধান 3 িট। তাহেল এই ইিট উদাহরণ থেক িক িশখেল? িশখলাম য, 2N ক
factorize করেলই হেব না। 2N এর যত factor আেছ তােদর মােঝ িকছু িকছু n হেত পারেব। িক
কারা? থমত 1 হেত পারেব না। কারণ n > 1. আর a > 0 হবার জ আমােদর িক শত পূরণ
করেত হেব? একটু িচ া করেল বুঝেব য 2a + n − 1 > n হেত হেব। কন? কারণ 2N এর একিট
factor হেলা n আর ওপর factor 2a + n − 1. যেহতু a ধনা ক তাহেল তা 2a + n − 1 > n
হেবই তাই না (কারণ a > 0 এবং integer হেল 2a − 1 > 0)? তরাং আমরা সব শেষ যা বুঝেত
পারলাম তাহেলা 2N এর কত িল divisor x আেছ যা 1 এর থেক বড়, x ও 2N /x একই সােথ
জাড় না এবং x < 2N /x১ হেত হেব। আমরা যা করেত পাির তাহেলা 2N এর িতিট divisor
িনেয় িনেয় চক করেত পাির। িক 200 িট case এর জ এই কাজ করা একটু বিশ costly হেয়
যেত পাের। এর থেক িক আরও ভাল কােনা উপায় আেছ?
এই পযােয় এেস তুিম নানা ভােব িচ া করেত পােরা। একিট উপায় হেত পাের- আমরা যিদ
restriction িলেক relax কির তাহেল িক হেব। অথবা উলটাও িচ া করেত পােরা। আমরা এেক
এেক restriction িলেক আেরাপ করেল িক হেব। সবার থেম আমােদর কােনা restriction
নই। তাই আমােদর বর করেত হেব কয়িট divisor আেছ। এর একিট ফমুলা আেছ (q1 + 1)(q2 +
1) . . . (qk + 1) যখােন 2N = pq11 pq22 . . . pqkk . এখন যই িতনিট restriction আেছ তার মােঝ
সবেচেয় কিঠন মেন হয় একিট জাড় আেরকিট িবেজাড়। িক এই ফমুলা অ সাের এিট খুব একটা
কিঠন না। যিদ p1 = 2 হয় তাহেল (q1 + 1) এর টামটা ফমুলা থেক সরােয় িদেত পারেলই হেব।
১ সমান িক হেত পারেব? যেহতু একিট জাড় আেরকিট িবেজাড় হেত হেব সেহতু আসেল িট সমান কখনই হেত পারেব
না।

৬৪
মােন আমরা 2 বােদ বািক prime িলেক সব ভােব distribute করিছ। এবার 2 িলেক একবার
বাম িদেক আেরকবার ডান িদেক িদেলই হেব। উদাহরণ দয়া যাক, মেন কর 2N = 30. তাহেল
2 িল সিরেয় িনেল থােক 15. 15 এর divisor হে 1, 3, 5, 15. এেদর সােথ 2 ন করেল িকছু
divisor পােবা (ধরা যাক এেদরেক y িদেয় কাশ করা হয়) আর না করেল িকছু (ধরা যাক এেদর x
িদেয় কাশ করা হয়)। িতিট y এর জ একিট x আেছ (x = 2N/y) আর উলেটাটাও সিত অথাৎ
িতিট x এর জ একিট y আেছ। এই x, y pair এর একিট ছাট হেব অপরিটর থেক আর সিটই
হেব আমােদর n. কবল n = 1 হেত পারেব না এিটই বািক থাকল। এটা 1 িবেয়াগ কের িনেলই
হেব। তেব N = 1 এর ে একটু সাবধান হেত হেব এই আর িক।
যমন 2N = 30 = 2×3×5. তাহেল (1+1)(1+1) = 4. তরাং মাট 4 িট odd divisor.
আর তােদর 2 িদেয় ন করেল আমরা আরও 4 িট পােবা। মাট 8 িট। এেদরেক xy আকাের িলখেল
ধু ছাট িল n হেত পারেব। তরাং 8/2 = 4 িট। এই ছাট 4 িটর মােঝ একিট হেলা 1. তাহেল
উ র 4 − 1 = 3. তরাং আমােদর উ র হেব (q2 + 1) . . . (qk + 1) − 1.

LOJ 1282 Leading and Trailing


সমস া: n এবং k দওয়া আেছ (2 ≤ n < 231 , 1 ≤ k ≤ 107 )। তামােক nk এর র 3 িডিজট
এবং শেষর 3 িডিজট ি ট করেত হেব।
সমাধান: শেষর িতন িডিজট বর করা খুব সহজ। তামােক nk mod 1000 বর করেত হেব
তাহেলই হেব (bigmod)। িক থম িতন িডিজট? এখােনই আেস log এর সৃজনশীল ব ব-
হার। একটা উদাহরণ দখা যাক মেন কর 298751919 . এেক log িনেল হেব log 298751919 =
8751919 log 29 = 1.27987888233738 × 107 . যিদও যেকােনা base এর log িনেলই হয়
িক আমরা এখােন 10 base log িনেয়িছ। এই log এর মান দেখ িক বুঝা যায়? এভােব িচ া করেল
মেন হয় বুঝা কিঠন হেয় যােব। একটু উলেটা ভােব িচ া করা যাক। ধরা যাক র িতনিট অংক হেলা
abc. এর মােন আমরা আমােদর সংখ া nk ক িলখেত পাির 0.abc × 10d যখােন d হেলা number
of digit, আর আমরা ধু abc এই িতনিট র সংখ াই ধেরিছ। এর পেরও আরও অেনক িডিজট
আেছ যটা আপাতত আমরা consider করিছ না, িক ব াপারটা মাথায় রােখা। এখন যিদ এর log
নাও তাহেল হেব log (0.abc × 10d ) = log 0.abc + d. 0 আর 1 এর মােঝর যেকােনা সংখ ােক
log করেল negative সংখ া পাওয়া যায়। Negative সংখ া িনেয় িচ া করা একটু ঝােমলা। সজ-
আমরা এই equation ক একটু ঘুিরেয় িলিখ- log a.bc × 10d−1 = log a.bc + (d − 1).
এখােন থম অংশ log a.bc যা অব ই ধনা ক কারণ a.bc > 1 (a হেলা nk এর থম িডিজট,
আর থম িডিজট তা অব ই শূ হেব না তাই না?) আর a.bc < 10. তরাং আমরা বলেত
পাির 0 < log a.bc < 1. তার মােন log a.bc + (d − 1) এর দশিমেকর আেগর সংখ া বেল
d − 1 এর মান আর তার পেরর সংখ া িল হেলা log a.bc. িকছু ণ আেগর উদাহরেণ আমরা দেখ-
িছ log 298751919 = 1.27987888233738 × 107 = 12798788 + 0.8233738 . . .. এ থেক
আমরা বুঝেত পারিছ য 298751919 ত মাট 12798789 িট িডিজট আেছ। আর log a.bc . . . =
0.8233738 . . .. তাহেল আমরা log nk হেত এর floor বাদ িদেলই আমরা log a.bc . . . পেয়
যাব। িক আমােদর দরকার থম িতনিট িডিজট। সজ আমরা িদেক 10 এর power িনব,
a.bc . . . = 100.8233738... = 6.6584605 . . .. এর মােন আমােদর থম িতন িডিজট 665. িব-
াস হে না? তামরা চাইেল wolframalpha.com বা python এ িহসাব কের দখেত পােরা
298751919 এর আসল মান কত। বা চাইেল একিট bigint এর কাড c++ বা java ত িলেখ ফলেত
পােরা।

LOJ 1289 LCM from 1 to n


সমস া: মাট 10,000 িট case থাকেত পাের। তামােক n দওয়া আেছ 1 ≤ n ≤ 108 ,
lcm(1, 2, . . . n) বর করেত হেব। যেহতু উ র অেনক বড় হেব তাই উ রিট 232 এর mod এ
িদেত হেব।

৬৫
সমাধান: উ র 232 এর mod এ িদেত হেব, তাই আমরা যিদ সব িহসাব unsigned int এ কির
তাহেল mod আপনা আপিনই হেয় যােব।
আশা কির তামরা lcm বর করার নানা উপায় জান। িচ া কর এর মােঝ কান প িতিট এখােন
কােজ দেব। LCM বর করার একিট উপায় হেলা িতিট াইম িনেয় দখা য তার সেবা কান
power আমােদর দ সংখ ার কােনা না কােনা একিট সংখ ােক ভাগ কের। আমােদর সম ায়
আমােদরেক 1 হেত n পয সব িল সংখ া দওয়া আেছ। আমরা যিদ 1 হেত n পয িতিট prime
এর জ বর করেত পাির সই াইেমর সেবা কান power িট n এর সমান বা ছাট, তাহেলই
আমরা lcm এ সই prime এর power পেয় যাব। যমন n যিদ 15 হয় আর আমরা যিদ 2 িনেয়
মাথা ব াথা কির তাহেল 2 এর সেবা power যা খুব জাড় n সটা হেব 23 = 8, কারণ 24 = 16
িক 15 এর থেক বড়। তরাং আমােদর lcm এ 2 এর power হেব 3. িক িত case এ 108
পয সব prime িনেয় িনেয় এই চক করা খুবই সময় সােপ ব াপার। কারণ আমােদর case আেছ
10,000 িট। তাহেল উপায় িক?
মােঝ মােঝ খুব ভাল উপায় বর করার থেক বতমান প িতেক optimize করেত √ চাওয়া টা
পারবা য আসেল n এর থেক
বুি মােনর মত কাজ হয়। যমন এখােন, একটু িচ া করেল বুঝেত √
বড় াইম িলর খুব জাড় 1 power থাকেব। তাই আমরা যিদ n এর থেক বড় এবং সেবা
√ পয
n াইম িলর ণফল সহেজ এবং কম সমেয় বর করেত পারতাম তাহেল িত case এ
n সময় লাগত, যা ac পাবার জ যেথ । এই ে আমরা square root decomposition
প িত ব বহার করেত পাির। 1 হেত 108 পয সকল াইম বর কের তােদরেক square root
segment এ ভাগ কের √ িত segment এর ণফল বর কের রােখা। তাহেলই তামরা িতিট n
এর জ খুব সহেজ n হেত n পয prime িলর ণফল বর কের ফলেত পারেব। Square
root decomposition না জানেল তা বই আর নট আেছই।

LOJ 1236 Pairs Forming LCM


সমস া: মাট 200 িট case থাকেত পাের। তামােক n দওয়া আেছ 1 ≤ n ≤ 1014 , বলেত হেব
কত িল i এবং j আেছ যন lcm(i, j) = n হয় যখােন 1 ≤ i ≤ j ≤ n.
সমাধান: মেন কর n ক আমরা prime factorization করলাম pq11 pq22 . . .. তাহেল িত px এর
জ i এবং j ত px এর সেবা power হেত পারেব qx . ধু তাই না, i বা j এর কােনা একিটেত qx
power থাকেতই হেব। যিদ এই শষ restriction িট না থাকত তাহেল i বা j ত power 0, 1, . . . qx
এর কােনা একিট হেত পারত। অথাৎ i ত power হেত পারত qx + 1 রকম, j তও তাই। তরাং
আমােদর মাট (qx + 1)(qx + 1) রকেমর power এর combination হেত পারত। িক শষ
restriction বলেছ তােদর একিটেক qx হেতই হেব। ধরা যাক i ত এই qx power আেছ আর j ত
নাই, তাহেল j এর power হেত পারেব 0, 1, . . . qx − 1 এই qx রকম, একই ভােব j ত qx power
িক i ত না, তা হেত পাের qx ভােব। i ও j িটেতই power qx এিট হেত পাের 1 ভােব। তরাং
মাট 2qx + 1 ভােব এই power থাকেত পাের। আমরা যিদ িতিট prime এর power এর জ
এই সংখ া বর কের ন করেত পাির তাহেল আমরা সকল i ও j এর সংখ া বর কের ফলেত পারব।
তেব এখােন একটা সম া আেছ। আমােদর সম ায় বেলিছল i ≤ j হেত হেব। িক আমােদর এই
counting তা মােন না। সিট মানেত হেল িক করেত হেব সটা মেন হয় তামরা িনেজরাই বর কের
ফলেত পারেব। যিদ না পার, তাহেল কাগেজ কলেম বর কের দখ এই ই count অথাৎ আমােদর
আেলািচত count আর আসল উ র এর মােঝ পাথক কমন।

LOJ 1027 A Dangerous Maze


সমস া: একিট maze এ মাট n িট দরজা আেছ (সেবা 100 িট)। িতিট দরজার জ একিট
সংখ া আেছ ai . যিদ ai ধনা ক হয় এর মােন হেলা এই দরজা িনবাচন করেল তুিম এই maze
হেত ai সময় পর বর হেয় যােব। আর যিদ ai ঋণা ক হয় তাহেল তামােক abs(ai ) সময় পর
আবােরা এই maze এ ফরত আসেত হেব িক তখন ৃিত শি refresh কের দওয়া হেব, অথাৎ

৬৬
এর আেগ কান কান দরজায় িগেয়িছেল তা তামার আর মেন থাকেব না। িতবার তুিম randomly
দরজা িনবাচন করেব। তামােক বলেত হেব এই maze হেত ব েত expected কত সময় লাগেব।
যিদ এই maze হেত বর হওয়া স ব না হয় তাহেল impossible ি ট কর।

সমাধান: যিদ কােনা দরজার জ ই ai ধনা ক না হয় তাহেল তা এই maze হেত বর হওয়া


স ব না।
এখন মেন কর আমরা দরজা িলেক ই ভােগ ভাগ করলাম। এক ভােগ আেছ ai ধনা ক িল
ধরা যাক এরা হেলা x (অথাৎ দরজা িল হেব x1 , x2 . . . এরকম)। আর অ ভােগ আেছ ai ঋণা ক
দরজা িল যােদর আমরা y িদেয় িচনব। ধরা যাক maze হেত বর হেত আমােদর expected সময়
লােগ E. আমরা randomly একিট দরজা পছ করলাম। কােনা একিট দরজা িনবাচন করার
probability হেব 1/n. এখন যিদ আমরা xi দরজা পছ কির তাহেল এই maze হেত বর হেত
সময় লাগেব xi . আর যিদ yi দরজা পছ কির তাহেল সময় লাগেব yi + E. কন? কারণ yi সময়
পর আমরা maze এ িফের আসব, এর পর আমােদর expected সময় লাগেব E. তাহেল আমরা E
সমান িলখেত পাির n1 (x1 + x2 + . . .) + n1 (y1 + E + y2 + E + . . .). যিদ এখেনা না বুেঝা
তাহেল এভােব বুঝার চ া কর- আমরা randomly একিট দরজা িনবাচন করব। এিট xi হেল সময়
লাগেব xi আর যিদ yi হয় তাহেল yi সময় তা লাগেবই সই সােথ E সময় লাগেব কারণ আমরা
পুেরা েসস নতুন কের করিছ। তরাং িতিট দরজার জ কত সময় লাগেব তােক যিদ আমরা
সই দরজা িনবাচন করার স াব তা িদেয় ন কের তােদর যাগ কির তাহেলই আমরা আমােদর
expected value E পােবা। উপেরর সমীকরেণ E এর মান সমাধান করেলই আমরা আমােদর
উ র পােবা।
এই সম ায় আিম ই া কেরই িকছু mathematically incorrect কথা বেলিছ যমন xi দরজা
ত সময় লাগেব xi . িক আশা কির আমার মূল উে বুঝেত পারেব, কারণ আিম যিদ দরজা বুঝােত
অ কােনা variable ব বহার করতাম বা mathematically correct ভােব বলেত চাইতাম তাহেল
মেন হয় অেনক অেনক variable এবং definition আমােক বলেত হেতা।

LOJ 1030 Discovering Gold


সমস া: একিট হােত n িট ঘর (ঘর িল 1 হেত n ারা কাশ করা হয়) পাশাপািশ আেছ। হার
িতিট ঘের িকছু সানা আেছ আর সই সানার পিরমাণ তামােক input এ বলা আেছ। তুিম েত
1 এ আছ। এই অব ায় তুিম একিট ছ া মারেব। ছ ায় 1 হেত 6 এর মােঝ কােনা একিট সংখ া
randomly পড়েব, ধরা যাক i. তখন তুিম যিদ x তম ঘের থােকা তাহেল i পড়ার পর তুিম x + i তম
ঘের যােব। যিদ x + i > n হয় তাহেল তুিম আবােরা ছ া মারেব। যত ণ না তুিম n এর ভতেরর
একিট সংখ া পাও। যিদ তুিম n এ পৗঁছােয় যাও তাহেল তামার খলা শষ। তুিম যত িল ঘের যােব
সব ঘর হেত সানা সং হ করেব। তামােক বলেত হেব এই খলায় n এ পৗঁছােল expected সানার
পিরমাণ কত। n সেবা 100 হেত পারেব।

সমাধান: ধরা যাক Ei হেলা i তম ঘর হেত কের n তম ঘের িগেয় শষ করেল expected
কত সানা পাওয়া যায় সই পিরমাণ ( সই ঘর সহ)। আমােদর বর করেত হেব E1 এর মান। মেন
কর তুিম 1 এ থাকেত একিট ছ া মারেল। তাহেল এেত 1 হেত 6 এর যেকােনা একিট পড়েত
পাের। ধরা যাক x পরল। তাহেল পেরর ঘর হেব 1 + x. এখান থেক তুিম expected E1+x
িট সানা পােব। x পড়ার স া না 1/6. এরকম কের যিদ তুিম x এর মান 1 হেত 6 সব িল
চ া কর তাহেল পােব E1 = gold[1] + 61 (E2 + E3 + . . . E7 ) এরকম কের তুিম সব Ei
এর মান বর কের ফলেত পারেব। সম া হেব যখন কােনা একিট Ei থাকেব না। যমন তুিম
En−1 এ থেক যিদ 2 ফেলা তাহেল তুিম En+1 এ যেত চাইেব। িক En+1 বেল তা িকছু
নই। সে ে িক করেব? সে ে তা তুিম ঐ ঘেরই থােকা তাই না? তার মােন তুিম আবােরা
ছ া মারেব আর সে ে তামার expected মান হেব En−1 ই। অথাৎ আমােদর equation হেব
En−1 = gold[n − 1] + 61 (En + En−1 + En−1 + . . .) ( মাট 5 িট En−1 থাকেব)। তরাং
আমরা যিদ i = n হেত 1 পয Ei এর মান বর কির তাহেলই আমােদর সম া সমাধান হেয় যােব।

৬৭
আর এখােন base case হেব En = gold[n] কারণ n তম ঘের আসেল তুিম ধু ঐ ঘেরর সানা
িনেয় খলা শষ কের দেব।

LOJ 1284 Lights inside 3D Grid


সমস া: একিট X ×Y ×Z আকােরর ি ড দওয়া আেছ। ি েডর িতিট সেল একিট লাইট আেছ যা
েত off. তুিম K বার একিট অপােরশন করেব। িত অপােরশেন তুিম ি েডর িট ঘর randomly
িনবাচন করেব। ধরা যাক এরা হেলা (x1 , y1 , z1 ) এবং (x2 , y2 , z2 ). এবার তুিম min(x1 , x2 ) ≤
x ≤ max(x1 , x2 ), min(y1 , y2 ) ≤ y ≤ max(y1 , y2 ), min(z1 , z2 ) ≤ z ≤ max(z1 , z2 )
এর জ সকল (x, y, z) এর লাইট িল toggle করেব। বলেত হেব K বার এই অপােরশন করার
পর expected কত িল বা on থাকেব। X, Y, Z এর মান সেবা 100 আর K সেবা 10,000
হেত পাের।
সমাধান: Linearity of Expectation বেল একিট কথা আেছ। এিট বেল অেনক িজিনেসর expectation
হেব িতিট িজিনেসর expectation এর যাগফল। অথাৎ যমন এই সম ােত, expected কত -
িল লাইট on থাকেব সই পিরমাণ হেব িতিট লাইট expected কতবার on থাকেব তার যাগফল।
অথাৎ আমরা ি েডর িতিট লাইেটর জ বর করব সই লাইট K িট অপােরশেনর পর expected
কতবার on থাকেব। িতিট লাইেটর জ এই সংখ া যিদ আমরা যাগ কির তাহেলই উ র পেয়
যাব।
ধরা যাক আমরা জানেত চাইিছ (x, y, z) K অপােরশন শেষ expected কত বার on থােক।
এটা বর করা আর K বার শেষ on থাকার probability বর করা একই কথা। কন? উলেটা ভােব
িচ া করেত পােরা। মেন কর K বার শেষ on থাকার probability q. তাহেল Expected কত বার
on থাকেব? q ×1+(1−q)×0 = q. তরাং আমরা K অপােরশন শেষ on থাকার probability
বর করেত চাইিছ।
ধরা যাক p হেলা ি েডর িট সল (x1 , y1 , z1 ) এবং (x2 , y2 , z2 ) িনবাচেনর probability যন
(x, y, z) িব িট min(x1 , x2 ) ≤ x ≤ max(x1 , x2 ), min(y1 , y2 ) ≤ y ≤ max(y1 , y2 ),
min(z1 , z2 ) ≤ z ≤ max(z1 , z2 ) মেন চেল। আমরা p এর মান বর করব। একটা িজিনস খয়াল
কর, আমরা িক x, y এবং z য যথা েম [min(x1 , x2 ), max(x1 , x2 )], [min(y1 , y2 ), max(y1 , y2 )],
[min(z1 , z2 ), max(z1 , z2 )] এর ভতের থাকেব তার probability আলাদা আলাদা কের বর কের
ন করেত পাির। তাহেলই আমােদর (x, y, z) িব িট আমােদর range িল মেন চলেব। তাহেল
আমােদর এখন বর করেত হেব কত probability ত আমরা x1 , x2 িনবাচন করেত পাির যন
min(x1 , x2 ) ≤ x ≤ max(x1 , x2 ) হয় দ x এর জ । এখােন "হয় না" বর করাটা সহজ
হেব। "হয় না" হেব যিদ x1 , x2 < x হয় অথবা x < x1 , x2 হয়। x এর থেক ছাট মান আেছ
x − 1 িট, আর বড় মান আেছ X − x িট। তরাং আমােদর িনবািচত x1 , x2 িটই ছাট হেব তার
probability x−11
× x−1
1
আর িটই বড় হেব তার probability X−x 1
× X−x
1
. এেদর যাগ কের
1 থেক িবেয়াগ করেলই আমরা x রে র ভতের থাকেব তার probability পেয় যাব। একই ভােব
y এবং z ভতের থাকার probability বর কের সবাইেক ন করেলই আমরা p পেয় যাব।
এখন আমােদর বর করেত হেব এই p probability এর ঘটনািট K বােরর মােঝ িবেজাড় সংখ ক
বার ঘটার probability কত। কারণ জাড় সংখ ক বার ঘটা মােন লাইট অফ থাকেব, আর িবেজাড়
সংখ ক বার ঘটা মােন লাইট∑ অন থাকেব। এবার লাগেব আমােদর binomial ∑theorem এর ান।
n ( ) n ( )
আমরা জািন (x + y)n = i=0 ni xi y n−i . আবার (−x + y)n = i=0 ni (−x)i y n−i .
∑ ( )
আমরা এই িটেক যাগ কের পাই (x + y)n + (−x + y)n = i 2 ni xi y n−i যখােন i হেলা
0 হেত n এর মােঝর সকল জাড় সংখ া। তরাং আমরা যিদ x এর পিরবেত p আর y এর পিরবেত
(1 − p) বসাই তাহেল আমরা খুব সহেজ p probability এর ঘটনা জাড় সংখ ক বার ঘটার স াবনা
পেয় যাব। তাহেল 1 হেত এই সংখ া বাদ িদেল িবেজাড় স কবার ঘটার probability ও পেয়
যাব!
আমার মেন হয় পুেরা সমাধােনর মূল অংশ েলা বলা হেয় িগেয়েছ। এখন পুেরাটু বুেঝ সমাধান
কের ফলা তামার দািয় !

৬৮
৪.১ অ শীলনী
৪.১.১ সম া
Simple
ˆ UVa 1648 Business Center ˆ LOJ 1007 Mathematically Hard
ˆ LOJ 1014 Ifter Party ˆ LOJ 1028 Trailing Zeroes (I)
ˆ LOJ 1035 Intelligent Factorial Factorization ˆ LOJ 1054 Efficient Pseudo Code

ˆ LOJ 1067 Combinations ˆ LOJ 1077 How Many Points?

ˆ LOJ 1090 Trailing Zeroes (II) ˆ LOJ 1098 A New Function

ˆ LOJ 1109 False Ordering ˆ LOJ 1163 Bank Robbery

Easy
ˆ UVa 11040 Add bricks in the wall ˆ UVa 1644 Prime Gap
ˆ UVa 1210 Sum of Consecutive Prime Numbers ˆ UVa 10539 Almost Prime Numbers
ˆ UVa 10622 Perfect Pth Powers ˆ UVa 1646 Edge Case

ˆ UVa 10886 Standard Deviation ˆ UVa 1647 Computer Transformation

ˆ UVa 11246 K-Multiple Free Set ˆ UVa 11166 Power Signs

ˆ UVa 11303 Permutation ˆ UVa 1655 Exam

ˆ LOJ 1024 Eid ˆ LOJ 1138 Trailing Zeroes (III)

ˆ LOJ 1197 Help Hanzo ˆ LOJ 1213 Fantasy of a Summation

ˆ LOJ 1214 Large Division ˆ LOJ 1259 Goldbach`s Conjecture

ˆ LOJ 1333 Grid Coloring ˆ LOJ 1336 Sigma Function

ˆ LOJ 1340 Story of Tomisu Ghost ˆ LOJ 1370 Bi-shoe and Phi-shoe

ˆ LOJ 1038 Race to 1 Again ˆ LOJ 1104 Birthday Paradox

ˆ LOJ 1151 Snakes and Ladders ˆ LOJ 1248 Dice (III)

ˆ LOJ 1256 Word Puzzle ˆ LOJ 1058 Parallelogram Counting

Medium
ˆ UVa 808 Bee Breeding ˆ UVa 294 Divisors
ˆ UVa 11526 H(n) ˆ UVa 11105 Semi-prime H-numbers
ˆ UVa 1649 Binomial coefficients ˆ UVa 10640 Planes around the World

ˆ UVa 10479 The Hendrie Sequence ˆ UVa 766 Sum of powers

ˆ UVa 12520 Square Garden ˆ UVa 12590 Guards II

ˆ UVa 1652 Fibonacci System ˆ UVa 11895 Honorary Tickets

ˆ UVa 10976 Fractions Again?! ˆ LOJ 1234 Harmonic Number

ˆ LOJ 1298 One Theorem, One Year ˆ LOJ 1318 Strange Game

ˆ LOJ 1161 Extreme GCD

৬৯
৭০
অধ ায় ৫

Bruteforce এবং Backtrack


স িকত সম া

Bruteforce এবং backtrack কােনা রকেমর smart algorithm না। বরং এিট গাধার মত
সাজা সাপটা ভােব যা করেত বেলেছ তা করা। িক তাই বেল বিশ গাধার মত করেল হেব না।
হয়েতা মােঝ মােঝ তামােক ছাট খােটা ি খািটেয় সমাধানিট সহেজ কাড করেত হেব। বা কােনা
সময় ছাট খােটা optimization কের run time ক কিমেয় আনেত হেব।

UVa 725 Division


সমস া: N দওয়া থাকেব (2 ≤ N ≤ 79). তামােক িট 5 িডিজেটর সংখ া abcde ও fghij বর
করেত হেব যােত কের fabcde
ghij = N হয় এবং এই 5 িডিজেটর িট সংখ ার 10 িট িডিজট আলাদা
আলাদা হয়। যমন N = 62 এর জ একিট উ র হেত পাের 79546
01283 .

সমাধান: যেহতু fghij একিট 5 িডিজেটর সংখ া আমরা এর জ 0 হেত 99999 পয লুপ চালােত
পাির। এরপর এেক input এর N এর সােথ ন করেল abcde বর হেয় যােব। আমরা এরপর চক
কের দখেত পাির য এই িট সংখ ার সকল িডিজট আলাদা আলাদা িকনা। যিদ হয় তাহেল এই জুিট
আমােদর একিট সমাধান।
তামরা চাইেল িকছু ছাট খােটা optimization করেত পােরা। যমন fghij এর লুপ 0 হেত না
চািলেয় 1000 হেত চালােনা। কারণ এর থেক ছাট িট সংখ ার থম িট িডিজট শূ । আবার যিদ
দেখা য N ক fghij িদেয় ন করেল সংখ ািট 99999 এর থেক বড় বা 1000 থেক ছাট হয়
তাহেল আর ক কের চক করার দরকার নই। এই সম ােত এই ধরেনর সহজ optimization
দরকার নই, তেব হয়েতা অ কােনা সম ায় দরকার হেত পাের।

UVa 11059 Maximum Product


সমস া: তামােক n িট সংখ ার একিট অ াের S1 , S2 , . . . Sn দওয়া থাকেব যখােন 1 ≤ n ≤ 18
এবং | Si |≤ 10. তামােক এর একিট continuous subarray বর করেত হেব যন তােদর
ণফল সেবা হয়।
সমাধান: n মা 18, তাই আমরা চাইেল এর সকল sub array িনবাচন কের তার element িলেক
ন করেত পাির। তেব একটা িজিনস, যেহতু অেনক িল সংখ া ন করিছ আমােদর খয়াল রাখেত
হেব ণফল যােত overflow না কের। আমােদর সংখ া িল খুব জাড় 10 হয়। 18 িট সংখ ার ণফল

৭১
তাই সেবা 1018 হেত পাের যা long long এ ধরেব। তরাং আমােদর long long এর variable
িনেয় িহসাব িনকাশ করেত হেব। int িনেয় কাজ করেল হেব না, overflow হেব।

UVa 524 Prime Ring Problem


সমস া: তামােক একিট জাড় সংখ া n দওয়া থাকেব (1 ≤ n ≤ 16). একিট সাইেকেল 1 হেত n
পয সংখ া িলেক কত ভােব সাজােনা যায় যন পাশাপািশ যেকােনা িট সংখ ার যাগফল একিট
prime হয়। যমন n = 6 এর জ 143256 একিট সমাধান।
সমাধান: আমরা সাইেকেলর েত 1 বসাই। এরপর আমােদর কাজ হেলা 2 হেত n পয n − 1 িট
সংখ া এেক এেক সাইেকেল বসােনা। আমরা এিট (n − 1)! ভােব করেত পাির। িক n = 16 এর
জ এিট হেব 15! যা একটু বিশই বড় হেয় যায়। এখােন একটা িজিনস ল িনয়। পাশাপািশ িট
সংখ া বসােল prime পাওয়া যােব এরকম ঘটনা খুব একটা ঘটেব না। তাই আমরা যা করেত পাির
তাহেলা সাইেকেল আমরা যখন সংখ া বসাব তখনই নতুন সংখ া আর তার পােশর সংখ া যাগ কের
দখেত পাির য তােদর যাগফল াইম হয় িকনা। না হেল আর এ েনার দরকার নই। আর হেল
পেরর জায়গা িনেয় আমরা মাথা ব াথা করব। অথাৎ backtrack এর মত কের সাইেকেল আমরা
এেক এেক সংখ া বসােত থাকব। মেন কর আমােদর backtrack এর ফাংশন হল bktk(at). এর
মােন আমরা এখন at তম ােন সংখ া বসােনার চ া করব। আমরা একিট অ াের রাখব যখােন 0-1
ব বহার কের িলেখ রাখব কান সংখ া ব বহার করা হেয়েছ আর কান সংখ া ব বহার করা হয় নাই।
তরাং আমরা at এ এেস সই অ ােরর উপর িদেয় লুপ চািলেয় দখব য কান কান সংখ া ব বহার
করা হয় নাই। তােদরেক at এ বসােনার চ া করব। চ া করা মােন দখব য এই সংখ া এর আেগর
সংখ ার সােথ যাগ করেল যাগফল াইম হয় িকনা। না হেল তা আবার আমরা পেরর সংখ া িনেয়
চ া করব। আর যিদ াইম হয় তাহেল অ ােরেত িলেখ রাখব য এই সংখ া ব বহার করা হেয় িগেয়েছ
এবং bktk(at + 1) কল করব। একটা িজিনস তা হল, bktk(at + 1) এর পেরর লাইেন, অথাৎ
bktk(at + 1) হেত িফের এেস তামােক যই সংখ া ব বহার কেরছ সই সংখ ােক অ ােরেত ব বহার
করা হয় নাই বলেত হেব, অথাৎ bktk(at + 1) কল করার আেগ যিদ আমরা used[i] = 1 কের
থািক তাহেল ফাংশন হেত িফের আমােদরেক used[i] = 0 করেত হেব। আর শষ সংখ া বসােনার
সময় তার সােথ র সংখ া যাগ কের দখেত ভুেল যও না।

UVa 12325 Zombie's Treasure Chest


সমস া: একিট সানা দানার দাকােন িগেয় দখেল সখােন ই ধরেনর র আেছ। থম ধরেনর
রে র িতিটর ওজন s1 এবং িতিটর মূল v1 . ি তীয় ধরেনর রে র ওজন s2 এবং মূল v2 . িত
ধরেনর র অসংখ সংখ ক আেছ। তামার কােছ মাট n ওজেনর র নওয়া যােব এরকম একিট
থেল আেছ। তামােক বলেত হেব সবেচেয় কত বিশ মূেল র র তামার থেল ত িনেত পারেব।
n, s1 , s2 , v1 , v2 িতিট 32 bit এর integer.
সমাধান: এর সমাধানিট আমার কােছ বশ interesting লেগেছ। ধরা যাক s1 > s2 . এখন িট

case ক না কর। থম case, s√ 1 > n. এই ে √ থম িজিনস তুিম n/s1 এর বিশ বার
িনেত পারেব না আর যেহতু s1 > n √ তাই তুিম আসেল n এর বিশ বার থম র িনেত পারেব
না। কারণ s1 √
ওজেনর িজিনস তুিম যিদ n√এর থেক বিশ বার যিদ নাও তাহেল এই িজিনস িলর
ওজন হেব s1 n এর বিশ। যেহতু s1 > n সেহতু মাট িজিনেসর ওজন n এর থেক বিশ হেয়
যায়। িক তা তা স ব না। তরাং তুিম খুব সহেজই থম র কয়িট নেব তার উপর লুপ চালােত

পারেব (সেবা n িট িনেত পারেব)। ধরা যাক i িট নেব। তাহেল বািক থাকেব x = n − is1
পিরমাণ জায়গা। এই জায়গায়√তুিম ি তীয় র সেবা x/s2 িট িনেত পারেব।
সম া হেলা যখন s1 ≤ n হেব। এর মােন s2 ও িক ছাট। এই ে একিট িবধা আেছ।
s2 সংখ ক থম রে র ওজন আর s1 সংখ ক ি তীয় রে র ওজন সমান (উভয়ই s1 s2 )। তুিম কানিট
নেব? যার িত কিজ মুল বিশ অথাৎ যার vi /si বিশ তাই না? ধরা যাক v1 /s1 > v2 /s2 . এর

৭২
মােন তুিম চ া করেব থম ধরেনর র বিশ বিশ কের িনেত। অথাৎ তুিম ি তীয় র িট কখনই s1
এর সমান বা এর থেক বিশ সংখ√ক নেব না। িনেল সই s1 িট ি তীয় রে র পিরবেত s2 িট থম
র িনেত পারেব। যেহতু s1 ≤ n তরাং তুিম ি তীয় র 0 হেত s1 − 1 েত ক ভােব নবার
চ া করেব। আর বািক অংশটু থম র িদেয় ভরােনার চ া করেব। এভােব সকল কার ভােব
চ া করেল তুিম optimal উপায় পেয় যােব।

UVa 1343 The Rotation Game


সমস া: এই সম ায় িচ ৫.১ এর মত একিট বাড দওয়া থাকেব। বাডিটেত 1, 2 এবং 3 সংখ া-
িল মাট 8 বার কের থাকেব ( তরাং মাট 24 িট সংখ া)। তুিম দ বােড 8 রকেমর অপােরশন
করেত পারেব। এ িল িচে A, B . . . H িদেয় কাশ করা হেয়েছ। অথাৎ িতিট অপােরশন হেলা
বড় row বা column ক cyclically উপের-িনেচ বা ডােন-বােম ঘুরান। যমন িচে র থম বাডেক
A বরাবর ঘুরােল ি তীয় বাড পাওয়া যায়, আবার ি তীয় বাডেক C বরাবর ঘুরােল তৃতীয় বাড
পাওয়া যায়। তামােক ঘুিরেয় ঘুিরেয় এমন অব ােন আনেত হেব যন মােঝর 8 িট ঘের একই সংখ া
থােক। যমন িতন না ার বােড মােঝর 8 িট ঘের 2 আেছ। তামােক এই কাজ সবেচেয় কম সং-
খ ক অপােরশন ব বহার কের করেত হেব। এরকম সমাধান একািধক থাকেল lexicographically
smallest উ রিট িদেত হেব।

নকশা ৫.১: UVa 1343 এর বাড

সমাধান: িন য় এসম া নানা ভােব সমাধান করা যায়। আমরা এখােন IDA* ব বহার করব। IDA*
এর পূণ প হেলা iterative deepening A*. ভাগ বশত আিম আমার " া ািমং কে ট " বইেয়
IDA* স েক িকছুই িলিখ নাই। তাই এখােন এ িনেয় িকছু িলখিছ।
IDA* বুঝার আেগ আমােদর বুঝেত হেব searching িক। মেন কর আমােদর এই সম ায়
র ান (state) একিট বাড। এর সােথ িকছু অপােরশন দওয়া থাকেব। কােনা এক ােন যিদ
কােনা অপােরশন কর তাহেল তুিম আেরক ােন যােব। আমােদর ল হেলা সবেচেয় কম অপােরশন
ব বহার কের আমােদর কাি ত লে পৗঁছান। এিটই হেলা searching. অথাৎ দ অপােরশন
সমূহ ব বহার কের র ান হেত লে সবেচেয় কম খরেচ পৗঁছানই হেলা searching (আসেল
সবেচেয় কম খরেচ পৗঁছান সবসময় ল থােক না। িক আমােদর আেলাচনার িবধার জ আমরা
ধের নই সবেচেয় কম খরেচ পৗঁছােত চাই)।
যিদ উপেরর প ারা ভাল কের পের থােকা তাহেল দখেব এখােন িতনিট িজিনস আেছ। এক- র
ান, ই- ল , িতন- অপােরশন। একটা িজিনস, ল িক একটা িনিদ ান নাও হেত পাের। এটা
হে একিট rule যা িদেয় তুিম বুঝেত পারেব য তুিম তামার লে পৗঁেছ িগেয়ছ। যমন এই
সম ােত ল িক নানা রকম হেত পাের। তেব ল বুঝার rule হেলা মােঝর 8 িট ঘের একই
সংখ া থাকা। অ ঘর িলেত যা খুিশ থা ক তা িনেয় মাথা ব াথা নই।
তাহেল এই searching সম া সমাধান করবা কীভােব। একিট উপায় হেত পাের bfs বা dfs
কের সমাধান করা। িক আমরা dfs কের সমাধান করেত পারব না। কন? মেন কর A হেত B ত
যাওয়া যায় (এখােন A, B, C ইত ািদেক state িহসােব িচ া কর, এই সম ার সােথ এেদর কােনা
স ক নই)। আবার A হেত C হেয় B ত যাওয়া যায়। এখন dfs তা চাইেল A-C-B এই রা ােত

৭৩
B ত যেত পাের ফেল A-B য ছাট রা া আেছ সটা আিব ার হেব না। তরাং dfs িদেয় আসেল
সবেচেয় ছাট রা া বর করা স ব হয় না। তাহেল িক আমরা bfs িদেয় সমাধান করেত পাির? হয়েতা
হেব। িক সম া হেলা আমােদর state সমূহ save কের রাখেত হেব তােদর visited মাক করেত
হেব। এসব করেত হয়েতা অেনক সময় লাগেব ( ােফ সাচ করেত সময় লাগেব না, সময় লাগেব
state মাক ও save করেত) এবং অেনক মমিরও লাগেব।
এই সম ােক দূর করার জ আেছ IDA* search. IDA* search এ তমন কােনা মমির
লােগ না, state ও মাক করেত হয় না। িবিনমেয় search করেত একটু বিশ সময় লােগ এটাই
সম া। তামরা যিদ এখেনা backtracking িনেয় একদমই না পেড় থােকা তাহেল তামরা একটু
পেড় আেসা। চাইেল নট বা আমার আেগর বইেয় দখেত পােরা।
IDA* বলার আেগ আিম তামােদর ID-DFS িনেয় বলব। এর পূণ প হেলা iterative deepening
depth first search. মেন কর আমােদর াফিট unweighted. আমােদর dfs এর বািহের একিট
depthLimit এর লুপ থাকেব। থেম এই depthLimit এর মান হেব 1. আমরা যটা করব তাহল
একটা dfs চালাব যার depth এর limit হেব depthLimit. অথাৎ dfs করার সময় আমরা এর
বিশ depth এ যেত পারব না। আরও িব ািরত বলেল বলা যায়, সাধারণত আমােদর dfs ফাংশেনর
parameter এ থােক x অথাৎ বতমান নাড। এর সােথ সােথ এখন আরও িট parameter থাকেব,
current depth এবং max depth. িতবার dfs কল করার সময় আমরা current depth এর
মান এক কের বািড়েয় দব। আর যিদ কখেনা দিখ সই মান max depth এর থেকও বড় হেয় িগ-
য়েছ তাহেল আর না এিগেয় ফরত আসব। এর ফেল লাভ িক হে ? লাভ হে য আমরা source
নাড হেত target এ shortest path এ যেত পারব। কন? কারণ থেম আমরা 1 max depth
িদেয় চ া করব, এই ে যিদ dfs আমােদর target এ পৗঁছায় তাহেল আমরা জানব 1 উ র। যিদ
তা না হয় তাহেল max depth ক বািড়েয় 2 করব এবং আবােরা dfs কল করব, এবার target এ
পৗঁছােত পারেল 2 উ র হেব। না হেল আবার বািড়েয় 3 কের dfs. এভােব চলেত থাকেব যত ণ না
আমরা target পাি । খয়াল কর এই dfs এ আমরা visited বেল িকছু রাখিছ না বা রাখার দরকার
নই। তাহেল এভােব ID-DFS এর মাধ েম আমরা source হেত target এর shortest path বর
কের ফলেত পারব। সম া িক তা তা বুঝেতই পারছ, একই state বার বার িভিজট করিছ, সময়
বিশ লাগেছ।
এখন চল আমরা আমােদর সম ায় একটু সমেয়র জ ফরত যাই। আমরা চাইেল আমােদর
সম াও ID-DFS এর মাধ েম সমাধান করেত পাির। যিদও তােত অেনক বিশ সময় লাগেব। িক
সমাধান তা হেব। হেলা আমরা আমােদর সমাধানেক কীভােব improve করেত পাির। উ র-
heuristic. এটা আবার িক? এিট এমন একিট ফাংশন যােক যিদ তুিম একিট state দাও তাহেল
এিট তামােক বলেব এই state হেত সমাধােন পৗঁছােত কমপে আরও কত move লাগেব। এই
"আরও কত move লাগেব" এই িজিনেসর যই heuristic যত ভাল approximation িদেত পারেব
সই heuristic তত ভাল। যমন আমােদর সম ার একিট heuristic বর করা যাক। আমােদর
সম ায় মােঝর 8 িট ঘেরর মােঝ ধরা যাক x িটেত 1 নই। তাহেল আমরা বলেত পাির অ ত x
move লাগেব সব িলেত 1 হেত। এরকম কের আমরা বর করেত পাির সব িল 2 এবং সব িল 3
হেত অ ত কত cost লাগেব। এই িতনিট সংখ ার মােঝ সবেচেয় কমিটই আমােদর heuristic এর
মান হেত পাের। কন? কারণ এক move িদেল মােঝর একিট মা ঘেরই তামার কাি ত সংখ া
আসেত পাের তাই না? (ব াপারটা ওত সহজ না, তাই একটু িনেজ িনেজ িচ া কের দেখা)
এখন হেলা আমরা কীভােব এই heuristic ব বহার করেত পাির। আমরা আমােদর ID-
DFS এ িফের যাই। যিদ আমােদর কােছ এরকম কােনা heuristic থােক তাহেল আমরা িকছু
optimization করেত পাির। মেন কর আমরা আিছ current depth এ আর আমােদর depth এর
সেবা িলিমট হেলা max depth. এখন আমরা আমােদর state এর heuristic মান বর করব ধরা
যাক h. যিদ দিখ current depth আর h এর যাগফল max depth ক ছািড়েয় িগেয়েছ তাহেল
তা আর এই পেথ িগেয় লাভ নই। তাই dfs আর না এিগেয় ফরত যাব। এখােন িক হেয়েছ খয়াল
কেরছ? তুিম জােনা বতমান state এ আসেত তামার কত ধাপ লেগেছ। আর তুিম heuristic
থেক বর কেরছ য আর কত ধাপ অব ই লাগেবই (heuristic সবসময় তামােক "at least"
মান দয়)। এ থেক তুিম খুব সহেজই বর করেত পােরা য এই রা া ধের গেল তামার target এ
পৗঁছােত কত ধাপ লাগেবই। এখন যিদ দেখা এই ধাপ সংখ া তামার max depth কও ছািড়েয়

৭৪
যায় তাহেল তা আর এই পেথ িগেয় লাভ নই তাই না? এটাই IDA*১ । তুিম চাইেল িকছু ণ আেগ
বলা heuristic ক কােজ লািগেয় আমােদর এই সম ািট সমাধান কের ফলেত পােরা িঠক আিম
যভােব বললাম সভােব। খুব সহজ কাড।
িকছু ণ আেগ বললাম িঠক এটাই IDA* না আরও িকছু আেছ। এই আরও িকছু িক? তুিম চাইেল
একটু িচ া করেত পােরা আমােদর সমাধােন আর কাথায় উ িত করা যায়। খুব সহজ উ িত িক ।
মেন কর আমােদর দওয়া max depth এর মােঝ সমাধান নই। তাহেল আমরা িক করিছলাম?
max depth ক এক বাড়াি লাম। িক আমরা চাইেল এক না বািড়েয় একটু বিশ বাড়ােত পাির।
আমরা তা অেনক অেনক নাড হেত current depth আর h এর যাগফল দেখ ফরত এেসিছ তাই
না? আমরা িক চাইেল এেদর মােঝ সবেচেয় ছাটিটেক আমােদর পরবতী max depth িহসােব
set করেত পাির। অথাৎ, আমরা max depth এ িলিমট থাকা অব ায় যই সব নাড হেত ফরত
এেসিছ সইসব নাড হেত আমরা target এ পৗঁছানর একটা estimate পেয়িছলাম। সই সব
estimate এর মােঝ সবেচেয় ছাটিট আমরা পেরর max depth িহসােব িনেত পাির। কারণ অ
কােনা উপােয় তা এর থেক কেম target এ যাওয়া স ব না তাই না? তাই আমরা চাখ ব
কের max depth না বািড়েয়, এরকম বুি কের max depth ক যিদ বাড়াই তাহেলই আমােদর
algorithm িট IDA* হেয় যােব। তামরা চাইেল wiki ত IDA* এর pseudocode দেখ িনেত
পােরা বুঝার িবধার জ ।

UVa 1374 Power Calculus


সমস া: মেন কর তামােক x দওয়া আেছ, তামােক xn বর করেত হেব। এই কাজ তুিম নানা ভােব
করেত পােরা। যমন n = 7 এর ে , তুিম থেম x2 বর করেত পােরা x ক x এর সােথ ন
কের। x2 ক x2 এর সােথই ন কের x4 বর করেত পােরা। এর পর এেক x2 এবং সবেশেষ x
এর সােথ ন কের x7 বর করেত পােরা। এর ফেল মাট 4 িট ন করা লাগেলা। তা না কের তুিম
চাইেল, x4 বর করার পর আবােরা এেক িনেজর সােথ ন কের x8 বর করেত পােরা আর এেক x
িদেয় ভাগ কের x7 বর করেত পােরা। এে ে ও তামার 4 িট ন-ভাগ করেত হে । তামােক n
দওয়া থাকেব (1 ≤ n ≤ 1000). বলেত হেব সবেচেয় কম কতিট ন ভাগ ব বহার কের তুিম xn
বর করেত পারেব।
সমাধান: থম কথা এিট dp না। কারণ তুিম এখন xa ত আছ এটাই ধু পূণ নয়। এিট তুিম
কীভােব পেয়ছ, আর িক িক power তুিম জােনা সটাও পূণ। যমন মেন কর তুিম x100 বর
করার পেথ যিদ x25 বর কের থােকা তাহেল তুিম একবার ভাগ কেরই x75 বর করেত পারেব। িক
তুিম যিদ x25 না বর কের থােকা, তাহেল হয়েতা একটু কিঠন হেয় যােব x75 বর করার জ ।
এই সম া সমাধােনর জ তামােক backtrack করেত হেব। এজ আমােদর িকছু optimization
এবং heuristic বর করেত হেব। মেন কর এখন পয তুিম xa বর কেরছ সবেচেয় বড়। আর তুিম
xn চাও। যিদ কউ িজ াসা কের আর কত move লাগেবই। তুিম িক করেব? একটা উপায় হেলা
এক move পর খুব জাড় x2a পােব, ই move পর x4a এরকম কের b move পর খুব জাড়
b
x2 a পাবাই। এখন যিদ িহসাব কের দেখা xn পেত হেল কমপে আর কত move লাগেব অথাৎ
সবেচেয় ছাট কান b এর জ 2b a ≥ n হেব তাহেল সই মানেকই তামরা heuristic িহসােব
ধরেত পােরা।
আেরকিট বশ পূণ optimization আেছ। আর তাহেলা সবসময় আেগর move এ যই
x পাওয়া িগেয়েছ তােক ব বহার কের সমাধান পাওয়া যােব। অথাৎ আেগর move এ তুিম x10
a

পেয়ছ, তুিম এই move এ সিট ব বহার করেব। এটা কমন জািন। এর মাণ িক? এমনও তা
হেত পাের য অ িট power ক ন ভাগ কের যা পাওয়া যায় তার সােথ পের হয়েতা x10 ক
ন ভাগ করেত হেব। হেত পাের। তাহেল িক করা যায়? একিট উপায় হল বেস বেস মাণ করা য
আসেলই এই optimization সিঠক। অথবা তুিম 1 হেত 1000 পয এই optimization সহ এবং
বােদ ই ভােবই উ র বর কের দেখা। যিদ দেখা য সব ে ই উ র একই আেস, তার মােন
ধের িনেত পােরা য তামার optimization িঠক আেছ।
১ উম... িঠক এটাই না, আরও একটু আেছ, পের বলিছ

৭৫
মেন হয় এই ই optimization / heuristic ব বহার কের IDA* বা backtrack করেল
accepted হেয় যােব।

UVa 1602 Lattice Animals


সমস া: তামরা িক tetris খেলছ? যিদ tetris খেল না থােকা তাহেল এই সম ািট ছিব ছাড়া কম
কথায় বুঝােনা একটু কিঠন হেয় যােব। তাই তামরা সাইেট পেড় িনেত পােরা। n সাইেজর polymino
হল n িট বগ পাশাপািশ বিসেয় একিট connected িজিনস বানান। আমরা িট polymino ক একই
বলব যিদ একিট থেক আেরকিট ঘুিরেয় বা flip (mirror) কের বা translate কের পাওয়া যায়। যমন
n = 3 এর জ ই রকম polymino পাওয়া যায়। িতনিট বগ পাশাপািশ, অথবা L এর মত কের
িতনিট বগ লাগান। আর অ িল হয় rotate কের বা flip কের বানােনা স ব। তামােক n, w এবং
h দওয়া আেছ বলেত হেব w × h সাইেজর একিট grid এ কত িল n সাইেজর িভ polymino
পাওয়া স ব। (1 ≤ n ≤ 10, 1 ≤ w, h ≤ n)
সমাধান: আেগর িট সম া হেত এই সম ার মুল পাথক হেলা আেগর িট সম ায় একিট সমাধান
বর করেত বলা হেয়েছ বা shortest path এ সমাধান বর করেত বলা হেয়েছ। িক এখােন মাট
কত িল সমাধান আেছ তা বর করেত বেলেছ। তরাং এে ে IDA* বা BFS/DFS কােজ আসেব
না। হয় আমােদর dp বা mathematically counting কের বর করেত হেব, নাহেল backtrack
কের বর করেত হেব। এে ে আসেল mathematical ভােব counting করা মেন হয় না খুব একটা
সহজ হেব। আর তাছাড়া n এর সাইজও কম আেছ। তাই এখােন backtrack বা simulation জাতীয়
প িতই উপায়।
আমােদর সমাধােন n িট িল থাকেব। i তম িলে থাকেব i সাইেজর সকল িভ িভ polymino.
িভ মােন এেদর কাউেক flip, rotate বা translate করেল এই িলে র অ কােনা polymino
পাওয়া যােব না। এইসব polymino এর সােথ আরও একিট cell সকল ভােব জুেড় িদেয় i+1 সা-
ইেজর polymino িল পাওয়া যােব। িক দখা যােব এেদর একিটেক translate, rotate বা flip
কের অ আেরকটা পাওয়া যায়। তাই আমােদরেক i+1 হেত i+2 সাইেজর polymino িল বর
করার আেগই i+1 এর িল হেত এসব similar polymino দর দূর করেত হেব। উদাহরন প
মেন কর আমােদর কােছ একিট polymino আেছ (2, 2), (2, 3). এখন আমরা একিট কের নতুন
cell লািগেয় এেক (2, 2), (2, 3), (2, 4) বানােত পাির, আবার (2, 1), (2, 2), (2, 3) ও বানােত পা-
ির। িক এই িট িক আবার একই (translation সােপে )। এেদর জনেকই রেখ আমােদর লাভ
নই। তরাং আমরা যিদ একিট polymino এর িল থেক ধু িভ িভ polymino দর রাখেত
পাির তাহেল আমরা 1 সাইজ িদেয় কের এেক এেক 2, 3, 4 এরকম সকল সাইেজর জ list
পেয় যাব। হেলা কীভােব আমরা এই িভ িভ polymino িল পেত পাির বা িট polymino
য একই তা কীভােব বুঝেত পাির।
এজ আমােদর যা করেত হেব তাহল polymino দরেক canonical ফেম কাশ করেত
হেব। Canonical ফম মােন হল িতিট polymino ক এমন ভােব কাশ করা যন একই রকম
(এে ে flip, translate আর rotate এর সােপে ) polymino দরেক canonical ফেম কাশ
করেল একই canonical ফম নয়। এেত লাভ িক? লাভ হল কােনা একিট polymino এর িলে
সকল polymino এর জ যিদ আমরা canonical ফম বর কির তাহেল িভ িভ canonical
ফম ওয়ালা polymino িনেলই আমােদর িভ polymino এর িল হেয় যােব। এখন হল একিট
polymino ক কীভােব canonical ফেম represent করা যায়। একিট polymino ক আমরা
square িলর coordinate স িলত একিট set িহসােব represent করেত পাির। িক এিট িক
canonical form না। কারণ িচ া কর 1 সাইেজর একিট polymino (0, 0) হেত পাের অথবা
(1, 1) হেত পাের বা অ কােনা িকছু। িক এই সব িলই একই (translation সােপে )। তাহেল
এেদরেক canonical ফেম কীভােব নয়া যায়?
যােত translation এর ফেল একািধক polymino ক িভ িবেবচনা না কির সজ একিট সহজ
উপায় হেলা polymino এর bounding rectangle এর একিট িনিদ কাণা (ধরা যাক িনেচর বাম
কাণা) ক িনেয় (0, 0) ত বসােত হেব। এজ তামােক square িলর সবেচেয় কম x িনেত
হেব এবং সবেচেয় কম y. এরপর সব square হেত তুিম যিদ এই (x, y) িবেয়াগ কর তাহেলই

৭৬
canonical form পেয় যাবা যা তামােক translation এর হাত হেত র া করেব। উদাহরন-
(0, 0) আর (1, 2) এই জেনর ে তুিম যিদ উপেরর কাজ কর তাহেল িক ই ে ই (0, 0)
পােব, এর মােন আমরা জনেক রাখব না, এেদর এক জনেক রাখেলই চেল। Rotation বা flip
এর জ িক করা যায়? এে ে ও নানা উপায় আেছ। একিট উপায় হেলা polymino ক rotate
কর (4 ভােব rotate করা যায়, 0 বার, 1 বার, 2 বার আর 3 বার 90 িড ী rotate করা), flip
করা ( ধু যেকােনা একিট flip িদেলই চলেব horizontal বার vertical), flip করার পর rotate
করা (আবােরা 4 ভােব rotate)- এভােব যত িল ( মাট 8 রকম) polymino পােব সব িলই তা
আমােদর সম া মেত একই তাই না? এেদর েত েকর translation সােপে canonical form
বর কর আর তােদর একিট সেট রাখ। খয়াল কর একিট polymino বা তার translation সােপে
canonical ফম িক িনেজই একিট cell এর সট। আমরা এই polymino িলর জ যিদ একিট
সট নই তাহেল এিট হেব cell এর সেটর সট।
আমরা তাহেল িক করিছ? আমরা একিট িলে র েত ক polymino িনি , িনেয় তােদর িবিভ
ভােব rotate আর flip কের তােদর translation সােপে canonical ফম বর করিছ। এর পর
সই canonical ফমেক একিট সেট পুের িদি । এই কাজ সব polymino এর জ কের ফলেল
আমরা আমােদর সেট িক সকল িভ িভ polymino পেয় যাব।
তাহেল আমােদর সমাধান ায় শষ, ধু একিট িজিনস বািক আেছ- কীভােব নতুন নতুন polymino
পাওয়া যােব। আমরা ইেতামেধ ই 1 সাইেজর সকল polymino পেয় িগেয়িছ। এখন আমরা চ া
করব i সাইেজর polymino িল হেত i + 1 সাইেজর polymino বর করার। যিদ তা স ব হয় তা-
হেল আমরা 1, 2, . . . n সাইেজর সকল polymino বর কের ফলেত পারব। i সাইেজর polymino
হেত i + 1 সাইেজর polymino বর করার উপায় হেলা i সাইেজর polymino এর িতিট square
এর চািরিদেক নতুন square (i + 1 তম, কারণ ইেতামেধ ই i িট square আেছ) বসােনার চ া
করা। তাহেল আমরা একিট একিট কের নতুন polymino পােবা i + 1 সাইেজর। চ া করার কথা
বললাম কারণ এমনও তা হেত পাের য যখােন বসােত চা সখােন আেগ থেকই একিট square
আেছ। তরাং সই ব াপাের একটু সাবধান হেত হেব। তাহেল এভােব আমরা i + 1 সাইেজর জ
একিট িল পেয় যাি । এরপর এেদর থেক আমােদর একই রকেমর polymino িল বাদ িদেত
হেব (উপের canonical ফম িনেয় অেনক বকবক কেরিছ)। এভােব আমরা এেক এেক n সাইেজর
িল পেয় যাব।
আর w × h এটা কােনা ব াপার না। একবার সব polymino পেয় গেল তুিম সব w × h এর
জ উ র বর কের রাখেত পারেব। অথাৎ তামার কাড একবার মা n সাইেজর সব polymino
বর করেব এরপর তুিম একিট n × w × h সাইেজর একিট matrix ক precompute কের রাখবা
যখােন িলখা থাকেব n সাইেজর কয়িট polymino আেছ যারা w × h সাইেজ আঁেট আর তারা
rotation, flip বা translation সােপে একই িজিনস দয় না।

UVa 225 Golygons


সমস া: একিট ি েড িকছু িকছু িব েত যাওয়া িনেষধ। সসব িব ইনপুেট দওয়া থাকেব। এখন
তামােক মাট n ধাপ িদেত হেব (n ≤ 20)। থম ধােপর সাইজ 1, ি তীয় ধােপর সাইজ 2 এরকম
কের n ধাপ। তুিম করেব (0, 0) হেত এবং থম ধাপ তুিম যেকােনা িদেক িদেত পােরা। এই
ধাপ দবার পর তামােক অব ই ডােন বা বােম ঘুরেত হেব। যমন তুিম 1 ধাপ িদেল positive y
axis বরাবর। এরপর তামােক হয় positive x অথবা negative x axis এর িদেক ঘুের তাকােত
হেব এবং সই িদেক তুিম তামার ি তীয় ধাপ দেব (2 সাইেজর)। আবােরা তুিম ডােন বা বােম ঘুরেব
এবং সই িদেক 3 সাইেজর ধাপ িদেব। এভােব n বার। খয়াল করেত হেব এই ধাপ দবার সময়
যন তুিম িনিষ িব েত বা িনিষ িব র উপর িদেয় না যাও। বলেত হেব এমনভােব n ধাপ দওয়া
স ব িকনা যন কােনা িনিষ িব েক শ না কের আবার (0, 0) ত িফের আসা যায়।
সমাধান: থম ধাপ যিদ তুিম উপের বা িনেচর িদেক দাও, তাহেল সকল িবেজাড়তম ধাপ তুিম হয়
উপের নাহয় িনেচ িদেব আর জাড়তম ধাপ হয় বােম না হয় ডােন দেব। একই ভােব যিদ থম
ধাপ তুিম বােম বা ডােন দাও তাহেল িক হেব তা বুঝেতই পারছ। আপাতত ধের নাও আমরা থম
ধাপ উপেরর িদেক িদেয়িছ। এখন মেন কর তুিম িকছু ধাপ দবার পর (x, y) এ আছ। এখন উপর

৭৭
িদেক d ধাপ দওয়া মােন (x, y + d) ত যাওয়া, এভােব ডান বাম িনচ সব িকছুর জ আসেল
তুিম coordinate এর িহসাব িনকাশ করবা। এখন খয়াল কর, তামার কােছ যত িবেজাড় ধাপ বািক
আেছ সই সকল িবেজাড় ধােপর সাইজ িল যাগ কের যিদ দেখা তা abs(y) এর থেক ছাট, এর
মােন যতই চ া কর তুিম y = 0 করেত পারেব না। একই ভােব তুিম সকল জাড় ধােপর সাইজ যাগ
কের দখেব তার মান abs(x) এর থেক ছাট হয় িকনা। হেল x = 0 করেত পারেব না। এটা একটা
optimization. এছাড়াও খয়াল কর backtrack এর সময় যখন তুিম ধাপ দেব তখন জানার
েয়াজন হেব য (x, y1 ) হেত (x, y2 ) (বা একই ভােব x axis বরাবর) এর মােঝ কােনা িনিষ
িব আেছ িকনা। তুিম চাইেল
( ) িত row এবং column এর জ একিট consecutive sum এর
অ াের রেখ এই তথ O 1 এ বর কের ফলেত পােরা। এই কয়িট optimization যিদ ব বহার
কর তাহেলই আমার মেন হয় এই সম া সমাধান হেয় যােব।

৫.১ অ শীলনী
৫.১.১ সম া
Easy
ˆ UVa 140 Bandwidth ˆ Uva 211 The Domino Effect

ˆ UVa 818 Cutting Chains ˆ UVa 690 Pipeline Scheduling

ˆ UVa 12113 Overlapping Squares ˆ UVa 1575 Factors

ˆ UVa 11214 Guaring the Chessboard ˆ UVa 1533 Moving Pegs

ˆ UVa 817 According to Bartjens ˆ UVa 11882 Biggest Number

ˆ UVa 12569 Planning mobile robot on Tree (Easy Version)

Medium
ˆ UVa 1354 Mobile Computing ˆ UVa 1603 Square Destroyer
ˆ UVa 12107 Digit Puzzle ˆ UVa 11846 Finding Seats Again
ˆ UVa 11694 Gokigen Naname ˆ UVa 10384 The Wall Pushers

ˆ UVa 10837 A Research Problem ˆ LOJ 1121 15 Puzzle

ˆ LOJ 1143 Knights in FEN ˆ LOJ 1397 Sudoku Solver

৫.১.২ িহ ট

UVa 140: মা 8 িট নাড। তাই তামরা all possible permutation বর কের চক কর-
ত পােরা। এজ backtrack করেত পােরা আবার চাইেল algorithm হডার ফাইেলর next
permutation ও ব বহার করেত পােরা।
UVa 211: তুিম একিট িনিদ order এ domino বসােব তাহেলই হেব। যমন (1, 1), (1, 2),
(1, 3), . . . (1, c), (2, 1) . . . (2, c) . . . (r, 1), . . . (r, c) এই অডাের তুিম cell িলেত যােব
এবং একিট domino বসােনার চ া করেব। তাহেল িবধা হেলা িতবার তামার হােত মা িট
option. হয় এই ঘেরর সােথ তার পােশর ঘেরর, অথবা এই ঘেরর সােথ িনেচর ঘেরর। আর যিদ
এই ঘর আেগ থেকই পূরণ হেয় থােক তাহেল তা এটা চ া করার কােনা মােন নই।
UVa 818: সম ািট বশ র, িক এর statement টা ambiguous। িক এর পরও িদলাম।
কান কান link খুলেত হেব এর উপের bruteforce করার পর একিট graph theory বা adhoc
বা greedy (কীভােব একিট সম া এেতা ক াটাগিরর হেত পাের?- আসেল এজ ই আমার এই
সম ািট ভাল লেগেছ এবং তামােদর জ এিট িদলাম) সম া সমাধান করেত হয়। এই পিরবিতত
সম ািট বশ র। আমার মেন হয় তামােদর এিট িনেজ থেকই সমাধান করা উিচত।

৭৮
UVa 690: খুব একটা কিঠন না। িক কাড একটু ঝােমলার মেন হেত পাের। Reservation table
ইনপুট নবার পর থম কাজ হেব এেক কয় ঘর shift কের বসােনা স ব তা বর করা। n ঘর shift
কের তা বসােনা স ব কারণ n ঘর সরােল তােদর মােঝ আর কােনা overlap ই থােক না। আর
কান কান shift কের বসােনা স ব সিট বর কের রাখেত হেব েতই। এরপর এর উপর িভি
কের backtrack. িক এই য বসােনা স ব িকনা বর করা, এই অংশটু আমরা কীভােব খুব
ত করেত পাির? আমরা চাইেল bitmask ব বহার করেত পাির। মেন কর আমােদর কােছ একিট
bitmask আেছ। এখন আমরা জানেত চাি reservation table ক c ঘর সিরেয় বসােল overlap
কের িকনা। এটা আসেল c ঘর shift কের bitwise and কের দখার মত।
UVa 12113: র সম া, যিদও কাড একটু কিঠন হেত পাের। থমত খয়াল কর তুিম মা
9 ভােব 2 × 2 square ক বসােত পারেব। আর বলাই আেছ য 6 বােরর বিশ বসােব না। অথাৎ
মাট 96 < 106 ভােব বসােনা স ব। তরাং তুিম চাইেল েতই সব ভােব বিসেয় বিসেয় shape
িল hash কের রাখেত পােরা। অথবা েতই hash এর ঝােমলায় না িগেয় সকল shape বর
কের একিট অ ােরেত রেখ িমিলেয় দখেত পােরা ac হয় িকনা।
UVa 817: 48 িক খুব একটা বিশ না। অথাৎ তামরা থম 8 িট character এর পর কী বসাবা
(বা হয়েতা বসাবা না) তার উপর bruteforce করেলও হেব।
UVa 11882: একিট heuristic হেত পাের তুিম কােনা জায়গায় পৗঁছানর পর দখা য আর কয়িট
জায়গায় খুব জাড় যেত পারেব (ধর bfs কের)। IDA* মেন হয় না করাই ভাল কারণ তামােক
সবেচেয় বড় সংখ া বর করেত হেব, এখােন goal িক িনিদ না। অথাৎ তুিম কােনা একটা সংখ া
দেখই বুঝেত পারবা না য এটাই উ র িকনা। তুিম সব সংখ া দখার পর বুঝেব কানটা উ র। এখন
মেন কর তুিম ইেতামেধ ই 2345 পেয় গছ। আর এখন 12 নবার পর দখছ আর িট অংেকর
বিশ পাওয়া যােব না। এর মােন আমােদর আর এিগেয় লাভ নই। এভােব pruning (pruning মােন
হেলা backtrack এর সময় আর না এিগেয় িফের যাওয়া) করেলই হেয় যাবার কথা।
UVa 1354: মা 6 িট িজিনস থাকেত পাের। তাই তুিম আসেল সকল ভােব tree বানােনার চ া
করেত পােরা। তুিম dynamic programming করার মত কের backtrack করেল িক হেব না।
অথাৎ, যিদ তুিম এরকম কর- root এ তুিম সব িজিনস িদেল, এখােন তুিম িস া িনেল ডােন ক
যােব বােম ক যােব, এরপর তুিম বােম আর ডােন recursive call করেল ঐ সব িজিনস িদেয়- না
তা হেব না। কারণ বােমর িজিনস িদেয় িবিভ ভােব tree বানােনা যায় আবার ডােনর িজিনস িল
িদেয়ও অেনক ভােব tree বানােনা যায়। তরাং তুিম বােমর কান tree এর সােথ ডােনর কান tree
ক মলােব সটা একটা কিঠন ব াপার। তেব াঁ, তুিম যিদ বাম বা ডান যেকােনা িদেকর জ যিদ
যত ভােব tree বানােনা যায় তােদর িতিটেকই (বা তােদর যই information িল তামার আসেল
লাগেব) return করেত পােরা তাহেলই সম া সমাধান হেয় যােব। কােনা নােডর জ আসেল ধু
এটু জানেলই হয় য তার subtree ত থাকা নাড িল বাম িদেক এবং ডান িদেক কতদূর পয
যায়। তাহেল িদেকর মাট ভর আর িদেকর subtree িট িদেক কতদূর যায় এই িট তথ জানা
থাকেল বতমান নােডর জ ও এই তথ তির কের return করেত পারেব।
UVa 1603: িতিট ম াচ কািঠর জ িলেখ রাখেব কত িল square এর border এ সই কািঠ
আেছ। Backtrack এ কািঠ িলেক তার উপর িদেয় যাওয়া square এর সংখ ার িভি েত বড় হেত
ছাট ত সট করেব এবং এই order এ তােদরেক remove করার চ া করেব। কন? াভািবক
ভােব িচ া কর, যই ম াচ কািঠ সরােল বিশর ভাগ square ন হেব তােক সরােনাই তা সাধারণত
লাভ জনক তাই না? আর িক optimize করা যায়? যিদ দেখা এখন যসব কািঠ বািক আেছ তােদর
িতিট িদেয় এেকর বিশ square যায় না তাহেল যকয়িট square বািক আেছ িঠক তত সংখ ক
কািঠ তামােক সড়ােত হেব। তরাং আর backtrack না কের তুিম কয়িট square বািক আেছ সই
count দখেত পােরা। তেব যেহতু n এর মান কম তাই এসব optimization নাও করা লাগেত
পাের। তাও এসব িবিভ রকম optimization জানা থাকা ভাল, কােজ লেগ যেত পাের অ কােনা
সম ায়।

৭৯
৮০
অধ ায় ৬

Data Structure স িকত সম া

UVa 210 Concurrency Simulator

সমস া: একিট া ােম 5 ধরেনর instruction থাকেত পাের। "variable = constant", "print
variable", "lock", "unlock", "end". এখােন variable a হেত z এর মােঝর যেকােনা character
হেত পারেব এবং constant 0 হেত 99 এর মােঝর যেকােনা সংখ া হেত পারেব। আমােদর ইনপুেট
সেবা 10 িট া াম থাকেব এবং িতিটেত সেবা 25 িট instruction থাকেব। া াম িল এক
core ওয়ালা machine এ চলেব। তেব া াম িল একিটর পর একিট এভােব চলেব না। বরং
একিট িনিদ সমেয়র িলিমট আেছ ধরা যাক T. থম T সময় থম া াম, ি তীয় T সময় ি তীয়
া াম, এভােব চলেত থাকেব এবং সকল া াম হেত T সময় চলার পর আবার থম া ােম িফ-
র আসেব। এভােব cyclically চলেত থাকেব। িতিট instruction চলেত কত সময় কের লােগ তা
বলা আেছ। যিদ কােনা instruction চলেত চলেত T সময় পার হেয় যায় তাহেল সই instruction
শষ না হওয়া পয পেরর া ােম যােব না।

তেব একটা ব াপার আেছ। একািধক া াম একই সােথ lock করেত পারেব না। যিদ অ
কােনা া াম এখন lock না কের থােক তাহেল স lock করেত পারেব। যিদ কউ lock করেত
চায় এবং অ কউ ইেতামেধ ই lock কের থােক তাহেল স block queue ত ঢুকেব। েত
সবাই ready queue ত থােক এবং cpu এই ready queue এর র া াম T সময় েসস
করার পর ready queue এর শেষ রােখ। তেব এই lock এর ে পেরর য া াম lock
করেত চায় তােক ready queue এর শেষ না রেখ block queue এর শেষ রােখ। এভােব
চলেত থােক। যই া ামিট েত lock কেরিছল স যখন unlock করেব তখন block queue
এর র া াম ready queue এর শেষ রাখেত হেব। এভােব সকল া াম শষ না হওয়া
পয চলেত থাকেব। তামােক এই া াম িল িদেয় যা ি ট হেব তা আউটপুট িদেত হেব।

একিট িজিনস আেগ বলা হয় নাই তাহেলা, এখােন variable িল shared. অথাৎ যিদ একিট
া াম কােনা একিট ভ ািরয়ােবল এর মান পিরবতন কের তাহেল অ া ােমও তা পিরবতন হেয়
যােব। আর েত সকল ভ ািরেয়বেলর মান 0. িনেচ sample input আর output দওয়া হেলা।
এখােন থেমর সংখ ািট বলেছ কয়িট া াম, পেরর 5 িট সংখ া হেলা উপেরর 5 িট instruction এর
জ কত কের সময় লােগ (একই অডাের), আর শেষর সংখ ািট হে T এর মান। আর িতিট া-
াম end ারা পৃথক করা আেছ তােতা বুঝেতই পারছ (মেন রেখা end িক একিট instruction)।

৮১
Sample input: Output of the sample input:
3111111 1: 3
a=4 2: 3
print a 3: 17
lock 3: 9
b=9 1: 9
print b 1: 9
unlock 2: 8
print b 2: 8
end 3: 21
a=3 3: 21
print a
lock
b=8
print b
unlock
print b
end
b=5
a = 17
print a
print b
lock
b = 21
print b
unlock
print b
end

সমাধান: সহজ একিট সম া, statement ই যা কিঠন। তুিম ই ধরেনর queue রাখেব- running
queue আর blocked queue। চাইেল stl এর queue ব বহার করেত পােরা। এই ই ধরেনর
queue ত তামার া ােমর index রাখেব। েত running queue ত 1 হেত n পুশ কের
নেব যখােন n হেলা মাট া ােমর সংখ া। সই সােথ একিট global array রাখেব য কান
া ােমর কততম instruction পয ইেতামেধ ই run করা হেয়েছ। িতবার তামরা running
queue এর সামেন থেক া ােমর index নেব। এরপেরর কাজ হেলা সই া াম ক run
করােনা। তুিম সই global array থেক দখেব কান instruction তামােক run করােত হেব।
যিদ assignment বা print instruction হয় তাহেল তা সহজ। যিদ end হয় তাও সহজ, এই
া ামেক আর তুিম running queue ত ঢুকােব না। এখন মুল ঝােমলা হেলা lock আর unlock
িনেয়। যখন তুিম unlock করেব তখন সম ায় যা বেলেছ তা করেব, অথাৎ blocked queue এর
র া ামেক running queue এর শেষ ঢুকােব। আর যখন lock এ আসেব, তখন দখেব
আেগ থেক যিদ কউ lock থােক তাহেল এই lock execute না কের এেক blocked queue ত
ঢুিকেয় চেল যােব। এেক িক আর running queue ত ঢুকােব না। আর যিদ দেখা কউ lock
নই তাহেল তা সহজ, এেকই execute করেত থাকেব। যেহতু তামােক জানেত হেব আর কউ
lock আেছ িকনা, এ জ একিট বাড়িত flag রাখেত হেব। আর unlock এ এই flag ক clear
করেত ভুেল যও না।
আর সমেয়র ব াপারটােতা সহজ। তুিম িতিট instruction run করবা আর T হেত সই সময়
বাদ িদেব। যিদ নতুন কােনা instruction run করেত িগেয় দেখা T এর মান 0 বা negative হেয়
গেছ এবং আরও instruction বািক আেছ তাহেল এই া ামেক running queue এর পছেন
ঢুকােয় চেল গেলই হেব।

৮২
মাট কথা এই সম া বশ সহজ। তামােক ধয ধের কাডিট করেত হেব, তাহেলই হেব।

UVa 514 Rails


সমস া: একিট ন শেন একিট মা ন লাইন আেছ। এই লাইেন A লাইন থেক বিগ আেস,
শেন ঢুেক এরপর ব েনার সময় B লাইেনর িদেক যায়। িজিনসটা িকছুটা Y এর মত দখেত।
মেন কর Y এর বােম A আর ডােন B। A হেত এেক এেক বিগ আসেব এেস Y এর িনেচ এেকর পর
এেক জড় হেব। মােঝ মােঝ তুিম চাইেল িনচ হেত B এর িদেক বিগ িদেত পারেব। যমন মেন কর A
এর িদেক 1, 2, 3 এই িতনিট বিগ আেছ। থেম 1 ক এেন িনেচ রাখেল, এর পর 2 ক এেন িনেচ
রাখেল, এর পর মেন কর 2 ক B এর িদেক িদেল, এর পর 3 ক A হেত িনেচ এেন B এর িদেক
িদেল। সবেশেষ 1 ক B এর িদেক িদেল। তাহেল েত 1, 2, 3 িছল এখন 2, 3, 1 হেয় গেছ।
তামােক বলা আেছ A এর িদেক কয়িট বিগ আেছ। ধরা যাক n িট বিগ (1, 2, . . . n এরকম অডাের)
আেছ। তামােক বলেত হেব B এর িদেক বিগ িল দ order এ নওয়া স ব িকনা। n এর মান
খুব জাড় 1000.
সমাধান: এিটও বশ সহজ একিট সম া। যিদ stack জানা থােক তাহেল আরও সহজ হেব। মেন
কর B এর েত i আেছ। এেক নবার একিটই মা উপায় আেছ। আর তাহেলা A এর িদক থেক
1 হেত i পয সকল বিগেক এেন Y এর িনেচ রাখা এবং i ক B এর িদেক নওয়া। এবার B এর
পেরর সংখ া দেখা কত। যিদ দেখা সিট িনেচ রাখা সংখ া িলর মােঝ সবেচেয় উপের আেছ তাহেল
তা হেয়ই গল। আর যিদ উপের না থেক ভতের থােক তাহেল তা আর হেব না। যমন i = 3
হবার পর এখন যিদ তুিম 1 চাও তাহেল তা হেব না। কারণ 1 এর উপর 2 আেছ। 2 ক না িনেয় 1
নওয়া স ব না। তরাং এই ে B এর sequence পাওয়া স ব না। আর যিদ B এর পরবতী
সংখ ািট Y এর িনেচ না থেক A এর িদেক থেক থােক তাহেল সই সংখ া পয Y এর িনেচ িনেত
হেব। এভােব যিদ তুিম B এর সব সংখ া িনেত পােরা তাহেলই হেয় যােব। এখন একটা িজিনস,
Y এর উপেরর সংখ া দখা সহজ, িক Y এর ভতের কােনা একিট িনিদ সংখ া আেছ িকনা তা
দখেত হেল তা লুপ চালােত হেব। তাহেল উপায়? যেহতু n এর মান কম, সেহতু আমরা িতবার
লুপ চালােতই পাির। িক এটা িক লুপ না চািলেয় করা স ব? াঁ, তুিম চাইেল একিট অ াের িনেয়
িলেখ রাখেত পােরা কান সংখ া কখন কই আেছ। যখন কােনা সংখ ােক Y এর িনেচ রাখেব তখন
িলেখ রাখেব য সিট িনেচ আেছ। তাহেল এই অ াের দেখ তুিম খুব সহেজই বুেঝ যােব য সিট
Y এর িনেচ আেছ। এর থেকও একিট সহজ উপায় আেছ। তাহেলা আমােদর সমাধােনর জ িক
এমিনেতই িলেখ রাখেত হেব A এর িদেক কান পয সংখ া নওয়া হেয় গেছ। ধরা যাক j পয
নওয়া হেয় গেছ। এর মােন A এর িদেকর বািক সংখ া হেলা j + 1 হেত n পয । আমরা কােনা
একিট সংখ া Y এর িনেচ আেছ
( ) িকনা তা না দেখ A ত নই িকনা দখেলও হয়। তরাং এভােব
আমরা আমােদর সম া O n এ সমাধান করেত পাির।

UVa 442 Matrix Chain Multiplication


সমস া: িকছু matrix এর নাম এবং তােদর dimension দওয়া আেছ। সই সােথ িকছু matrix
েনর expression দওয়া আেছ। যমন- (A(BC)), ((AB)(CD) ইত ািদ। তামােক বলেত হেব
দ expression এর মত কের ন করেত কত cost. A(p, q) এবং B(q, r) িট matrix ন
করার cost হেলা p × q × r. সেবা 26 িট ম াি দওয়া থাকেত পাের।
সমাধান: অেনক ভােবই এই সম া সমাধান করা যায়। এখােন আমরা দখেবা কীভােব stack
ব বহার কের এই সম া আমরা সমাধান করেত পাির।
সম ােক একটু সহজ কের নই। মেন কর তামার িকছু bracket sequence দওয়া আেছ,
তামােক বলেত হেব এই bracket sequence িট balanced িকনা। যমন (()()) একিট balanced
sequence িক (()( িক balanced sequence না। এটা কীভােব stack িদেয় সমাধান করা
যায় তা িক জােনা? সহজ, তুিম ( পেল stack এ ঢুকােব আর ) পেল দখেব য stack এর উপের

৮৩
( আেছ িকনা। থাকেল তা তুেল ফলেব, আর না থাকেল বুঝেব য sequence িট balanced না।
একটু িচ া করেল বুঝেব এখােন stack এর েয়াজন নই, ধু একিট counter রাখেলই হয়। অথাৎ
stack এ কয়িট িজিনস আেছ তা জানেলই হয়, িক িক আেছ তা না জানেলও চেল, কারণ তুিম stack
এ সবসময় ( েবশ করাও।
যাই হাক, stack এর মাধ েম balanced bracket sequence সম া কীভােব সমাধান করা
হয় এটার সােপে যিদ আমােদর সম া িচ া কর তাহেল আশা কির সমাধান পেয় যােব। এটা
পির ার য আমােদরেক stack ব বহার করেত হেব। িক stack এ িক রাখবা, কখন ঢুকাবা, কখন
বর করবা ইত ািদ হেলা িচ া করার িজিনস। তামরা চাইেল িনেজরা একটু িচ া কের দখেত পােরা
িনেচর সমাধান পড়ার আেগ।
একিট সমাধান হেত পাের, তামরা বাম হেত ডােন আসেব। যিদ ( পাও তাহেল তা ignore কর।
যিদ একিট matrix পাও তাহেল তার dimension ক stack এ েবশ করাও। আর যিদ ) পাও
তাহেল stack হেত উপেরর িট matrix এর dimension তুল। ধরা যাক এরা হেলা (a, b) [ধরলাম
এিট উপের িছল] আর (c, d). তাহেল আমােদর দখেত হেব d = a িকনা। নাহেল আমােদর matrix
িট ন করা স ব না। আর যিদ তারা সমান হয় তাহেল এেদর ন করেত cost হেব c × a × b আর
নতুন matrix এর dimension হেব (c, b). এই matrix ক আমরা আবার stack এ পুশ করব।
এভােব সব ন হেয় গেল সকল cost এর যাগফলই হেব আমােদর উ র।

UVa 11988 Broken Keyboard (aka Beiju Text)

সমস া: একিট লাক একিট string কীভােব type কেরেছ তা দওয়া আেছ। String িটেত িকছু
letter এবং underscore আেছ। এর সােথ আেছ [ আর ]. [ এর মােন হল ঐ মুহূেত লাকিট home
িটেপেছ। এর ফেল তার typing এর cursor লাইেনর েত এেস িগেয়িছল। আর ] এর মােন হল
end. এর ফেল তার cursor লাইেনর শেষ এেস িগেয়িছল। তামােক বলেত হেব দ string
এর মত কের টাইপ করেল আসেল string িট দখেত কমন হেব। যমন ইনপুট abc[de]f হেল
আউটপুট হেব deabcf.

সমাধান: খুব একটা কিঠন না। তুিম যিদ একটু িচ া কর তাহেল stack িদেয় সমাধান দাঁড় করােত
পারেব (যিদও খুব সহজ হেব না সই সমাধান)। তেব সমাধানটা খুব সহজ হেব যিদ তুিম stl এর
list ব বহার কর। খয়াল কর তামার আসেল কােনা এক মুহূেত িক িক করেত হেত পাের। হয়
তুিম string এর একদম শেষ েবশ করােব, অথবা একদম েত অথবা এর আেগ যখােন েবশ
( )
কিরেয়িছেল িঠক তার পের। এই কাজ িল list িদেয় O 1 সমেয় করেত পারেব। খয়াল কর vector
এর ে েত বা মােঝ insert করার cost িক constant না। িক list এর ে তুিম যিদ
মেন রােখা এর আেগ কই িছেল তাহেল এই িতনিট অপােরশন constant সমেয় করেত পারেব।
List এর insert ফাংশন আেছ, তােক তুিম যিদ iterator দাও আর একিট মান দাও তাহেল
তা ঐ iterator এর আেগ সই মানেক insert করেব। মেন কর আমরা list<char>::iterator it
নােম একিট variable এ iterator রাখব যা িনেদশ করেব তুিম কাথায় পেরর character ক
insert করেব, অথাৎ ঐ iterator যখােন িনেদশ কের তার িঠক আেগর জায়গায় নতুন character
েবশ করেব। েত it এর মান হেব L.end() এর সমান, যখােন L হল আমােদর িল । আমরা
যসকল character েবশ করাব সব িল এর শেষ েবশ হেব। এখন যিদ home িটেপ তাহেল
এই iterator এর মান পিরবতন হেয় হেয় যােব L.begin(), এবং এর পের যত character তুিম
েবশ করােব সব "বতমান" িল এর র আেগ েবশ হেব। খয়াল কর, যিদও আমােদর নতুন
character িল এর েত েবশ করােব এবং এর ফেল L.begin() এর মান পিরবতন হেব, িক
it এর মান িক পিরবতন হেব না। এিট িক আেগর র মাথােক পেয় ট করেব এবং তুিম যত নতুন
character েবশ করােব সব িঠক জায়গায় েবশ হেব। একই ভােব তুিম যিদ end পাও তাহেল it
এর মান L.end() কের দাও। এরকম কের করেলই এই সম া সমাধান হেয় যােব।

৮৪
UVa 12657 Boxes in a Line
সমস া: একিট ােন n িট বা আেছ, বােম হেত ডােন 1, 2 . . . n এভােব। n এর মান সেবা
100,000 হেত পাের। এখন তামােক চার ধরেনর অপােরশন দওয়া হেব। এক- X ও Y ক swap
কর, ই- X ক Y এর বােম রােখা, িতন- X ক Y এর ডােন রােখা, চার- পুেরা বাে র sequence
উলিটেয় ফেলা। এরকম সেবা 100,000 িট অপােরশন দওয়া থাকেব। তামােক সকল অপােরশন
শেষ িবেজাড়তম বা িলর (বাম হেত থম, তৃতীয় এরকম) id এর যাগফল ি ট করেত হেব।

সমাধান: বাঝাই যাে এখােন তামােক doubly linked list কাড করেত হেব। যা যা অপােরশন
করেত বলা হেয়েছ সসেবর জ িলংক িলে র িলংক িল কীভােব ভাঙেত হেব বা গড়েত হেব সটা
িচ া করেলই হেব। আর অপােরশেনর সময় X কাথায় আেছ তা জানার জ একিট িলংক এর অ াের
রাখেত পাির যা িতিট বা কাথায় আেছ তা বলেব। খুব একটা কিঠন হেব না, তুিম হােত হােত
িলংক িলে র কাড করার চ া করেত পােরা। চাইেল stl এর list ব বহার করেত পােরা তেব সিট
আরও ঝােমলাদায়ক হেত পাের এই সম ার ে ।

UVa 679 Dropping Balls


সমস া: একিট tree দওয়া আেছ। Tree িট complete binary tree অথাৎ িতিট নােডর িট
কের child আেছ। আর সকল leaf নাড িল D তম লেভেল আেছ। বাম হেত ডােন থম লেভেলর
নােডর না ার হেলা 1, ি তীয় লেভেলর 2, 3. তৃতীয় লেভেলর 4, 5, 6, 7. িঠক heap ক
অ ােরেত represent করেল নাড িলর index যরকম হয় সরকম। D এর মান সেবা 20 হেত
পাের। েত িতিট নােড একিট কের flag থােক এবং এর মান false. এক এক কের মাট I
িট বল ঢুকেব 1 িদেয়। বলিট যই নােড থাকেব সই নােডর flag এর মান flip হেয় যােব (true
থাকেল false, false থাকেল true). সই সােথ false হেল (flip এর আেগ false হেল) স বােম
যােব, আর যিদ true হয় তাহেল স যােব ডােন। এভােব ডােন বােম যেত থাকেব যত ণ না স
leaf এ পৗঁেছ। তামােক বলেত হেব I তম বল কান leaf এ যায়।
সমাধান: এটা বুঝাই যাে য i তম নােডর বােমর child 2i আর ডােনর child 2i + 1. D depth
এর ি এর মাট নাড সংখ া 2D −1. তরাং আমরা এই সাইেজর একিট অ াের িনেয়( ) পুেরা ব াপারটা
simulate করেত পাির। এেত খুব একটা সময় লাগেব না। িত বেলর জ O D সময় লাগেব।
তেব এর থেকও সহজ কাড কের এই সম া সমাধান করা স ব। তেব তার জ একটু িচ া
করেত হেব। মেন কর তামার কােছ 50 িট বল আেছ। আর তুিম জানেত চা শষটা কই যােব?
তুিম বল িলেক এেক এেক tree এর ভতর িদেয় না িনেয় িগেয় এেদরেক একে িনেয় যােব আর
জানেত চাইেব শষিট কই যােব। যিদ 1 না ার নােডর িদেক তাকাও তাহেল বুঝেব থম বল বােম,
ি তীয় বল ডােন, তৃতীয় বল বােম এভােব সকল িবেজাড়তম বল বােম আর জাড়তম বল ডােন যায়।
এর মােন 50 তম বল বা শষ বল ডােন যােব। ধু স না, মাট 25 িট বল ডােন যােব। অথাৎ এখন
আমােদর হেলা আমরা 3 (= 2 × 1 + 1) এ এেসিছ। আমার কােছ 25 িট বল আেছ এখন বলেত
হেব শষ বল কাথায় যােব। একইভােব িবেজাড় বল িল বােম যােব আর জাড় বল িল ডােন। তাই
25 তম বল বােম যায়। ধু স না মাট ⌈25/2⌉ = 13 িট বল বােম যােব। তরাং আমােদর পরবতী
হেব 13 িট বল িনেয় আমরা 6 (= 2 × 3) এ আিছ, শষ বল কই যােব। এভােব তুিম একিট
while loop বা একিট recursive ফাংশেনর সাহােয সমাধান করেত পােরা।

UVa 122 Trees on the level


সমস া: একিট binary tree দওয়া আেছ (অথাৎ িতিট নােডর সেবা িট child থাকেব)।
তােদর লেভল অ সাের ি ট করেত হেব। অথাৎ থেম সবেচেয় উপেরর level এর নাড িল বাম
হেত ডােন, এরপর ি তীয় লেভেলর নাড িল বাম হেত ডােন এভােব িতিট লেভেলর নাড বাম

৮৫
হেত ডােন ি ট করেত হেব। তেব tree িটর input একটু অ ভােব দওয়া। মেন কর 4 হেলা root
তার বােম 2 আর 2 এর ডােন 9. তাহেল input এ 9 এর জ বলা থাকেব LR. অথাৎ root হেত
কােনা নােড Left-Right ভােব কীভােব যাওয়া লােগ সটা দয়া। এরকম কের িতিট নােডর
জ ইনপুট দওয়া আেছ, তামােক level অ সাের বাম হেত ডােন নাড িল ি ট করেত হেব।
যিদ ইনপুট িল পূণ tree িনেদশ না কের ( যমন L বেল িকছু নই িক LL আেছ) তাহেল not
complete কথািট ি ট করেত হেব।
সমাধান: এই সম া সমাধােনর জ তামােদর ইনপুট নবার পর parsing করেত হেব। যা আমরা
ইেতামেধ ই আেলাচনা কের এেসিছ অ চ া াের। তরাং আমরা এখােন parsing িনেয় আর
আেলাচনা করব না।
তামরা চাইেলই LR এর ি ং িল দেখ দেখ একিট tree বািনেয় ফলেত পােরা। থেম িতিট
string দেখ tree ত সই নাড বানাও, এসময় এমন হেত পাের য িকছু নাড আেগ থেকই বানােনা
আেছ। তামােক মূলত নতুন নাড িল বানােত হেব। নাড বানােনার সময়, শষ নােড তুিম তার নাম
িলেখ রাখেব। যিদ tree বানােনা শেষ দেখা িতিট নােডর নাম আেছ তাহেল tree িট িঠক আেছ।
নাহেল ইনপুট invalid. এখন তামরা root হেত একিট bfs করেলই level অ সাের আউটপুট পেয়
যােব। কারণ bfs এ সবেচেয় কম দূরে র নাড আেগ visit হয়। তেব যেহতু আমরা বাম হেত ডােন
ি ট করেত চাই সজ কােনা নােডর child দর queue ত ঢুকােনার সময় তার left child ক
right child এর আেগ ঢুকােত হেব। তাহেলই হেয় যােব।
িক এই সম া আরও সহেজ সমাধান করা যায়। খয়াল কর উপেরর লেভেল থাকা মােন
string এর দঘ কম। তরাং আমরা যেহতু লেভল অ সাের print করেত চাই সেহতু আমােদর
নাড িলেক তােদর string এর length অ সাের sort করেত হেব। যিদ length একই হয় তখন
তােদরেক lexicographically sort করেলই হেব। কারণ L তা R এর থেক ছাট। আর আমরা
চাই বােমর নাডেক আেগ ি ট করেত হেব। আর ইনপুট valid িকনা সটা চক করাও খুব একটা
কিঠন না। মেন কর সকল LR string এর সট হল S. তাহেল িতিট ইনপুট ি েঙর জ দখেত
হেব য তার শষ character বাদ িদেল যই ি ং হয় সিট S এ আেছ িকনা। এর মােন দাঁড়ােব
িতিট নােডর parent দওয়া আেছ।

UVa 548 Tree


সমস া: একিট binary tree এর root হেত কােনা একিট leaf নাড পয path এর cost হেলা
এই path এর িতিট নােডর সংখ ার (তার id এর) যাগফল। আমােদর সবেচেয় কম cost িট ি ট
করেত হেব। তেব tree িট ইনপুেট সরাসির দওয়া নই। এর inorder এবং post order traversal
দওয়া আেছ। Tree ত সেবা 10,000 িট নাড থাকেত পাের।
সমাধান: যিদ আমােদরেক সরাসির tree িট দওয়া থাকত তাহেল আমার মেন হয় বািক সম াটু খুব
সহেজই সমাধান কের ফলতা। এর জ একিট dfs িলখা লাগত। Dfs এ আমরা cost নানা ভােব
handle করেত পারব। মেন হয় সহজ উপায় হেব ফাংশেনর parameter িহসােব cost নওয়া।
অথাৎ dfs ফাংশনিট ধু কান নােড আিছ ধু তাই িনেব না বরং সই নােড আসেত কত cost
সটাও নেব। যিদ কােনা নােড এেস দিখ এিট leaf নাড, এর কােনা child নই তাহেল আমরা
global একিট variable ক েয়াজেন update করব। এই global variable িট হেলা "সবেচেয়
কম cost এর leaf নাড যাবার path এর cost". আর আমরা যখন বতমান নাড হেত তার child
এ যেত চাইব তখন তার বতমান cost এর সােথ নতুন নােডর cost যাগ কের এই িট সংখ া
িদেয় dfs ক call করেত হেব।
তাহেল দাঁড়াল- যিদ আমরা inorder আর post order traversal হেত আমােদর মূল tree
বর করেত পাির তাহেল আমােদর সম া সমাধান হেয় যােব।
এর আেগ দেখ নই inorder আর post order traversal কী। এ িট ছাড়াও আেরকিট আেছ
তাহেলা preorder traversal. আমরা এই িতনিট একই সােথ দিখ। মেন রাখার িবধার জ
সবসময় এেদর নাম খয়াল করবা in, post, pre. এরা বেল root কই যায়। যমন in এ root
থােক মােঝ, post এ root থােক শেষ, আর pre ত root থােক েত। এর মােন িক? যমন

৮৬
pre এর ে এর মােন হেলা থেম তুিম root নাড িলখেব এর পর left subtree এর preorder
traversal িলখেব, এর পর right subtree এর। একই ভােব, post এর ে সবেশেষ root
িলখেব, েত বােমর, এর পর ডােনর। inorder এ মােঝ থাকেব root, েত বােমর আর শেষ
ডােনর। অথাৎ বাম ডােনর order fixed. কথা হল root কাথায় বসেব। সটা in, pre, post দেখ
বুঝা যােব।
আমােদর এই সম ায় inorder আর post order traversal দওয়া আেছ। এখান থেক িক
িক তথ পাওয়া যায়? থমত Postorder traversal এর শেষর নাডিট হেব root. এখন inorder
traversal এ root এর অব ান বর করেল, এর বােমর অংশটু হেব left subtree আর ডােনর
অংশ right subtree. একিট inverse অ াের (অথাৎ কােনা একিট( নাড ) inorder traversal
এ কাথায় আেছ) রাখেল inorder traversal এ root এর অব ান O 1 এ বর করা যােব। ধরা
যাক left subtree ত আেছ L িট আর right subtree ত আেছ R িট নাড। তাহেল post order
traversal এর থম L িট নাড হেব left subtree এর post order traversal, আর তার পেরর R
িট নাড হেব right subtree এর post order( traversal.
) এর মােন তামােক যিদ inorder আর
post order traversal দওয়া থােক তুিম O 1 এ left subtree এর আর right subtree এর
inorder এবং post order traversal বর করেত পারেব। তার মােন আমরা আবার মুল সম ায়
িফের িগেয়িছ- আমােদর ছাট একিট ি এর inorder ও post order traversal দওয়া আেছ, ি িট
বর করেত হেব। এই ভােব তুিম পুেরা tree বািনেয় ফলেত পারেব।
মজার িজিনস হেলা তুিম আসেল পুেরা tree না বািনেয় tree বানােনার পের dfs এর মাধ েম
যই কাজ করেত সটা এবং এইেয িকছু ণ আেগ inorder এবং post order িনেয় কাজ করার য
ব াপারিট বললাম সটা এক কের খুব ছাট কাড কের পুেরা সম া সমাধান কের ফলেত পারেব।

LOJ 1101 A Secret Mission


সমস া: তামােক 50,000 নাড এবং 100,000 িট edge িবিশ একিট weighted াফ দওয়া
আেছ। এরপর তামােক 50,000 িট query করা হেব। িতিট query ত িট নাড দওয়া থাকেব,
ধরা যাক তারা হেলা s এবং t. িত query ত তামােক s এবং t এর মােঝর সবেচেয় ভাল path
বর করেত হেব। s এবং t এর মােঝ তা অেনক path থাকেত পাের। তাহেল কানিট সবেচেয় ভাল?
এই ে সই path িট সবেচেয় ভাল যই path এ থাকা edge সমূেহর মােঝ সবেচেয় বিশ cost
িট সবেচেয় কম হেব। মেন কর s আর t এর মােঝ িট path আেছ। থম path এ থাকা edge
সমূেহর মােঝ সবেচেয় বিশ cost হেলা a, আর ি তীয় path এ থাকা edge সমূেহর মােঝ সবেচেয়
বিশ cost হেলা b. তাহেল তুিম a আর b এর মােঝ সবেচেয় কম যটা পােব সটা হেব তামার
উ র।
সমাধান: মেন কর মা একিট query আেছ। তাহেল কীভােব সমাধান করেত? Dijkstra এর মত
কের তাই না? Dijkstra ত আমরা cost রািখ s হেত কােনা নােড যাবার cost. িক আমােদর
রাখেত হেব কােনা নােড আসার জ সবেচেয় কম কত বড় cost এর edge ব বহার করেত হয়।
অথাৎ dijkstra এর েত তুিম dist এর অ ােরেক infinity িদেয় initialize করেব এবং dist[s] ক
0 িদেয়। এবার relax করার পালা। মেন কর তুিম u হেত v ত যাবার চ া করছ। u-v এর মােঝর
edge এর cost w. তাহেল u এর মধ িদেয় v ত যাবার জ cost হেব dist[u] আর w এর মােঝ
য বড় স। এখন এই মান যিদ dist[v] এর থেক ছাট হয় তাহেল dist[v] ক আমরা update করব,
িঠক dijkstra এর মত। dijkstra ত আমরা িলখতাম dist[v] = min(dist[v], dist[u] + w),
িক এে ে আমােদর িলখেত হেব( dist[v] = ) min(dist[v], max(dist[u], w)). এখন এই
সমাধােন আমােদর সময় লাগেব O E log V এর মত। অব ই িত case এ এিট আমােদর
করা স ব না। তাহেল কীভােব আমরা এই সম া সমাধান করেত পাির?
একিট case এর যই সমাধান তার সােথ িক কােনা িকছুর িমল পাও? যিদ িমল না পাও তাহেল
িচ া করেত থােকা। থমত আমরা চ া করব বিশ cost এর কােনা edge ব বহার না করেত। যত
কম cost এর edge ব বহার করা স ব। Sum কােনা ব াপার না। আমােদর কম cost এর edge
দর ব বহার করেত হেব। এখন বুঝেত পারছ এর সােথ িকেসর িমল আেছ? Minimum spanning

৮৭
tree এর। যিদ একটু ভাল কের িচ া কর তাহেল বুঝেব s আর t এর মােঝর যেকােনা optimal
path হেব এই minimum spanning tree এর ভতর িদেয় path. কন? এর মাণ খুব একটা
কিঠন না। মেন কর আমরা s হেত t ত এমন একিট optimal path পাই যার cost হেব MST এর
ভতর িদেয় পােথর থেকও কম cost এর। এর মােন optimal path এর জ সবেচেয় বিশ cost
এর যই edge পাওয়া তার cost হেব MST এর ভতর িদেয় path এর উপর থাকা সবেচেয় বড়
cost এর edge এর থেক কম cost এর। এখন তুিম যিদ একটু িচ া কর তাহেল দখেব MST
এর ভতেরর পােথ সবেচেয় বড় cost এর যই edge িছল তােক বািহেরর পােথর কােনা একিট
edge িদেয় replace কের MST এর cost আরও কমােনা যােব। িক MST এর cost তা কখনও
কমােনা স ব না তাই না? তরাং এরকম হেব না, অথাৎ s হেত t এর পাথ সবসময় MST এর
ভতর িদেয় হেব।
তরাং আমরা দ ােফর MST বর কের ফলব। এর পর িত query ত s আর t এর মােঝ
এই MST এর ভতর িদেয় path বর করব আর এই path এর সবেচেয় বিশ cost এর edge
বর করব। তাহেলই হেয় যােব।
( ) যেহতু একিট tree ত V − 1 িট edge থােক তাই আমােদর িত
query ত সময় লাগেব O V .
িক এই complexity ও যেথ না। এই ে বুি হেলা LCA (Least Common Ancestor).
যখনই একিট tree ত িট নােডর মােঝ িকছু একটা করেত বলেব তখন LCA ায় সময়ই কােজ
লােগ। s হেত root এ যাও আর t হেত root এ যাও। এই ই পােথ তা অেনক িল নাড থাকেত
পাের। আবার এই ই পােথই আেছ এরকম ব নাডও থাকেত পাের। এই উভয় পেথই থাকা নাড-
িলর মােঝ যিট root হেত সবেচেয় দূের থােক সিটই s ও t এর LCA. LCA কীভােব বর করেত
হেব তা না জানেল পেড় নাও। মূল আইিডয়া হেলা ি এর িতিট নােডর 20 , 21 , 22 , 23 . . . 2log V
তম parent িল বর কের রাখেত হয়। এখন আমরা যিদ ধু ওত তম parent না বরং ওত তম
parent এ যেত যই path তার মােঝর সবেচেয় বড় edge এর cost ও িলেখ রািখ তাহেল িক
আমরা s হেত c এবং t হেত c path এর সবেচেয় বড় cost এর edge ও বর কের ফলেত পারব,
যখােন c হল LCA. তাহেলই আমােদর সমাধান lca বর করার মত log V ত হেয় যােব।

LOJ 1128 Greatest Parent


সমস া: একিট 100,000 নােডর rooted tree আেছ। িতিট নােডর একিট weight আেছ। Tree
এর weight িল এমন হেব যন যেকােনা নােডর weight তার parent এর weight অেপ া
বিশ হয়। এখন তামােক ায় 50,000 query করা হেব। িত query ত তামােক v নাড এবং
w weight দওয়া থাকেব। তামােক বলেত হেব v নােডর সবেচেয় উপেরর (অথাৎ root এর
কাছাকািছ) কান ancestor এর weight, w এর সমান বা এর থেক বিশ।

সমাধান: তুিম যিদ LOJ 1101 কের থােকা তাহেল মেন হয় না এটা খুব একটা কিঠন লাগেব।
থম কথা, তুিম যিদ এেক tree না মেন কের একিট লাইন ক না কর তাহেল তা এটা binary
search ছাড়া আর িকছুই না। তাহেল িক আমরা tree এর িতিট নােডর জ তার সকল ancestor
দর িনেয় একিট িল বািনেয় রাখেবা আর query আসেল সই list এ binary search করব?
না তা হেব না। কারণ একিট লাইন ােফর কথাই িচ া কর (লাইন াফ মােন সই ােফ কােনা
branching নই)। এই ােফ i তম নােডর list এ i িট ancestor ক রাখেত হেব। তরাং তামার
V 2 জায়গা লেগ যােব। তাহেল িক উপায়? উপায় হেলা LCA এর মত কের িতিট নােডর জ
20 , 21 , 22 , 23 . . . তম ancestor রাখা। এরপর তুিম v থেক করেব। দখেব v এর 2k তম
ancestor এর weight w থেক ছাট িকনা, ছাট হেল 2 k−1
তম ancestor এর সােথ একই রকম
চক করেব। আর যিদ বড় বা সমান হয় তাহেল v ক সই 2k তম parent বানােব এবং একই ভােব
তার এবার 2k−1 তম parent চক করেব। খয়াল কর িত চক( শেষ িক) আমােদর k এর মান
এক কের কমেছ। তরাং আমরা k = log V থেক করেল O log V এর বিশ সময় লাগেব
না। আর log V এর বিশ k িনেয় করার দরকার নই তাই না (না বুঝেল LCA পেড় দেখা)?

৮৮
LOJ 1080 Binary Simulation

সমস া: একিট 100,000 সাইেজর 0-1 এর অ াের আেছ। ই ধরেনর অপােরশন থাকেত পাের।
এক- i হেত j পয সকল element ক flip কর অথাৎ 0 থাকেল 1, আর 1 থাকেল 0. ই- i তম
না ার কত তা ি ট করেত হেব। মাট operation এর সংখ া 50,000.

সমাধান: নানা ভােব এই সম া সমাধান করা যায়। এখােন আিম িতন


( রকম )সমাধােনর কথা বলব।
িতিট সমাধােনই আমােদর িত অপােরশেনর জ সময় লাগেব O log n .
থম উপায় হেলা lazy propagation. যারা জােনা না তারা আেগ lazy propagation পেড়
নাও। এখন এই সম ায় যখন বলেব কােনা রে flip করার কথা তখন সই র update করেত
িগেয় যই যই বড় বড় র পােব যােদর তামার update এর র পুেরাপুির cover কের সখােন
lazy রেখ আসেব। এরপর query এর সময় িনেচ নামার সময় যিদ lazy রেখ আসা কােনা রে র
িনেচ নামেত চাই তখন আমােদর সই lazy propagate করেত হেব। এই সমাধােন segment tree
এর িতিট নােড যই যই information রাখেত হেব স িল হেলা- এই রে কত িল lazy জেম
আেছ। তুিম চাইেল এখােন যত িল lazy জেম আেছ তার parity রাখেত পােরা (parity মােন সই
সংখ া জাড় নািক িবেজাড় তা)। কারণ 3 টা lazy জমা হওয়া আর 1 টা জমা হওয়া িক একই কথা।
এখন ি তীয় সমাধান দখা যাক। থম সমাধান িনেয় একটু িচ া কর। আেদৗ িক lazy ক
propagate করার দরকার আেছ? আমরা lazy রেখ চেল যাব। এরপর যখন বলেব য i তম
নােড িক আেছ 0 না 1, তখন আমরা segment tree এর উপর থেক i এর leaf পয যাব। আর
রা ায় দখেবা য এই i তম ানিট কতবার flip হেয়েছ। এই flip এর সংখ া আর িকছুই না যত িল
নাড িদেয় আমােক নামেত হেব তােদর lazy এর যাগফল। তাহেল আমরা এই সমাধােন lazy ক
propagate না কেরই সমাধান কের ফলিছ।
এখন তৃতীয় সমাধান। একটা িজিনস খয়াল কর, আমরা যিদ flip না করেত বেল বলতাম য i
হেত j পয 1 যাগ কর আর query এর সময় যিদ িজ াসা করতাম য অমুক ােন সংখ ার parity
কত (বা অমুক ােনর সংখ া কত) তাহেল এিট আমােদর সম ার equivalent. অথাৎ আমােদর মূল
সম া সমাধান করা আর পিরবিতত এই সম া সমাধান করা একই কথা। এই কাজ তা segment
tree এর সাহােয করাই যােব। িক binary indexed tree িদেয় কীভােব সহজ ভােব করেব?
যিদ BIT স েক জেন থােকা তাহেল বুঝেতই পারছ মূল সম া কাথায়। BIT এ আমরা একিট
segment ক update করেত পাির না। আমােদর সবসময় একিট index ক update করেত হয়।
আর query কের পাওয়া যায় 1 হেত i পয সংখ ার যাগফল। এই সম ায় আমােদর দরকার i
তম সংখ া আর update করা দরকার i হেত j. তরাং সরাসির সমাধান হেব না। একটু িচ া ভাবনা
করেত হেব।
ধরা যাক আমােদর অ ােরিট হেলা x1 , x2 , x3 . . .. আমরা এই অ ােরেক transform কের িলখব
x1 , x2 − x1 , x3 − x2 , . . .. তাহেল লাভ িক? থম লাভ, 1 হেত i তম সংখ া পয যাগ করেল
তুিম পােব x1 + (x2 − x1 ) + (x3 − x2 ) + . . . (xi − xi−1 ) = xi . বাহ আমরা xi পেয়
গলাম থম থেক i তম সংখ া পয যাগ কের। এখন মূল সম া, i হেত j পয 1 যাগ করেত
হেব, অথাৎ আমােদরেক xi , xi+1 . . . xj পয সংখ া িলর সােথ 1 যাগ করেত হেব। িক আমরা
তা আর x1 , x2 , x3 . . . রাখিছ না BIT এ, আমরা রাখিছ x1 , x2 − x1 , x3 − x2 , . . .. তাহেল এই
পিরবিতত sequence এ কী কী পিরবতন করেত হেব একটু িচ া কের দেখা তা! থমত i তম
সংখ ায় 1 যাগ করেত হেব কারণ i তম সংখ া হে xi − xi−1 , আর আমরা xi ক 1 বাড়াি ।
আর আমােদরেক j + 1 তম সংখ া থেক 1 িবেয়াগ করেত হেব কারণ সিট হেলা xj+1 − xj
(i বা j যিদ মাথায় হয় তাহেল একটু সাবধান হেত হেব হয়েতা)। আর িক কােনা সংখ ায় কােনা
পিরবতন করেত হেব না। কন? কাগজ কলম িনেয় িচ া কের দেখা তাহেলই বুঝেব। তরাং আমরা
পিরবিতত sequence এ ইিট update করব আর query করব হেত কােনা index পয
সকল সংখ ার যাগফল। অথাৎ আমরা BIT িদেয় আমােদর সম া সমাধান কের ফললাম।

৮৯
LOJ 1087 Diablo
সমস া: তামােক n িট সংখ া দওয়া আেছ (সেবা 100,000 িট)। সই সােথ সেবা 50,000 িট
(q) অপােরশন। ই ধরেনর অপােরশন হেত পাের। এক- আমােদর sequence এর শেষ একিট
নতুন সংখ া েবশ করােত হেব। ই- থম থেক k তম সংখ া কত? এই ে র উ র দবার পর
সই সংখ ােক ফেল দাও।

সমাধান: অব ই binary search tree িদেয় সমাধান করার চ া করব না। সটা হেব মশা মারেত
কামান দাগার মত। সহেজ কীভােব সমাধান করা যায়? একিট উপায় হেলা segment tree ব বহার
করা। একিট n+q সাইেজর অ াের িনেয় তার segment tree বািনেয় ফেলা। এই সময় থম n িট
ােন 1 আর শেষর q িট ােন 0 রােখা। যখনই k তম সংখ া চাইেব তুিম segment tree হেত k
তম 1 কাথায় তা বর কর। এজ একিট উপায় হেত পাের পিজশেনর উপর binary search করা
য "আিম এখন guess করিছ i তম ােন k তম 1 আেছ"। এবার query কের দখ য আসেলই
তা সিত িকনা। অথাৎ তামােক দখেত হেব 1 হেত i পয 1 এর যাগফল কত আর i এ 1 আেছ
িকনা। তুিম যিদ দখ য এই যাগফল k এর থেক বিশ বা i এ 1 নই তার মােন তুিম বুেঝ যােব য
k তম 1 আেছ i এর বােম। এরকম কের binary search করেত থাকেল তুিম k তম 1 পেয় যােব।
( 2 )
িক এর জ িত query এর complexity হেব O log n .
( )
এই কাজ তুিম খুব সহেজই O log n এ করেত পারবা। তুিম tree এর কােনা নােড এেস
দখেব এর left tree ত কত িল 1 আেছ আর right tree ত কত িল। এর উপর িভি কের তুিম
বুেঝ যােব কান িদেক k তম 1 আেছ। এভােব k তম 1 কান index এ আেছ তা বর কের ফলেত
পারেব। এটােতা গল থম অপােরশন। অপর অপােরশেনর (নতুন সংখ া েবশ করােনা) সময় তুিম
n এর পেরর ঘর ক 0 হেত 1 করেব, আবার ি তীয় বার যখন নতুন সংখ া েবশ করেত বলেব তখন
তার পেরর 0 ক 1 করেব এরকম কের চলেত থাকেব। অথাৎ আমােদর segment tree ত কােনা
একিট ােন 1 যাগ করেত হেব। আর কান id ত কান সংখ া আেছ তা তা আমরা একটা আলাদা
অ ােরেত িলেখ রাখেতই পাির। তুিম যখন segment tree হেত জেন যােব কান index এ k তম
সংখ া আেছ তখন সই id ত রাখা সংখ া দেখ িনেলই হেলা।

LOJ 1089 Points in Segments (II)


সমস া: তামােক িকছু র দওয়া আেছ (সেবা 50,000 িট)। সই সােথ িকছু সংখ া দওয়া আেছ
(সেবা 50,000 িট)। তামােক িতিট সংখ ার জ বলেত হেব সিট কত িল রে র ভতের আেছ।
রে র ই মাথা বা দ সংখ া িল 108 এর মত হেত পাের।

সমাধান: খুব একটা কিঠন সম া না। নানা ভােব এই সম ার সমাধান করা যায়।
একিট উপায় হেলা segment tree ব বহার করা। মেন কর দ িতিট [i, j] সগেমে টর
জ segment tree ত সই রে র পুেরাটু েত 1 যাগ করেব। এর পর িত query ত দখেত
হেব query এর ােন কত আেছ। িক এই সমাধােন সম া হেলা আমােদর সংখ া িল 108 পয
হেত পাের। তরাং আমােদর 108 সাইেজর অ ােরর segment tree করা লাগেব। যটা একটু বিশ
memory খেয় ফলেব। এখােন একটা িজিনস ল করার আেছ, সটা হেলা রে র ই মাথা বা
query এর না ার িল কত সটা কােনা ব াপার না, তােদর relative order ই ব াপার। অথাৎ
তামােক যিদ একিট র [1, 10] দয় আর query যিদ হয় 5 তাহেল এর সমাধান করা যা কথা,
র [1, 3] িনেয় 2 সংখ া িনেয় তার সমাধান করা একই কথা। তরাং আমরা সকল সংখ া িনেয়
( )
sort কের তােদরেক O n রে র না াের assign কের িদেত পাির অথাৎ sort করার পর (এবং
duplicate১ মুেছ ফলার পর) থম সংখ া 1, এরপেররটা 2, তার পেররটা 3 এরকম। এখােন সব
সংখ া মােন হল query এর সংখ া আর range এর ই াে র সংখ া। তামরা চাইেল একটু িচ া
১ Duplicate মুেছ ফলার একিট সহজ উপায় হল sort(A.begin(), A.end()) আর এর পর
A.erase(unique(A.begin(), A.end()), A.end()).

৯০
করেত পােরা এখােন segment tree ব বহার না কের LOJ 1080 এর মত কের BIT ব বহার কের
সমাধান করা যায় িকনা।
চাইেল segment tree বা BIT ছাড়াই এই সম া সমাধান করা যায়। একিট িব িনেয় িচ া
কের দেখা, যিদ তুিম কােনা ভােব এর বােম কয়িট রে র র মাথা আেছ, এর ডােন কয়িট আেছ,
বােম রে র শেষর মাথা কয়িট আেছ আর ডােনই বা কয়িট আেছ এই চারিট সংখ া জােনা তাহেল
িক তুিম বেল ফলেত পারেব এই িব িট কােনা রে র ভতের আেছ িকনা বা থাকেল কয়িট রে র
ভতের আেছ। আসেল চারিট সংখ ার দরকার নই, িট হেলই চেল। এই িব র আেগ বা ঐ িব র
ােন কত িল রে র র মাথা আেছ (A) আর ঐ িব র আেগ কয়িট রে র শষ মাথা আেছ (B).
তাহেল A − B হেব এই িব কত িল রে র ভতের আেছ তা। এটা খুব একটা কিঠন না। তুিম
র মাথা িনেয় একটা sorted array রােখা আর তােত িতিট িব র জ binary search কর
তাহেলই হেয় যােব। একই ভােব তুিম শেষর মাথা sorted array ত িনেয় binary search কের
B বর করেত পােরা। তাহেলই িতিট িব র জ সমাধান বর হেয় যােব।
চাইেল line sweep এর মত কেরও সমাধান করেত পােরা। মেন কর িতিট query এর িব ,
রে র র মাথা শেষর মাথা এসবেক এেককিট event িহসােব িনেল। এর পর সব event ক
sort কের ফেলা আর বাম িদক থেক line sweep কর। যিদ একিট রে র র মাথা পাও তাহেল
একিট counter ক বাড়াও। যিদ রে র শেষর মাথা পাও তাহেল সই counter ক কমাও। আর
যিদ কােনা query এর িব পাও তাহেল তার জ উ র হেব বতমান counter এর মান। সহজ না?
তেব যিদ একই িব েত যিদ query িব আর range এর বা শেষর মাথা থােক তাহেল একটু
সম া। কারণ র মাথা যিদ আেগ েসস কর তাহেল counter বাড়ােত হেব। আবার query িব
েসস করেল counter এর মান দখেত হেব। তরাং একই িব েত ইেভ ট িল িক অডাের েসস
করছ তা অেনক পূণ। তুিম িনেজ একটু িচ া কের দখেত পার িক অডাের েসস করা উিচত।
উ র হল- থেম র মাথা, এরপর query িব িল এবং সবেশেষ শেষর মাথা। এটা করা খুবই
সহজ, সট এর comparison function এ ক আেগ আসেব ক পের আসেব সখােন এসব লিজক
িলেখ িদেলই হেব। আরও সহজ হেব তুিম যিদ র মাথােক -1 িদেয়, query িব েক 0 িদেয় এবং
শেষর মাথােক 1 িদেয় কাশ কর, আর এই মােনর িভি েত যিদ তুিম সট কর (যখন িব র মান
একই হয় তখন)।

LOJ 1093 Ghajini


সমস া: তামােক 100,000 িট সংখ ার একিট অ াের a দওয়া আেছ। সই সােথ তামােক আরও
একিট সংখ া d দওয়া আেছ। তামােক v এর সবেচেয় বড় মান বর করেত হেব যখােন v =
a[i] − a[j] এবং abs(i − j) + 1 ≤ d. অথাৎ d এর বিশ দূের (index এর সােপে ) নই এরকম
িট সংখ ার সেবা difference বর করেত হেব।

সমাধান: আমরা যিদ সকল d দেঘ র subarray এর জ minimum এবং maximum বর করেত
পাির তাহেল আমােদর সম া খুব সহেজই সমাধান হেয় যােব। তুিম চাইেল এজ segment tree
ব বহার করেত পােরা। বা চাইেল "static ডটায় rmq" এর টকিনক খাটােত পােরা। অথবা চাইেল
prioirty queue ব বহার করেত পােরা। আমরা এখােন priority queue এর সমাধান বলব। আমরা
যিদ যেকােনা d দেঘ র subarray এর maximum বর করেত পাির তাহেল minimum ও বর
কের ফলেত পারব। তাহেল কীভােব maximum বর করব? আমরা বাম হেত ডান িদেক যাব এবং
এেক এেক সংখ া এবং তার index ক একিট structure এর ভতর ভের priority queue ত
পুশ করব। সই সােথ িতিট index এ এেস দখেবা সই মুহূেত priority queue এর top এ ক
আেছ। যিদ তার index আমােদর বতমান ােনর থেক d এর বিশ দূরে থােক তাহেল তােক ধের
ফেল দব (pop)। এরকম কের ধের ফেল িদেত থাকব যত ণ priority queue এর top এর
index বতমান ান থেক d এর বিশ দূরে থাকেব। যখন d এর বিশ দূের নয় এরকম index
পাব তখন সিটই হেব আমােদর maximum (এখান থেক বােমর িদেক d দূর পয )। এভােব

৯১
আমরা িতিট ােন িগেয় এর আেগর d ঘেরর মােঝ সবেচেয় বড় এবং সবেচেয় ছাট সংখ া বর
কের ফলেত পারব। তাহেলই তা আমােদর সম া সমাধান হেয় যায় তাই না?

LOJ 1267 Points in Rectangle (II)


সমস া: তামােক 2d ি েড 50,000 িট িব দওয়া থাকেব। সই সােথ তামােক 50,000 িট
আয়তে query িহসােব দওয়া হেব। তামােক িতিট আয়তে ে র জ বলেত হেব দ
িব িলর মােঝ কত িল িব তার ভতের আেছ। এখােন িব এবং আয়তে ে র coordinate 0
হেত 109 পয হেত পাের।
সমাধান: এই সম া সমাধােনর আেগ চাইেল LOJ 1266 সমাধান কের িনেত পােরা (এিট exercise
এ আেছ)। এর সােথ 1266 এর পাথক কাথায়? মূল পাথক িট জায়গায়। থমত এখােন িব -
িল আেগই দওয়া আেছ। আর এখােন coordinate অেনক বড় হেত পাের। আমরা "িব িল আেগ
আেগ দয়ার" িবধা িনেয় সমাধান করব।
আমরা y axis বরাবর একিট segment tree রাখেবা। এখন আমরা বাম হেত ডােন line
sweep করব। যখন কােনা একিট িব (x, y) পােবা তখন segment tree এর y এ আমরা
1 যাগ করব। আর যখন একিট আয়তে ে র বাম া পােবা তখন আমরা segment tree ত
query করব য [y1 , y2 ] এই range এর যাগফল কত। ধরা যাক এিট A. একই ভােব আমরা যখন
ডান া পােবা তখন আবার query করব, ধরা যাক এিট হেব B. তাহেল এই আয়তে ে র ভতের
B −A িট িব থাকেব। একটু সাবধান হেত হেব, খয়াল করেত হেব িব িক আয়তে ে র border
এ থাকেলও আমােদর count করেত হেব িকনা। সই অ সাের আমােদর A আর B গণনা করেত
হেব। তেব সিট বিশ details. আমরা যিদ মূল আইিডয়া বুিঝ তাহেল এটু এিদক ওিদক কােনা
ব াপার না। িচ া কের দখেত পােরা এই সম ায় BIT ব বহার করা যায় িকনা।

LOJ 1188 Fast Queries


সমস া: একিট 100,000 সংখ ার অ াের দওয়া আেছ। তামােক 50,000 query করা হেব। িত
query ত তামােক i এবং j দওয়া হেব। বলেত হেব i হেত j এর মােঝ কত িল িভ িভ সংখ া
আেছ। অ ােরর সংখ া িল 0 হেত 105 পয হেত পাের।
সমাধান: সম াটা েত একটু কিঠন লাগেব। িক তামরা যিদ একটা trick িশেখ যাও তাহেল
এধরেনর সম া সহজ হেয় যােব।
থমত খয়াল কর, কান কান range এ query হেব তা আেগই বলা আেছ। অথাৎ আমরা
offline এ তােদর েসস করেত পাির চাইেল। তরাং আমরা যা করব তাহেলা অ ােরর বাম হেত
ডােন যাব িকছুটা line sweep এর মত। আমরা যখনই কােনা একিট query রে র ডান াে
আসব তখন আমরা সই রে query করব। িক িক query করব? কীভােব আমরা বর করব
কত িল unique সংখ া আেছ? খুব একটা কিঠন না। মেন কর আমরা line sweep করেত করেত
এখন x তম index এ এেস গিছ। এখােনর সংখ ািট মেন কর A[x]. আমােদর যা করেত হেব
তাহেলা দখেত হেব এর আেগ িক A[x] কাথাও িছল িকনা। এিট একিট map রেখ খুব সহেজই
করেত পােরা। বা যেহতু সংখ া িল ছাট সেহতু একিট অ াের রেখও করেত পােরা। যিদ A[x] এর
আেগ থেক থােক তাহেল সই জায়গা শূ কের দব। আর x এর জায়গা 1 কের দব। তাহেল িক
হে খয়াল কর- এখন যিদ তুিম x এ থেক থােকা তাহেল x এর বােম সকল unique সংখ ায় এখন
1 আেছ আর বািক িলেত 0. ধু তাই না, মেন কর x এর বােম একািধক 10 আেছ। তাহেল শষ 10
এ 1 থাকেব, বািক 10 িলেত 0. এর ফেল যেকােনা মুহূেত query করেল সিঠক উ র আসেব।
একটা উদাহরণ দেখা- মেন কর আমােদর সংখ া িল হেলা 10 1 10. এখন মেন কর তুিম শেষ
আছ। এখােন ডান া আেছ এরকম র সমূহেত তুিম query করেব। তাহেল তুিমই বল কান 10
এ 1 রাখেব? িন য় ডােনরটায়? তা নাহেল তামার query যিদ তৃতীয় index হেত তৃতীয় index

৯২
এই হয় তাহেল আর উ র 1 পােব না। আবার িট 10 এই 1 থাকেল থম index হেত তৃতীয় index
এ query করেল িট 10 ই count হেয় যােব। তরাং কােনা একিট মুহূেত আমােদর একিট 10
এই 1 থাকেব, বািক িলেত 0. ধু তাই না এই 1 ওয়ালা 10 হেব সবেচেয় ডােনরটা (আবার এেতা
ডােন যন না হয় য সটা আবার x ক অিত ম কের)। তরাং আমরা segment tree বা BIT
ব বহার কের এই সম া সমাধান কের ফলেত পারব। ( 2 )
যিদ এই সম ােত query সমূহ online হত তাহেল এই সম া িত query O log n
time complexity ত সমাধান করা যত। এজ অব তামােদর merge sort tree ধরেনর
িকছু ব বহার করেত হত। তেব মূল আইিডয়া আমার বিণত সমাধােনই বলা আেছ। তামােদর আ হ
থাকেল এই সম ােক online মেন কের াি স করেত পার। আশা কির পের কােনা সময় আমরা
merge sort tree িনেয় আেলাচনা করব।

LOJ 1348 Aladdin and the Return Journey


সমস া: একিট 30,000 নােডর tree আেছ। িতিট নােডর একিট weight আেছ। তামােক ই
ধরেনর operation দওয়া হেব। এক- i এবং j দওয়া হেব, এেদর মােঝর যই path তােত থাকা
নাড িলর weight এর যাগফল ি ট করেত হেব। ই- i এবং v দওয়া থাকেব তামােক i নােডর
weight ক v ত পিরবতন করেত হেব। মাট operation এর সংখ া 100,000. Weight সেবা
1000 হেত পাের।
সমাধান: যিদ LOJ 1128 বা LOJ 1101 এর মত কের সমাধান করেত চাও তাহেল হেব না। কারণ
এখােন weight পিরবতন হে । LCA এর মত কের max, min বা sum তখনই বর করা যােব
যখন weight পিরবতন হেব না। তামরা চাইেল Heavy Light Decomposition এর মত কিঠন
টকিনক ব বহার কেরও এই সম া সমাধান করেত পােরা। তেব এর বশ র একিট সমাধান
আেছ। সমাধানিট এক কথায় বলা যায়- "Euler path এর উপর Segment Tree ব বহার কের
সমাধান"।
একিট tree এর euler path িচ ৬.১ এ দখােনা হেলা। Tree এর জ euler path এমন
কােনা কিঠন িজিনস না। একটা dfs tree আর িক- Child এর dfs ক call দবার সময় িনেচ নামা
আর ঐ নােডর পুেরা subtree েসস শেষ উপের উেঠ আসা। আমরা এই path এর edge িলেক
যিদ পর পর িলিখ তাহেল দাঁড়ােব b d h h d e i i j j e b c f k k l l m m f g g c. বুঝেতই পারছ
এখােন বড় হােতর B নােডর সােথ parent এর যই edge সিট হেলা ছাট হােতর b আর এভােবই
অ সব edge এর নাম দওয়া হেয়েছ। এখন একটা কাজ কর, িনেচ নামার সময় positive আর
উপের উঠার সময় negative দাও, অথাৎ +b +d +h -h -d +e +i -i +j -j -e -b +c +f +k -k +l
-l +m -m -f +g -g -c. মেন কর b হেলা B নােডর weight. তাহেল থেক যিদ তুিম +j পয
সব সংখ া যাগ কর তাহেল পাবা b+e+j বা root হেত J পয সকল নােডর cost এর যাগফল।
এখােন root এর cost a বাদ িগেয়েছ। িক আমার মেন হয় না সটা কােনা ব াপার। তামরা চাইেল
a সবসময় যাগ কের িনেত পােরা। বা চাইেল েত +a রাখেত পােরা অথবা, ক না করেত পােরা
য root এর parent হেত root এর যই edge তার cost a. অেনক ভােবই এই ব াপারটা handle
করা যায়। তাই সটা িনেয় মাথা ব াথার িকছু নই। তরাং এই প িতেত আমরা root হেত যেকােনা
node এর path এর সকল নােডর cost এর যাগফল পেয় যাব। িক আমােদর দরকার s হেত
t পয path এর নাড িলর cost এর যাগফল। এই ে একটা বুি আেছ। মেন কর s আর t
এর lca হেলা c. তাহেল cost(s, t) = cost(root, s) + cost(root, t) - 2cost(root, c) যখােন
cost(a, b) মােন হেলা a হেত b এর path এর নাড িলর cost এর যাগফল।
তরাং আমােদর কােছ যিদ দ tree এর euler path বর করা থােক তাহেল এই sequence
এর থেক কােনা নাড পয যাগফল বর কের কের আমরা s হেত t এর দূর বর কের
ফলেত পাির যেকােনা s এবং t এর জ । এখন কথা হেলা আমােদর কােছ িকছু update অপােরশন
দওয়া থাকেব যখােন নােডর weight পিরবতন হেত পাের। অথাৎ আমােদর sequence এর 2
িট element পিরবতন হেত পাের িত update এ। আমরা যিদ একিট segment ( tree ) বা binary
indexed tree রািখ তাহেল এই update এবং segment sum এর কাজ O log V সমেয় কের

৯৩
ফলেত পারব কারণ এই sequence এ 2V িট element
( থাকেব।
) আর এই দেঘ র একিট অ ােরর
segment tree এর update এবং query করেত O log V সময় লাগেব।

b c

B C

d e f g

D E F G

h i j k l m

H I J K L M

নকশা ৬.১: একিট tree এর Euler path

৬.১ অ শীলনী
৬.১.১ সম া
Simple
ˆ UVa 839 Not so Mobile ˆ UVa 699 The Falling Leaves
ˆ UVa 673 Parantheses Balance ˆ LOJ 1212 Double Ended Queue

Easy
ˆ UVa 297 Quadtrees ˆ UVa 712 S-Trees
ˆ UVa 536 Tree Recovery ˆ UVa 127 "Accordian" Patience
ˆ UVa 246 10-20-30 ˆ UVa 1322 Minimizing Maximizer

ˆ LOJ 1113 Discover the Web ˆ LOJ 1303 Ferris Wheel

ˆ LOJ 1082 Array Queries ˆ LOJ 1162 Min Max Roads

ˆ LOJ 1083 Histogram ˆ LOJ 1097 Lucky Number

ˆ LOJ 1103 Castle Walls ˆ LOJ 1112 Curious Robin Hood

ˆ LOJ 1135 Count the Multiples of 3 ˆ LOJ 1187 Lining up Students

ˆ LOJ 1207 Poster for Election ˆ LOJ 1266 Points in Rectangle

ˆ LOJ 1293 Document Analyzer

Medium
ˆ UVa 10562 Undraw the Trees ˆ UVa 12166 Equilibrium Mobile
ˆ UVa 806 Spatial Structures ˆ UVa 10410 Tree Reconstruction
ˆ UVa 1662 Brackets Removal ˆ LOJ 1081 Square Queries

ˆ LOJ 1120 Rectangle Union ˆ LOJ 1424 New Land

ˆ LOJ 1343 Aladdin and the Black Stones ˆ LOJ 1204 Weird Advertisement

ˆ Codeforces Round 121 Div 1 C Fools and Roads

৯৪
৬.১.২ িহ ট

LOJ 1212: Stl এর deque স েক না জানেল দেখ িনেত পােরা।


LOJ 1113: আিম আমার আেগর সমাধান দেখ িনেজই মু ! আিম ইিট stack রেখিছলাম।
একিট back এর জ আেরকটা forward এর জ । যখন আমরা back কমা ড পােবা তখন back
এর stack হেত উপেরর সাইটিট িনেয় forward এর stack এ পুশ কেরিছ। যখন forward কমা ড
পেয়িছ তখন forward থেক সাইট িনেয় back এর stack এ পুশ কেরিছ। আর নতুন সাইট visit
করেল forward এর stack ফাঁকা কের িদেয়িছ আর তােক back এর stack এ পুশ কেরিছ। র
সমাধান না?
( )
LOJ 1082: এই সম া segment tree ব বহার কের খুব সহেজই O n এ preprocessing
( ) ( )
এবং িত query O log n complexity ত সমাধান করেত পারেব। তেব তামরা চাইেল O n log n
( )
এ preprocessing এবং িত query O 1 এও সমাধান করেত পােরা। া ািমং কে ট বইেয়র
Data structure চ া াের "Static ডটায় Query" টিপেক এই িবষেয় আেলাচনা করা হেয়েছ।
LOJ 1083: এর সমাধান ইেতামেধ ই া ািমং কে ট বইেয়র stack এর অংেশ আেলাচনা করা
হেয়েছ (0-1 matrix এ সব 1 ওয়ালা সবেচেয় বড় আয়তে বর করার সমাধান দেখা)।
LOJ 1135: Segment tree এর একিট segment এ সংখ া িলর mod3 এর মান (0, 1 আর
2) কয়িট কের আেছ তার count রাখেত হেব। LOJ 1080 এর মত আমরা চাইেল lazy propagate
না করেলও পাির।
LOJ 1187: তুিম একিট array নাও। থেম array এর সকল ােন 1 থাকেব। এখন ধর আমােদর
দওয়া সংখ া িলর মােঝ শষ সংখ া হেলা x. এর মােন িক? এর মােন এর বােম x িট ছাট সংখ া
আেছ। এর মােন আমােদর array এর x + 1 তম 1 যখােন আেছ সিট হেলা আমােদর শষ সংখ া।
আমরা শষ সংখ া পেয় িগেয়িছ, তরাং এই সংখ া array ত 0 কের দাও। এখন আমােদরেক
দওয়া সংখ ােদর মােঝর পেরর সংখ া নাও আর একই ভােব array থেক বর কর কানিট তামার
সংখ া। এখন কথা হেলা খুব ত array এর উপর এই operation িল (k তম 1 বর করা এবং
কােনা একিট ানেক 1 থেক 0 করা) করবা কীভােব? অব ই segment tree!
LOJ 1207: এরকম সম ার ে েতই যটা িচ া করেত হেব তাহেলা কােনা একিট িনিদ
order এ তামােক poster িল েসস করেত হেব। হয় বাম থেক ডােন, অথবা উপর থেক িনেচ,
বা িনচ থেক উপের ইত ািদ। িনচ মােন হেলা যই poster আেগ লাগােনা হেয়েছ, আর উপর মােন
হেলা যই poster পের লাগােনা হেয়েছ। যমন এই সম ায় আমরা উপর থেক িনেচ েসস করব।
তাহেল কীভােব হেব? আমরা একিট কের poster িনব আর একিট array ত িলেখ রাখেবা য এই
এই জায়গায় ইেতামেধ কােনা একিট poster এর অংশ আেছ। ফেল যখন আমােদর জানার দরকার
হেব য- কােনা একিট poster দখা যােব িকনা, আমােদর যা করেত হেব তাহেলা array এর ঐ
অংেশ দখেত হেব কােনা ান আেছ িকনা যখােন এখেনা কােনা poster নই। আর এই কাজ তা
segment tree এর সাহােয করেত পারেব।
LOJ 1266: 2 dimensional BIT ব বহার কের খুব সহেজই এই সম া সমাধান করা যায়।
LOJ 1293: বেলমিট দাঁড়ায়- একিট অ াের দওয়া আেছ যােত নানা সংখ া দওয়া আেছ। এমন
একিট range বর কর যােত এই অ ােরেত থাকা সকল িভ িভ সংখ া ঐ range এ থােক। যিদ
এরকম একািধক range থােক তাহেল সবেচেয় ছাট range, আর তাও যিদ একািধক থােক তাহেল
সবেচেয় বােমর range আউটপুট করেত হেব। নানা ভােব এই সম া সমাধান করা যায়। একিট
উপায় হেলা ই হাত প িত। মেন কর আমােদর সংখ া িল হেলা 1 হেত n. তাহেল n সাইেজর
একিট অ াের নাও আর তা েত 0 কের দাও। আরও িট variable L এবং R নাও যােদর র
মান হেব 0. আরও একিট variable লাগেব যার কাজ হেলা L হেত R এর মােঝ কয়িট িভ সংখ া
আেছ তার count রাখা। এখন দেখা সই count িক n িকনা। n হেল L হেত R এই range একিট
candidate. এবার L এর মান এক বাড়াও। তাহেল একিট সংখ া বর হেয় যােব। তুিম count এর
অ ােরেত এই সংখ ার count এক কিমেয় দাও। যিদ দেখা এর ফেল এই সংখ ার count 0 হেয়

৯৫
গেছ এর মােন L হেত R এর ভতের িভ সংখ া একিট কেম গেছ। তরাং আমরা িভ সংখ ার
count ও এক কিমেয় দব। এবার মেন কর িভ সংখ ার count এখেনা n হয়িন। সে ে আমরা
R এর মান এক বাড়াব অথাৎ আমােদর L হেত R এর মােঝ একিট সংখ া বাড়েব। আমরা অ ােরেত
সই সংখ ার count এক বাড়াব। যিদ দিখ count বাড়ােনার আেগ সই count িট 0 িছল, এর
মােন িভ সংখ া একিট বাড়েছ। তরাং আমরা িভ সংখ ার count ও এক বািড়েয় দব। এভােব
যত candidate র পাওয়া যােব তােদর মােঝর best range ই আমােদর উ র হেব।
UVa 12166: িতিট bar ক horizontal থাকেত হেব। এখন তুিম যিদ সবেচেয় িনেচর bar ক
ক না কর তাহেল বুঝেব এই bar এর ই মাথার ভর সমান হেত হেব (ধরা যাক এর এক মাথায়
w ভর আেছ)। এই bar আবার যই bar থেক ঝুেল সই bar এ 2w ভর েয়াগ করেব। এর মােন
এর অ মাথােতও 2w ভর থাকেত হেব। আরও যিদ িচ া কর তাহেল বুঝেব d depth এ যিদ w
ভর থােক সিট root এ w2d ভর contribute কের। তাহেল আমােদর সমাধান িক? একটু যিদ
িচ া কর তাহেল বুঝেব য সকল ভেরর জ w2d বর করার পর যই সংখ ািট সবেচেয় বিশ বার
আসেব সই সংখ া িলর ভর িল থাকেব, বািক িল তামােক পিরবতন করেত হেব।
( )
LOJ 1081: এই সম া linear preprocessing এবং O 1 এ কীভােব সমাধান করেত হেব তা
া ািমং কে ট বইেয়র Adhoc টকিনক চ া াের বলা আেছ।
LOJ 1120: থমত আমােদর coordinate compress করেত হেব (না করেলও চলেব)। এরপর
আমরা বাম হেত ডােন line sweep করব। এজ আমােদর এমন একিট segment tree লাগেব
যখােন ই ধরেনর অপােরশন support করেব। এক- i হেত j পয এক কের বাড়াও। ই- পুেরা
অ ােরেত কত িল 0 আেছ। এরকম একিট segment tree যিদ বানােত পােরা তাহেল বািক টু
সমাধান হেয় যােব। তামােক rectangle িলেক বােমর মাথা আর ডােনর মাথা অ সাের sort
করেত হেব (এ িল এেককিট event)। ধরা যাক একিট rectangle হেলা (x1 , y1 ) − (x2 , y2 )
যখােন x1 ≤ x2 , y1 ≤ y2 . যিদ র মাথা পাও (x = x1 ) তাহেল rectangle এর উপর আর
িনেচর মাথার মােঝ তুিম 1 যাগ করেব (segment tree িট হেব y axis বরাবর) অথাৎ segment
tree ত [y1 , y2 ] রে 1 যাগ করেব। আর শষ মাথা পেল (x = x2 ) ঐ একই রে এক িবেয়াগ
করেব। আর িতবার দখেব segment tree ত কত িল 0 আেছ তােক যিদ তুিম x axis বরাবর
jump এর পিরমাণ িদেয় ন কর তাহেল এই jump এর মােঝ কত খািন অংশ ফাঁকা আেছ তা বর
হেয় যােব। এখােন Jump বলেত বুঝাি য x অে র এক event হেত পেরর event এর মােঝর
jump.
LOJ 1204: যিদ খয়াল কের থােকা য K মা 10 হেত পাের তাহেল আমার মেন হয় সহেজই
সমাধান হেয় যােব এ সম া। যিদ তাও সমাধান না পেয় থােকা তাহেল িচ া কর, K = 1 হেল
িক করেব, K = 2 হেল িক করেব এরকম। তমন িকছুই না, আমােদর segment tree ত K
সাইেজর একিট অ াের রাখেত হেব যটা বলেব i বার cover হেয়েছ এরকম কয়িট িব আেছ
[y1 , y2 ] রে । সই সােথ যেহতু আমােদর segment ধের update করেত হেব সেহতু আমােদর
lazy ব বহার করেত হেব। তেব lazy propagate করা যােব না। কন? তা তামরা K সাইেজর
অ াের update করার সময় বুঝেব! একই সােথ যেহতু coordinate অেনক বড় হেত পাের সেহতু
আমােদর coordinate compress করেত হেব। আর line sweep য করেত হেব তা আশা কির
ইেতামেধ ই বুেঝ গছ! যিদও সম াটা কিঠন না, িক একই সােথ অেনক িল টকিনক দরকার
এই সমাধােন তাই এিট একটু কিঠন।

৯৬
অধ ায় ৭

Greedy

Codeforces Round 26 B: Regular Bracket Sequence


(26B)
সমস া: একিট 106 দেঘ র bracket sequence দওয়া আেছ। অথাৎ "(" আর ")" স িলত একিট
string. তুিম চাইেল এই string হেত িকছু bracket মুেছ ফলেত পােরা। তামার ল হেলা
সবেচেয় বড় balanced bracket sequence ি ট করা।
সমাধান: আশা কির ইিতমেধ ই িশেখ গছ কীভােব stack ব বহার কের বা একিট counter রেখ
একিট bracket sequence কী balanced িকনা তা বর করেত হয়। এখন এখােন বেলেছ িকছু
ােকট মুেছ এটােক সবেচেয় বড় balanced bracket sequence বানােত। এর মােন আমােদরেক
যত কম স ব character মুছেত হেব। এখন আমােদর counter বা stack এর সমাধােনর কথা
িচ া কর। আমরা ( পেল এক বাড়াই বা stack এ সই character (আমােদর এই সমাধােনর ে
index রাখেত হেব) আর ) পেল এক কমাই বা stack হেত উপেরর element তুেল ফেল দই।
যিদ এই কমােনার সময় দেখা negative হেয় িগেয়েছ (বা stack হেত তুলেত িগেয় যিদ দখ য
stack ফাঁকা) তাহেল তা invalid sequence হেয় যােব, এর মােন এই closing bracket নওয়া
যােব না, তাই না? িক opening bracket এর িক হেব? সব েলা িনবা? যমন (() এরকম হেল
তা থম (বা ি তীয়) opening bracket িনবা না। িক এটা কীভােব বুঝা যােব? আবার counter
বা stack এর সমাধােনর কথা মেন কর। একটা condition তা িছল negative হওয়া যােব না,
আেরকটা condition িক িছল? সবেশেষ stack বা counter ফাঁকা িকনা। তাহেল এটা কীভােব
আমােদর সমাধােন ব বহার করব? সহজ, েসস শেষ আমােদর stack এ যই যই opening
bracket বািক থাকেব তােদর নব না- তাহেলই হেব। তরাং এভােব বুঝব আমরা কােদর নব
কােদর নব না। আমরা একটা boolean এর অ াের িনেত পাির য কােদর নব আর কােদর নব না
তা মাক করার জ । মাক করা হেয় গেল আমরা মাক না করা দর বাম হেত ডান পয ি ট করেলই
উ র পেয় যাব।

Codeforces 44 J: Triminoes (44J)


সমস া: একিট 1000 × 1000 সাইেজর ি ড দওয়া আেছ। ি ডিট দাবার বাড এর মত সাদা কাল
রঙ করা, অথাৎ িট সাদা ঘর পাশাপািশ না, আবার িট কাল ঘরও পাশাপািশ না। এই বাড এর
িকছু ঘর আবার কেট ফলা হেয়েছ। কাল ঘর b, সাদা ঘর w আর কাটা ঘর . িদেয় মাক করা
আেছ। তামােক এই বােড triminoes বসােত হেব। Triminoes এর সাইজ 1 × 3 নাহয় 3 × 1
হয়। শত হল triminoes িলর ই মাথায় সাদা ঘর থাকেত হেব আর মােঝ কােলা ঘর থাকেত
হেব। সই সােথ বােডর সকল ঘর ( যসব কাটা হয় নাই) তােদরেক triminoes ারা কাভার হেত

৯৭
হেব, আর triminoes ক বােডর বািহের থাকা যােব না। তামােক বাডিট trimino ারা কাভার
কের ি ট করেত হেব তেব কােনা একিট ঘর যন আবার একািধক trimino ারা কাভার না থােক।
ি ট করেতও একটু কায়দা করেত হেব। িতিট trimino ক a, b, c বা d িদেয় মাক করেত হেব।
অথাৎ পাশাপািশ একই অ েরর িতনিট ঘর থাকেল আমরা বুঝব য তারা একিট trimino. আর
খয়াল রাখেত হেব য পাশাপািশ িট trimino এর অ র যন একই না হয়। যিদ এই শত িল মেন
trimino বসান স ব না হয় তাহেল বল য সমাধান স ব না।

সমাধান: বশ র একিট সম া। একটু িচ া কের দখ কান কান ােন আমােদর trimino এক


ভােবই বসােতই হেব। মেন কর বােডর উপেরর সািরর কােনা একিট ঘর কােলা তাহেল আমােদর
অব ই horizontal ভােব একিট trimino বসােত হেব। একই ভােব যিদ বাম িদেকর কলাম বরাবর
একিট কােলা ঘর থােক তাহেল তােক কাভার কের আমােদরেক vertically একিট trimino বসােত
হেব। এছাড়া িক আমােদর কােনা গিত নাই তাই না? এ িল বসােনার পর আর কান েলােত
বসােতই হেব? একই ভােব ডােনর কলাম আর িনেচর সাির তাই না? িক এর পর? ভতেরর িদেকর
ঘর িনেয় িচ া করার আেগ একবার ভেব দখ তা বাইেরর যসব সাদা ঘর এখনও বািক আেছ তােদর
ে িক হেব? উপেরর সািরর সাদা ঘর িলর ে vertically আর বােমর কলােমর বািক সাদা
ঘেরর ে horizontally কের trimino বসােত হেব। এভােব িনেচর সাির আর ডােনর কলােমও।
তাহেল এভােব আমােদর চতুিদেকর ঘর িল কাভার হেয় যােব। একই ভােব আমরা ভতেরর িদেকর
বডােরর ঘর িল পুরন করব আর এভােব চলেত থাকেব। একটা িজিনস, যিদ দখ য উপের বাম
িদেকর কাণার ঘর কােলা বা বডােরর কােলা ঘর কাভার কের যখন সাদা ঘর িল কাভার কের trimino
বসাি েল তখন যিদ দখ য পােশর ঘের সাদা নই তাহেল িক কােনা সমাধান নই তাই না? কারণ
থম ে তার উপের বা বােম সাদা ঘর নই, পেরর ে ও তাই উপের বা বােম সাদা ঘর নই।
এই কথা অ া কাণার ঘেরর জে ও েযাজ ।
তাহেল আমােদর সম ার ায় সমাধান শষ, ধু বািক আেছ এই trimino দরেক a, b, c আর
d িদেয় মাক করা। এটা মেন হে বশ কিঠন কাজ। কীভােব বুঝা যােব য এই চারটা িদেয় রঙ করা
যােব বা যােব না? আ া, আমরা িক সবসময় এই চারটা িদেয় রঙ করেত পারব? একটু কাগেজ
কলেম চ া কের দখেত পার য চারটা িদেয় রঙ করা যায় না অথচ trimino বসান যায় এরকম
স ব িকনা। িকছু ণ চ া করেল দখবা য- না স ব না এরকম বাড বানােনা। যিদও এটা বুঝা
বা িব াস করা কিঠন িক তাও তুিম মেন করেত পার য আসেল যিদ trimino বসান যায় তাহেল
রঙও করা যােব। আসেল তামরা যিদ four color theorem জেন থাক তাহেল বুঝেব য চারিট
রঙ ারা সকল trimino রঙ করা স ব। এখন কীভােব রঙ করেব সটা িচ া কর। থমত আমােদর
একটু systematic ভােব বসােত হেব। যখােন সখােন trimino বসান যােব না, কারণ তা করেল
কােনা একিট trimino এর রঙ করা কিঠন হেয় যােব। আমরা িকছু ণ আেগ চতুিদেক বিসেয়িছলাম
trimino, আমরা চাইেল িক আেরকটু কম ছিড়েয় বসােত পাির? আমরা চাইেল মেন হয় চতুিদেক না
বিসেয় ধু উপের আর বােম বসােত পাির। এরপর বাড এক সাির আর এক কলাম ছাট হেয় যােব।
নতুন বােড আমরা আবার trimino বসাব উপেরর সাির আর বােমর কলােম। আমরা িক চাইেল
ধু উপেরর সািরেতও বসােত পাির। তাহেল বােডর সাইজ এক সাির কের কমেব। কাডও সহজ
হেব। মােন, থেম দখেব উপেরর রা ত কােনা কােলা ঘর আেছ িকনা, থাকেল তােক cover
কের একিট horizontal trimino বসােত হেব। এরপর দখ কােনা সাদা বািক আেছ িকনা, থাকেল
তােদর কাভার কের vertical trimino বসাব। এভােব যিদ বসাই তাহেল িক আমরা যখন একিট
trimino বসাব তখন এর সােথ লেগ থাকা trimino এর পিরমাণও িক কম। যখন আমরা trimino
ক vertically বিসেয়িছ তখন এর উপের একিট আর বােম ডােন ইিট trimino থাকেত পাের
(পের এেক লািগেয় অ কােনা trimino বসােত হেত পাের, তেব আমরা সিট িনেয় ভাবিছ না,
আমরা ভাবিছ এেক বসােনার সময় ইেতামেধ ই কয়িট trimino এেক শ কের আেছ)। যখন একিট
trimino ক horizontal ভােব বিসেয়িছ তখন অব া একটু ি িক। উপের খুব জাড় একটা trimino
থাকেব, কারণ horizontally একিট trimino বসােল এর উপর একিট সাদা ঘর থাকেত পাের, আর
ডােন বােম খুব জাড় একটা কের বসান যায়। তরাং ই ে ই তামার কােছ চারিট রেঙর মােঝ
একিট রঙ অব ই বািক থাকেব। ব াস হেয় গল! তেব আমার মেন হয় িক য মা িতনিট রঙ িদেয়ই
এেদর রঙ করা স ব। তামরা একটু িচ া কের দখেত পার!

৯৮
Codeforces 45 D: Event Dates (45D)
সমস া: N িট ভ ািরেয়বল আেছ। িতিট ভ ািরেয়বেলর জ একিট কের র আেছ, ধরা যাক i
তম ভ ািরেয়বেলর জ এই র হে [li , ri ]. তামােক িতিট ভ ািরেয়বেলর জ একিট মান
িনবাচন করেত হেব যন একািধক ভ ািরেয়বেলর মান একই না হয় এবং িতিট ভ ািরেয়বেলর মান
তার রে র মােঝ হয়। এখােন N ≤ 100 এবং 1 ≤ li ≤ ri ≤ 107 . আর এটা বলা আেছ য
দ সকল test case এর জ সমাধান আেছ।
সমাধান: Greedy এর খুব কমন একিট সম া। আিম এখােন এমন একিট সমাধান বলব যটা N
এর বড় মােনর জ ও কাজ করেব। থেম একিট তুলনামুলক খারাপ সমাধান বিল এরপর তােক
উ িত করব।
থেম সকল ভ ািরেয়বল unassigned. এরপর আমরা i এর একিট লুপ চালাব যিট 1 হেত
107 এ যােব। িতিট i এ িগেয় দখব য এখান থেক কােনা ভ ািরেয়বেলর র হয় িকনা। হেল
আমরা সই ভ ািরেয়বলেক active িহেসেব মাক করব। এরপর এখন যসকল ভ ািরেয়বল active,
তােদর মােঝ যিটর r এর মান সবেচেয় ছাট, তার মান i assign করব এবং এই ভ ািরেয়বলেক
আর active রাখব না। এভােব সব ভ ািরেয়বেলর মান assign করেলই হেব। িক কােনা এক
সমেয় এেস যিদ এমন হয় য, আমরা i এ আিছ, কােনা একিট ভ ািরেয়বল active আেছ িক i সই
active variable এর r এর থেকও বিশ, এর মােন আমােদর এই সম া তখন সমাধান করা যােব
না। যিদও এই সম ায় এরকম কখনও হেব না, কারণ বলা আেছ য সবসময় সমাধান থাকেব। িক
হয়েতা অ সম ায় সবসময় সমাধান নাও থাকেত পাের। যাই হাক, এই প িতেত আমােদর সময়
লাগেছ N × 107 কারণ আমরা িতিট ােন িগেয় সকল ভ ািরেয়বেলর উপর লুপ চািলেয় িনবাচন
করিছ কান ভ ািরেয়বেল মান assign করব।
আমরা i এর লুপ না চািলেয় একিট heap বা priority queue ব বহার করেত পাির। তাহেল
িক আমােদর সময় কেম 107 log N হেয় যােব। এই heap এ থাকেব বতমােন active সকল
ভ ািরেয়বল এবং তােদর r এর মান। এেদর মােঝ r যার সবেথেক কম স এই heap এর সবেচেয়
উপের থাকেব। অথাৎ আমােদর সমাধান হল, আমরা আেগর মত i এর লুপ চালাব। কােনা একিট
i এ এেস থেম দখব এখােন কান কান ভ ািরেয়বেলর র হয়, তােদর আমরা heap এ
ঢুিকেয় দব। এরপর দখব heap এ কউ আেছ িকনা, থাকেল সবেচেয় উপেরর ভ ািরেয়বল িনব
এবং তােক i মান দব। ( )
এই সমাধানেক আেরকটু িচ া কের O N log N এ কমােত পার। খয়াল কর কান র কা-
থায় হেয়েছ এটা ওতটা পূণ না। পূণ হল তােদর order. আমরা েতই ভ ািরেয়বল
িলেক সট করব। সট করার criteria হেব- তােদর রে র র মাথা। অথাৎ যােদর র আেগ
হয় তারা আেগ থাকেব। এখন তুিম একিট variable নাও ধরা যাক i যা িনেদশ করেব তুিম এখন
কান মােন আেছ। িঠক উপেরর i এর মত। িক আমােদরেক এই i এর লুপ চালােত হেব না। আের-
কটা variable রােখা, ধরা যাক at, যা আমােদর variable এর অ ােরেত একিট ান িনেদশ করেব।
েত at অ ােরর র ান িনেদশ করেব। আর i এর র মান হেব 1. সই সােথ আমােদর একিট
priority queue থাকেব যা েত ফাঁকা থাকেব। আেগর মতই এই priority queue ত থাকেব
ভ ািরেয়বল িল আর যই ভ ািরেয়বল এর রে র শষ মাথা ছাট তা থাকেব priority queue এর
উপের। এখন একিট while লুপ চলেব যত ণ না সব ভ ািরেয়বল েসস হেয় যায়। এখন কথা হল
লুেপর ভতের িক করবা।

ˆ থেম দখ য at যােক পেয় ট কের আেছ তার র মাথা িক i এর সমান িকনা। তাহেল
at যােক পেয় ট কের আেছ সই ভ ািরেয়বলেক priority queue ত েবশ করাও, at ক
অ ােরর পেরর ভ ািরেয়বেল পেয় ট কর আর while loop ক continue কর।
ˆ যিদ উপেরর condition সিত না হয় তাহেল চক কর য তামার priority queue ফাঁকা
িকনা। যিদ ফাঁকা হয় তাহেল at যােক পেয় ট কের আেছ তার রে র র মাথার মান i এর
মান িহসােব সট কর আর while loop ক continue কর।
ˆ যিদ উপেরর কােনা condition ই সিত না হয় তার মােন আমােদর priority queue ত
কউ না কউ আেছ। এখন priority queue থেক উপেরর ভ ািরেয়বল তুল আর দখ তার

৯৯
রে র শষ মাথার ভতের িক i আেছ িকনা। যিদ না থােক তার মােন এই সম ার সমাধান
নই (যিদও এই সম ার ে সবসময় সমাধান থাকেব বেলেছ)। যিদ i ভতের থােক তাহেল
এই ভ ািরেয়বল ক i মান দাও। i এর মান এক বাড়াও আর while loop ক continue কর।
( )
তাহেলই O N log N এ এই সম া সমাধান হেয় যােব।

Codeforces Round 57 D: Eternal Victory (61D)


সমস া: তামােক একিট n নােডর ি দওয়া আেছ। এর মান সেবা 100,000 হেত পাের। ি র
িতিট edge এর cost হেব non-negative এবং সেবা 20000. তামােক সবেচেয় কম খরেচর
path বর করেত হেব যা 1 হেত আর কের সকল নাড ঘুের যেকােনা নােড শষ হয়।
সমাধান: এিটও বশ কমন সম া। মেন কর তামােক বলল য 1 হেত আর কের 1 এ এেসই শষ
করেত হেব। তাহেল উ র িক হত? সহজ, সকল edge এর cost এর যাগফেলর ি ন। কন?
িকছুটা dfs এর মত কের traverse করেত পার। িনেচ যেত থাকবা যত ণ যাওয়া যায়, এর পর
িফের এেস আবার িনেচ যাওয়ার চ া করেব এরকম ভােব করেল আসেল িতিট edge িদেয় একবার
মা নামবা আর একবার মা উঠবা।
এখন এখােন বেলেছ তুিম যেকােনা ােন শষ করেত পারবা। এর মােন তুিম যখােন শষ কেরছ
সখান থেক 1 এ ফরত আসার দরকার নই। তরাং বুঝেতই পারছ য 1 হেত য নােড যেত
সবেচেয় বিশ cost লােগ, সই সবেচেয় েরর নােড যিদ তুিম শষ কর তাহেলই তামার লাভ।
এর মােন এর আেগর উ র হেত সবেচেয় েরর নােডর cost িবেয়াগ হেব।

Codeforces Round 66 B: Need For Brake (73B)


সমস া: একিট রিসং খলায় N জন খেলায়াড় আেছ এবং তােদর বতমান পেয় ট a1 , a2 , . . . aN .
েত েকর নামও দওয়া আেছ। এখন একিট রস হেব যখােন থম m ান অজনকারীেদর যথা েম
b1 , b2 , . . . bm পেয় ট দওয়া হেব। তুিম থম খেলায়াড় অথাৎ তামার বতমান পেয় ট a1 . তামা-
ক বলেত হেব তুিম সবেচেয় ভাল কততম ান দখল করেত পার আর সবেচেয় খারাপ কততম ান
দখল করেত পার। যিদ রস শেষ একািধক খেলায়ােড়র পেয় ট সমান হয় তাহেল তােদর নােমর
lexicographical order এ তােদর rank করা হেব। N ≤ 105 .
সমাধান: একটু িচ া করার সম া। থমত আমরা মেন করেত পাির য m = n কারণ তা নাহেল
আমরা ই া মত অিতির bi = 0 িনেত পাির। থেম বর করা যাক আিম কত খারাপ ান পেত
পাির। এজ অব ই আমােক সবেচেয় ছাট bi পেত হেব। এখন কথা হল অ েদরেক আিম কীভােব
bi িল িদেল সেবা জন আমার চেয় ভাল rank পােব। আমরা থেমই বািক পেয় ট িল সট কের
নই এবং সই সােথ বািক খেলায়াড় দরও সট কের নই। এবার তুিম সবেচেয় খারাপ খেলায়াড়েক
নাও, এবং দখ এেক যিদ তুিম সবেচেয় বড় score দাও তাহেল তার rank িক তামার থেক ভাল
হয় িকনা, হেল তােক সই পেয় ট দাও এবং একই ভােব এর পেরর খারাপ খেলায়াড় আর পেরর বড়
পেয় ট িনেয় একই চ া কর। আর না হেল, এই খেলায়াড়েক বাদ িদেয় পেরর খারাপ খেলায়াড়
নাও এবং তােক এই সবেচেয় বড় পেয় ট দবার চ া কর। এরকম কের তুিম যিদ চ া করেত( থাক
)
তাহেল সবেচেয় বিশ খেলায়াড় তামার থেক বিশ rank পােব। এই কাজ িক তুিম O n এ
খুব সহেজই করেত পারেব, তামােক ধু িট অ ােরেত িট index ক পেয় ট কের রাখার জ িট
ভ ািরেয়বল লাগেব।
িঠক উলেটা কের তুিম কীভােব বর করেব তুিম সবেচেয় ভাল কত rank পােব? অব ই এই
ে তুিম সবেচেয় বড় score নেব। এখন কথা হল বািক score িল বািক দর মােঝ কীভােব
িবতরন করেল সবেচেয় কম জন তামার উপের থাকেব বা সবেচেয় বিশ জন তামার িনেচ থাকেব।
আেগর মতই বািক score এবং বািক খেলায়াড় দর সট কের ফল। আবােরা সবেথেক খারাপ
খেলায়াড়েক নাও িক এবার দখ সবেচেয় বড় কান score িদেল এ তামার িনেচ থাকেব, তােক

১০০
সই score িদেয় দাও। এরপর পেরর খারাপ খেলায়াড় নাও এবং একই ভােব দখ এেক সবেচেয়
বড় কান score িদেল স তামার িনেচ থাকেব। এভােব তুিম যিদ score
( )িল assign কর তাহেল
দখেব য সবেচেয় বিশ জন তামার িনেচ থাকেব। এই কাজও তুিম O n এ খুব সহেজই করেত
হেব। অথাৎ তুিম িট িল সট করার পর িলিনয়ার সমেয় বািক সম াটু সমাধান করেত পারেব।
এধরেনর সম ার ে binary search ও অেনক সময় কােজ লােগ। যমন তামরা চাইেল
এই সম া binary search িদেয়ও িচ া করেত পার। মেন কর তামরা binary search কের িঠক
করেব য "কমপে g সংখ ক লাকেক আমার উপের রাখা স ব িকনা"। এবার এই ে র জবাব
তুিম দবার চ া কর তাহেলই সমাধান হেয় যােব।

Codeforces Round 79 Div 1 D: Castle (101D)


সমস া: একিট n নােডর rooted weighted ি আেছ (n ≤ 105 )। অথাৎ িতিট edge এর একিট
কের weight আেছ (weight ≤ 1000), মেন করেত পার কােনা একিট edge এর এক মাথা হেত
অপর মাথায় যেত যত সময় লােগ সিটই weight. তুিম ি িটর root হেত আর কের এেক এেক সব
নাড ঘুরবা। শত হেলা এই ঘুরার সময় তুিম এক edge ই বােরর বিশ ব বহার করেত পারেব না।
Root বােদ বািক কােনা একিট নােড treasure আেছ। কান নােড আেছ সটা তুিম আেগ থেক
জােনা না। ি এর কান edge এর weight কত তা তুিম আেগ থেক জান। তামােক treasure
খুঁেজ পাবার expected সময় কমােত হেব।
সমাধান: কােনা edge ই বােরর বিশ ব বহার করব না আবার সকল নাড িভিজট করব এর মােন
হেলা আমরা একিট ি এর dfs traversal বা euler tour এর মত কের িভিজট করব। অ ভােব
বলা যায়, মেন কর তুিম যিদ কােনা নােড আস তাহেল এর িনেচর পুেরা subtree িভিজট না কের
িফের যাবা না। কারণ িফের গেল তা তামার নাড হেত তামার parent এর যই edge তা ই
বার ব বহার হেয় যােব। আর আমােদর বলা আেছ কােনা edge বােরর বিশ ব বহার করা যােব
না। এখন কথা হল, কােনা নােডর িনেচর পুেরা subtree ক িভিজট করার সময় যিদ treasure
পেয় যাও তাহেল সটা আলাদা কথা, িক যিদ না পাও তাহেল পুেরা subtree িভিজট কের ফরত
যাবা এবং সই ে খরচ লাগেব পুেরা subtree এর edge সমুেহর weight যাগ করেল যত হয়
তার ি ন। কন? কারণ িতিট edge এর ে তুিম িনেচ নামার সময় একবার আর ফরত যাবার
সময় একবার, মাট ইবার কের িতিট edge ব বহার করছ।
তাহেল হেলা আমরা িক অডাের একিট নােডর িনেচ থাকা subtree িল িভিজট করব?
খয়াল কর, িক অডাের িভিজট করব তা িক fixed. এমন না য িকছু দূর ঘুরলাম এর পর িঠক করব
বািকটু কীভােব ঘুরব। বরং কার পের কই যাব তা আেগ থেকই িনধািরত। যিদ এর মােঝ কােনা
এক সমেয় treasure পেয় যাই তাহেল সখােনই শষ, আর না পেল আেগ িনধািরত রা ায় যেত
থাকব। তরাং যখন একিট নােড আছ তখন এটা fixed য কান subtree এর পর কান subtree
যাব। আমরা যিদ এই অডারটা বর করেত পাির তাহেলই সমাধান হেয় যােব।
মেন কর আমরা এখন যই নােড আিছ তার child সমুেহর জ উ র জািন। অথাৎ সসব child
এ গেল এবং সসব child এর subtree ত যিদ treasure থােক তাহেল expected কত সময়
লােগ তা খুঁেজ বর করেত আমরা জািন। ধরা যাক i তম child এর জ এই উ র হেলা ai (অথাৎ
আমরা ধের িনি য এই subtree ত আমােদর treasure আেছ, এখন বলেত হেব optimal ভােব
আমরা যিদ িভিজট কির তাহেল expected কত সময় লাগেব সই treasure বর করেত) আর এই
ai এ parent হেত i তম child এর edge এর weight ও আেছ। আরও ধরা যাক i তম child এর
subtree এর সাইজ si . িহসােবর জ আমােদর আরও কেয়কিট সংখ া জানার দরকার। একিট হেলা
আমরা∑ বতমােন যই নােড আিছ তার subtree সমুেহ মাট কত িল নাড আেছ, ধরা যাক m িট
(= si ). আর i তম subtree এর সকল edge এর weight এর যাগফেলর ি ন ধরা যাক Ti
(parent হেত i তম child এর edge এর weight সহ)। মেন কর আমরা যই নােডর জ উ র বর
করিছ তার k িট child আেছ। আমার মেন হয় এই সংখ া িল জানেলই হেব। এখন মেন কর আমরা
থেম 1 ন র child এর subtree ঘুরব, এরপর 2 ন র এরকম কের k ন র। তাহেল আমােদর
expected কত সময় লাগেব? এখােন আমরা চাইেল probability খাটােত পাির। থম subtree

১০১
ত treasure থাকার স াবনা s1 /k, সই ে সময় লােগ a1 . ি তীয় subtree ত treasure
থাকার স াবনা s2 /k, সই ে সময় লােগ T1 + a2 . কন? কারণ আমরা থেম থম subtree
খুঁেজিছ এবং পাই নাই ( তরাং T1 সময় লেগ িগেয়েছ) এরপর এই subtree ত এেসিছ এবং
treasure খুঁেজ পেত a2 সময় লেগ িগেয়েছ। এরকম কের k িট child. তরাং এেদর সবাইেক
যাগ করেল দাঁড়ায় s1 /k ∗(a1 )+s2 /k ∗(T1 +a2 )+. . .+sk /k ∗(T1 +T2 +. . . Tk−1 +ak ).
এবার মূল , এই k িট child ক কান অডাের িভিজট করেল আমােদর cost সবেচেয় কম হেব।
এে ে সাধারনত যটা দখেত হয় তাহল কার আেগ থাকা উিচত i নািক i + 1 সটা দখা। i যিদ
আেগ থােক তাহেল তা আমরা জািন আমােদর মাট cost কত। তাও আমরা একটু অ ভােব sum
টােক িলিখ- s1 ∗(a1 )+. . .+si ∗(T1 +T2 +. . . Ti−1 +ai )+si+1 ∗(T1 +. . . Ti +ai+1 )+. . .
যেহতু 1/k একিট constant তাই এেক বাদ িদেয় িদেয়িছ। এখন একটু ক কের বর কর যিদ
i + 1 আেগ থােক তাহেল cost কত- s1 ∗ (a1 ) + . . . + si+1 ∗ (T1 + T2 + . . . Ti−1 +
ai+1 ) + si ∗ (T1 + . . . Ti−1 + Ti+1 + ai ) + . . .. যিদ আমরা ধির i আেগ থাকার cost A
আর i পের থাকার cost B তাহেল এখন বলেত হেব ক বড় A নািক B? চ া কের দখা যাক।
আমরা A − B বর কের দিখ A − B = si+1 ∗ Ti − si ∗ Ti+1 . তরাং i তম subtree আেগ
থাকা উিচত যিদ A − B < 0 হয় বা Tsii < Tsi+1 i+1
হয়। এর মােন আসেল আমােদরেক subtree
সমুহেক Ti /si অ সাের সট করেত হেব। তাহেলই হেব। খয়াল কর আমরা এখােন ধু পাশাপািশ
িট িজিনস compare কেরিছ। আমােদরেক িক পাশাপািশ নয় এরকম িজিনসও িহসাব কের দখেত
হেব? সাধারণত তার দরকার হয় না। তুিম চাইেল খেট খুেট সই িহসাব করেত পার। িক আমার
দখা মেত বিশর (হয়েতা সবসময়) ভাগ সময়ই ধু পাশাপািশ দখেলই চেল।

Codeforces Round 99 Div 1 D Digits Permutation (138B)

সমস া: একিট n দেঘ র সংখ া দওয়া আেছ (n ≤ 105 )। তামােক এই সংখ ার অংক িলেক
permute কের আলাদা আলাদা িট সংখ া বানােত হেব। চাইেল িট সংখ া একই হেত পাের। শত
হল এই িট সংখ া যাগ করেল সবেচেয় বিশ সংখ ক 0 শেষ থােক। যমন তামােক দওয়া সংখ া
যিদ হয় 198 তাহেল তুিম চাইেল 981 আর 819 বানােত পার এেত কের শেষ িট শূ থাকেব-
981 + 819 = 1800. তুিম চাইেল তামার সংখ ার েত শূ রাখেত পার।

সমাধান: খুব একটা কিঠন সম া না। একদম ডােনর িট যাগ করেল 10 হেব। এরপর পেরর ল
যাগ করেল 9 হেব আর তাহেল 10 এর হােতর 1 এই 9 এর সােথ যাগ হেয় 10 হেব। যমন উপেরর
উদাহরেনও এই একই ঘটনা ঘেটেছ। তরাং আমরা 10 বানােত পাির এভােব- (1, 9), (2, 8) . . .
আর 9 বানােত পাির এভােব- (0, 9), (1, 8), (2, 7), . . .. তাহেল আমরা যটা করব আমরা একটা
লুপ চািলেয় িঠক করব কান ভােব আমরা এই 10 বানাব। এরপর সেবা 9 কীভােব বানােনা যায়
সটা িক greedy, কারণ তুিম জান উপেরর কার সােথ িনেচর কােক িমলােত হেব। তরাং এেদর
জেনর মােঝ সবেচেয় কম সংখ ক তুিম িনেত পারেব। যমন মেন কর উপের 1 আেছ x িট আর িনেচ
8 আেছ y িট, তাহেল তুিম এেদর িনেয় min(x, y) িট 9 বানােত পারেব।
িক উপেরর সমাধান স ূণ িঠক নই। তুিম যিদ িকছু case িনেয় িচ া কের দখ তাহেলই
বুঝেব। যমন 10 এর ে উপেরর সমাধান বলেব কােনা শূ থাকেব না শেষ িক আমরা
চাইেল 10 + 10 = 20 করেত পাির। অথাৎ 0 + 0 = 0 এর case আমরা িঠক ভােব াে ডল কির
নাই। আেগর সব িকছুই িঠক আেছ ধু আেরকটা িজিনস চ া করেত হেব তাহল শেষ িট সংখ ারই
িকছু 0 থাকেত পারেব। কত িল? তােতা আমােদর জানা নই! উপায় িক? একিট লুপ চািলেয়
দাও কত িল 0 শেষ থাকেব তার উপর, এর পর আেগর মত কের লুপ চািলেয় বর কর শেষর 10
কীভােব বানাবা এবং এরপর কত িল 9 বানােনা যায়। তাহেলই হেব।

১০২
Codeforces Round 100 C New Year Snowmen (140C)
সমস া: n িট সংখ া আেছ (n ≤ 105 ). তামােক এেদর হেত িতনিট কের িভ িভ সংখ া িনেয়
একিট সট বানােত হেব, অথাৎ এেদর কােনা িটই যন সমান না হয়। বলেত হেব এরকম সেবা
কতিট সট বানােনা যােব।
সমাধান: থেম আমরা বর কের নই কান সংখ া কয়বার কের আেছ। এখন খয়াল কর, আমােদর
optimal solution এ অব ই এরকম একিট সট থাকেব যােত সবেচেয় বিশ বার থাকা সংখ ািট
আেছ। কন? কারণ মেন কর য এরকম কােনা সট নই। তাহেল আমরা িক চাইেলই যেকােনা
সট হেত যেকােনা সংখ া সিরেয় আমােদর সই সবেচেয় বিশ বার থাকা সংখ ািট িনেত পাির না?
অব ই পাির। এখন িচ া কর, আমরা িক এরকম সট িনেত পাির যােত সবেচেয় বিশ বার থাকা
িট সংখ া আেছ (অথাৎ য িট সংখ া সবেচেয় বিশ বার আেছ)? দখা যাক। মেন কর সবেচেয়
বিশ বার আেছ A এর পর B. আমােদর কােছ যিদ {A, B, ?} এর মত সট থােক তাহেল তা হেয়ই
গল। মেন কর নই। িক িকছু ণ আেগই আমরা দেখিছ A ওয়ালা একিট সট অব ই আেছ।
ধরা যাক সই সটিট হল {A, X, Y }. এখন খুঁেজ দখ এমন কােনা সট আেছ িকনা যখােন B
আর X একই সােথ নই। এরকম সট খুঁেজ পাওয়া স ব কারণ B এর পিরমান X এর থেক বিশ।
যিদ এরকম কােনা সট না থােক তার মােন অিতির B আেছ এবং সিট িদেয়ও কাজ চালান যােব।
তাহেল এই িটর যিটই ঘটুক না কন আমরা X এর পিরবেত B বসােত পারব। একই ভােব আমরা
এর পেরর বড় সংখ ার জ ও একই রকম িজিনস মাণ করেত পাির। এর মােন দাঁড়াল আমরা যিদ
সবেচেয় বিশ আেছ এরকম িতনিট সংখ া িনেয় সট গঠন কির তাহেলই optimal solution পাওয়া
যােব। এরকম কের িতবার আমরা সবেচেয় বিশ আেছ এরকম িতনিট সংখ া িনেয় িনেয় সট গঠন
করব।

Codeforces Round 109 Div 1 A Hometask (154A)


সমস া: তামােক character এর িকছু forbidden pair দওয়া আেছ (pair এর character িট
আলাদা হেব)। অথাৎ িত pair এর character িল পাশাপািশ থাকেত পারেব না। এরকম সেবা
13 িট pair দওয়া আেছ। সই সােথ একই character একািধক forbidden pair এ থাকেব
না। তামােক একিট ি ং দওয়া আেছ যার দঘ সেবা 105 হেত পাের। তামােক এই ি ং হেত
সবেচেয় কম সংখ ক character মুেছ ফলেত হেব যন কােনা forbidden pair না থােক। যমন
তামার ি ং যিদ হয় ababa এবং একিট forbidden pair থােক- ab তাহেল তুিম ইিট b মুেছ
ফেল aaa বািনেয় ফলেব। এর থেক কেম স ব না।
সমাধান: মেন কর ি ংিটর তুিম বাম হেত ডােন আসছ। পরপর িট character িনেয় যিদ দখ এরা
forbidden pair তাহেল তা এেদর এক জনেক মুছেত হেবই। কানিটেক মুছবা? মেন হয় পেরর
জনেক। কারণ থম জনেক মুছেল এই pair টা ভে গল আর কােনা লাভ নই। িক পেরর জনেক
মুছেল হয়েতা এই পেরর জন আর তার পেরর জন িমেল যিদ আেরকিট pair তির কের রােখ তাহেল
তারাও মরল! যমন aba হেল আর আমােদর forbidden pair যিদ ab হয় তাহেল আমরা যিদ
থম a মুিছ তাহেল কােনা লাভ হে না, আরও একিট character মুছেত হেব। িক যিদ আমরা
b মুিছ তাহেল পেরর forbidden pair ও ভে যাে । তরাং আমােদর পেরর character মুছা
লাভ জনক।
তেব তুিম যিদ আরও একটু িচ া কর তাহেল দখেব abbbb মাকা ি ং এর ে এই সমাধান
খােট না। কারণ এখােন a মুছা লাভ জনক। এজ greedy সম ার ে খুবই সাবধান হেত হয়।
কান িদক িদেয় কান anti case উদয় হয় িঠক নাই। থেম যই সমাধান মেন হেব একদম সিঠক
পর েনই মেন হেত পাের এই সমাধান তা একদমই ভুল!
যাই হাক, তাহেল আমরা আরও িচ া করেত থািক, কীভােব এই সম া সমাধান করা যায়। এই
abbbb এর উদাহরন ভাল কের দখ। এই প থেক আমরা যই character কম আেছ তােক মুেছ
ফলব। এখন এই আইিডয়া কােজ লািগেয় কীভােব পুেরা সম া সমাধান করা যায় িচ া করা যাক।
আমরা েত কিট forbidden pair নব। ধরা যাক বতমান forbidden pair হল ab. আমরা জািন

১০৩
য a বা b আর কােনা pair এ নই। তরাং আমােদরেক a বা/এবং b মুছেত হেব যন পাশাপািশ
কােনা ab বা ba না থােক। খয়াল কর আমােদরেক িকছু a আর িকছু b মুছেত হেত পাের, এরকম
হেব না য সব a বা সব b মুছবা। যমন abbbbcaaaab. এে ে থম a আর শষ b মুছা লাভ
জনক। তাহেল সমাধান িক বুঝেত পারছ? আমরা যখন ab ক িনেয় কাজ করব তখন দখব আমােদর
ইনপুেট কাথায় কাথায় a বা b পাশাপািশ আেছ। তােদরেক প প কের নব। এবার একই েপ
দখব কত িল a আেছ আর কত িল b আেছ। যিট কম থাকেব আমরা সই প থেক তােক মুছব।
যমন এই িকছু ণ আেগর উদাহরেন িট প আেছ যা c ারা আলাদা করা। থম েপ a কম আেছ
তাই সখান থেক a ক মুছব আর ি তীয় েপ b কম আেছ তাই তােক মুছব।

Codeforces Round 103 Div 2 E Competition (144E)


সমস া: মেন কর একিট ি েড িকছু খেলায়াড় আেছ যােদর coordinate (i, j) যখােন i ≥ j.
যসব ঘেরর জ i = j তােদর আমরা target cell বলব। যখনই খলা হেব তখন খেলায়াড়রা
target cell এর িদেক দৗড়ােব। িতিট খেলায়াড় তার ান থেক সবেচেয় কােছর target cell
এ যােব। যিদ এরকম একািধক থােক তাহেল তােদর যেকােনা একিটেত গেলই হেব। এই যাওয়াটা
অব ই সবেচেয় কম সমেয় হেব। অথাৎ মেন কর একজন খেলায়াড় িতনিট target cell এ যেত
সময় নয় যথা েম 10, 12, 10. তাহেল স য িটেত যেত 10 সময় লাগেব তােদর কােনা
একিটেতই যােব এবং 10 সমেয়ই যােব। এই যাওয়ার পথ তুিম িনধারণ কের িদেত পার। অথাৎ
কখন িনেচ যােব আর কখন বােম যােব বা কখন কান িদেক যােব তা তুিম িঠক কের দেব। িতিট
খেলায়াড় একক সমেয় এক ঘর ডােন, বােম, উপের বা িনেচ যেত পাের। িক খয়াল রাখেত হেব
একই মুহূেত যন জন খেলায়াড় একই ঘের না থােক ( সটা target cell হাক আর যাই হাক)।
তামােক বলেত হেব সবেচেয় বিশ কত জন খেলায়াড়েক তুিম একই সােথ খলােত পারবা যন তারা
তােদর সবেচেয় কােছর target cell এ দৗেড় যােব (কীভােব দৗেড় যােব তা তুিম িঠক কের দেব),
িক কােনা জন একই সমেয় একই ঘের না থােক। ি েডর সাইজ 105 এর মত হেত পারেব। আর
কান খেলায়াড় কান ঘর থেক খলা কের তাও বলা আেছ।

সমাধান: থমত খয়াল কর যেকােনা এক জন খেলায়াড় এর জ তার candidate target cell


িক পাশাপািশ। অথাৎ িতিট খেলায়াড় এর জ তার target cell সমুহ একিট র । যমন মেন
কর একজন খেলায়াড় (10, 5) এ আেছ। তার জ target cell সমুহ হেব (10, 10), (9, 9) . . . (5, 5)
কারণ এেদর িতিটেত যেত তামার 5 একক কের সময় লাগেব। এভােব আমরা িতিট খেলায়ােড়র
জ একিট কের র পাব। আমােক সেবা সংখ ক র িনবাচন করেত হেব যন সসব রে র
িতিট হেত আমরা একিট কের সংখ া িনবাচন করেত পাির যােত কের কােনা িট সংখ া একই না
হয়।
খুব একটা কিঠন না। Codeforces 45 D Event Dates তই আমরা এরকম সম া সমাধান
কেরিছ। আমরা একিট heap বা priority queue নব। এবার আমরা বাম হেত ডােন যাব। দখব
বতমান ান হেত কােনা র হয় িকনা। হেল সই র েক আমরা heap এ push করব।
এরপর heap এ দখব heap এ কােনা র আেছ িকনা। থাকেল তােদর মােঝ কান রে র শষ
মাথা সবেচেয় ছাট। তােক বতমান সংখ া িদেয় দব। এভােব করেলই হেব।
কন এই কাজ করেল খেলায়াড়েদর রা া ছদ করেব না? উ র দয়াটা কিঠন। মাণ করা আরও
কিঠন। এইসব ে কাগেজ কলেম িকছু case analysis কের দেখ িনেজেক িব াস করােত হয়!

Codeforces Round 116 Div 2 D Name (180D)


সমস া: তামােক ইিট ি ং s এবং t দওয়া আেছ। তামােক s এর character িলেক permute
কের এমন একিট ি ং বানােত হেব যিট lexicographically সবেচেয় ছাট এবং t অেপ া lexicographically
বড়। ি ং সমুেহর দঘ সেবা 5000 হেত পাের।

১০৪
সমাধান: সম াটা বশ সহজ। আমােদরেক t অেপ া বড় িক সবেচেয় ছাট একিট ি ং বানােত
হেব। এরকম একিট ি ং এর বিশ িক? িট ি ং এর থেম িকছু ঘর একই থাকেব এর পর s
এর অ রিট t এর অ র হেত বড় হেব। এরপর s এর বািকটু ছাট হেত বড়েত সেটড হেব। যমন
s = abac, t = abob এর ে আমরা র একই ঘর a রাখেত পাির। এর পর s এ c বসাব
যিট t এর b অেপ া বড়। এরপর s এ b আর a বািক থাকেব। এেদরেক সট করেল ab দাঁড়ায়।
তরাং আমােদর s হেব acab. এখন হেলা কত র আমরা েত একই রাখব? যেহতু ি েঙর
দঘ মা 5000 সেহতু আমরা েত ক ােন িগেয় িগেয় চ া করেত পাির। একটু িচ া করেল বুঝেব
য এই কমন অংশ যত বড় হেব তত ভাল। তাই আমরা চাইেল এই কমন অংেশর লংথ এর উপর
বাইনাির সাচ চালােত পাির, এেত কের যিদ আমােদর ি ং িলর লংথ আরও বিশ হত তাহেলও
সম া হত না। আসেল আরও িচ া করেল আমার িব াস বাইনাির সাচ ছাড়াও সমাধান করা যােব।
যাই হাক র কমন অংেশর লংথ জেন গেল তুিম বািক যসব ি ং আেছ তােদর থেক এমন
একিট character নেব যিট ঐ ােনর t এর character হেত যন বড় হয়। এরপর বািক িলেক
সেটড ভােব বিসেয় দেব।

Codeforces ABBY Cup 2.0 A3 Educational Game (178A3)

সমস া: তামােক n সাইেজর একিট অ াের দওয়া আেছ (n ≤ 105 ). ধরা যাক অ ােরিট হেলা
a1 , a2 , . . . an . তুিম যতবার ই া একিট অপােরশন চালােত পার। এেক (i, t) ারা িচি ত করা
যাক। এেদর িলিমট হেলা 1 ≤ i ≤ n এবং i + 2t ≤ n. এই অপােরশেনর ফেল ai এর মান 1
কমেব এবং ai+2t এর মান 1 বাড়েব। যমন (1, 0, 1, 2) ত (1, 1) অপােরশন চালােল (0, 0, 2, 2)
হেব। তামার ল হেব থম k ঘরেক শূ কের ফলা। বলেত হেব থম k ঘরেক শূ করেত
সবিন কয়িট অপােরশন লাগেব। k এর মান 1 হেত n − 1 পয হেত পাের। অথাৎ এই n − 1 িট
k এর মােনর জ তামােক সমাধান করেত হেব। n এর মান সেবা 105 হেত পাের।

সমাধান: যেহতু আমােদর সংখ া সবসময় বাম হেত ডােন যায় তাই আমরা থেম a1 ক শূ করব
এর পর a2 ক- এরকম কের করেত থাকব। যখন আমরা a1 ক শূ করব তখন আমার a1 এর
সংখ া িলেক কাথায় পাঠােবা? খুব সহজ উ র- সবেচেয় দূের। িক সবেচেয় দূের পাঠােনাই িক
সবেচেয় লাভজনক? অব ই! মেন কর a1 ক তুিম 2t1 ঘর সরাও এরপর 2t2 ঘর সরাও। যিদ
t1 = t2 হয় তাহেল িক তুিম চাইেল এই িট move না িদেয় একবাের 2t1 +1 move িদেত
পারেত। আবার যিদ t1 < t2 হেল তামার জ t2 এর move আেগ দওয়া ভাল হত, কারণ এেত
কের সকল k এর জ সমাধােন এিট কােজ লাগেব। মােন k এর মান যাই হাক না কন, তুিম যিদ
a1 ক সবেচেয় দূের পাঠাও তাহেলই তামার লাভ।

১০৫
৭.১ অ শীলনী
৭.১.১ সম া
Simple
ˆ Codeforces 67 A Partial Teacher
ˆ Codeforces Round 66 D FreeDiv
ˆ Codeforces Round 89 C Fancy Number

ˆ Codeforces Round 87 Div 1 B Lawnmower

ˆ Codeforces Round 98 B Permutation

ˆ Codeforces 158 B Taxi

ˆ Codeforces Round 111 Div 2 A Twins

ˆ Codeforces Round 111 Div 2 B Unlucky Ticket

ˆ Codeforces 159 B Matchmaker

ˆ Codeforces 169 B Replacing Digits

ˆ Codeforces Round 113 Div 2 C Median

ˆ Codeforces 174 B File List

ˆ Codeforces 176 A Trading Business

ˆ Codeforces 119 Div 1 A Permutations

ˆ Codeforces 142 Div 2 A Dragons

Easy
ˆ Codeforces 76 B Mice
ˆ Codeforces Round 67 D Big Maximum Sum
ˆ Codeforces Round 71 C Beaver

ˆ Codeforces 81 D Polycarp's Picture Gallery

ˆ Codeforces 120 F Spiders

ˆ Codeforces Round 93 Div 1 E-reader Display

ˆ Codeforces 159 E Zebra Tower

ˆ Codeforces 161 A Dress'em in Vests!

ˆ Codeforces 161 B Discounts

ˆ Codeforces Round 117 Div 2 C Optimal Sum

ˆ Codeforces Round 129 Div 2 B Little Elephant and Sorting

ˆ Codeforces Round 131 Div 2 B Hometask

ˆ Codeforces Round 148 Div 1 C World Eater Brothers

Medium
ˆ Codeforces 86 B Tetris Revisited
ˆ Codeforces Round 92 Div 1 C Brackets
ˆ Codeforces Round 96 Div 1 D Constants in the language of Shakespeare

ˆ Codeforces Round 97 Div 1 C Zero One

ˆ Codeforces Round 140 Div 1 B Naughty Stone Piles

ˆ Codeforces Round 140 Div 1 D The table

Hard
ˆ Codeforces 128 Div 2 E Transportation

১০৬
অধ ায় ৮

Dynamic Programming

UVa 437 The tower of babylon


সমস া: তামার কােছ n ধরেনর ক আেছ (n ≤ 30)। েত ক ধরেনর ক অসংখ পিরমােন আেছ।
িত ধরেনর েকর দঘ , ও উ তা দওয়া আেছ। তামােক একিট েকর উপর আেরকিট ক
এভােব একিট েকর টাওয়ার বানােত হেব। শত একিটই- তুিম কােনা একিট কেক যখন আেরকিট
েকর উপের রাখেব তখন যন িনেচর েকর dimension উপেরর েকর dimension হেত বড়
হয়। অথাৎ িনেচর েকর দঘ ও উপেরর েকর যথা েম দঘ ও অেপ া অব ই বড়
হেত হেব। তুিম চাইেল ক িলেক এিদক ওিদক ঘুিরেয় িনেত পার। বলেত হেব তুিম সবেচেয় কত
উঁচু টাওয়ার বানােত পারেব।

সমাধান: সম ািট আমার বশ পছ হেয়েছ। একটু একটু coin change dp এর গ বর হয়


আবার একটু একটু longest increasing subsequence এরও গ বর হয়। এখােন থম সম া
মেন হয় " েত ক ধরেনর (অসংখ ) ক দওয়া আেছ"। এেতা সংখ ক ক িনেয় কাজ করা তা
মুশিকল। আমরা িক এই েকর সংখ া কিমেয় আনেত পাির কােনা ভােব? খয়াল কর যেহতু িনেচর
কেক উপেরর ক হেত বড় হেত হেব সেহতু আমরা আসেল এক ধরেনর ক একবারই ব বহার
করেত পারব। তেব াঁ হয়েতা ঐ কেক ঘুিরেয় আবার বসােত পাির। এই ঘুরানর ঝােমলা দূর করার
জ আমরা যা করেত পাির তাহল িতিট কেক সব ভােব ঘুিরেয় আলাদা আলাদা ক তির করেত
পাির। এরপর বলেত পাির এই হেলা সব ক, তুিম আর ক িলেক ঘুরােত পারেব না। তাহেলই তা
হল তাই না? তাহেল আমােদর সম া দাঁড়াল- িকছু ক দওয়া আেছ। আেগর মত শত মেন আমরা
কত উচু টাওয়ার বানােত পারব। আমরা একিট ক এক বারই ব বহার করেত পারব আর কােনা
কেক ঘুরােত পারব না।
এখন কীভােব আগােনা যায়? সম ায় দঘ িকরকম বড় হেব তাও বলা নাই! িক সটা
জানা িক জ ির? এটা জানেলই তা হয় য বতমান টাওয়ােরর সবেচেয় উপেরর ক ক? অমুক ক
সবার উপের থাকেল এর উপের আর কত বড় টাওয়ার বানােনা যায়- এটাই হেব আমােদর DP. অথাৎ
আমরা একিট ফাংশন িলখব DP নােম যিট একিট প ারািমটার নয়, ধরা যাক i. আমােক বলেত
হেব i েকর উপর সবেচেয় বড় কত ল া টাওয়ার বানােনা স ব। সটা কীভােব সমাধান করব? খুব
সহজ, আমরা সকল েকর উপর লুপ চািলেয় দখব য সই কেক i এর উপর বসান স ব িকনা
(ধরা যাক নতুন কিট হল k) যিদ বসান যায় তাহেল আমরা DP (k) + height[k] উ তার একিট
টাওয়ার বানােত পাির। এরকম কের সকল k এর জ চ া কের সবেচেয় বিশ মানিট িনেলই হেব।
যিদ আর কােনা ক বসান স ব না হয় তাহেল 0 িরটান কের িদবা। আর েত কীভােব DP কল
করবা? চাইেল িতিট কেক িনেচ বিসেয় DP কল করেত পার। অথবা চাইেল িবশাল বড় দঘ
ে র িক উ তা শূ এরকম একিট ক আমদািন কের তােক িদেয় DP কল করেত পার। এরকম
নতুন ক আনেল িবধা হল এর উপর অ যেকােনা কেক রাখেত পারব, অ কােনা েকর উপর
এেক রাখেত পারবা না আর এর উ তা শূ , তরাং উ ের এিট কােনা ভাব রাখেব না।

১০৭
( )
এই সমাধােনর time complexity কত? O n2 যখােন n হল েকর সংখ া। কারণ তামার
( ) ( )
state হল O n আর েত ক state হেত তুিম O n এর একিট লুপ চািলেয় নতুন ক বসােনার
চ া কেরছ।

UVa 1347 Tour


সমস া: একিট 2d plane এ n িট িব দওয়া আেছ (যিদও বলা নই িক তামরা ধের িনেত পার
n ≤ 1000). কােনা িট িব একই x এ নই। তামােক একদম বােমর িব হেত করেত
হেব (অথাৎ যার x সবেচেয় কম), সখান থেক তুিম ডােনর কােনা িব েত যাও, সখান থেক তার
ডােনর এরকম কের কের একদম সবেচেয় ডােনর িব েত যাও। এরপর একই ভােব সখান থেক
তার বােমর কােনা িব েত যাও, এর পর তার বােমর এরকম কের সবেচেয় বােমর িব েত ফরত
আেসা। এই য বাম হেত ডােন িগেয় আবার বােম িফের আসেল এই সমেয় তামােক n িট িব ই
ঘুের আসেত হেব। বলেত হেব সবেচেয় কম কত র অিত ম কের তুিম এই কাজ করেত পারেব।

সমাধান: এিটও আমার বশ পছে র সম া। এই সম ার একিট নাম আেছ- bitonic tour. বলেত
ি ধা নই এই সম া থেম দখেল মেন হেত পাের এটা কীভােব dynamic programming! কারণ
এখােন state িক হেত পাের এটা একটা িবশাল িচ ার ব াপার। এখােন পথটা িক রকম একটু দখ-
একদম বাম মাথা হেত কের িকছু িকছু কের ডােন যাবা, এর পর একদম ডান মাথায় পউছােল
আবার একটু একটু কের বােম এেস একদম বাম াে চেল আসেত হেব। এবং ধু তাই না, তামােক
আবার সকল িব েতই যেত হেব। িক state িক?
State বর করেত গেল আমােদরেক একটু িচ া পা ােত হেব। DP করেত গেল একটু systematic
ভােব আগােত হয়। এই য তুিম এক িব থেক মােঝর িকছু িব বাদ িদেয় ডােন আেরক িব েত
লাফ িদ এিটই হেলা এখােন মূল সম া। আমরা িক কােনা ভােব কােনা িব েক skip না কের
এেক এেক িব িলেক িনেত পাির? মেন হেত পাের- তা কীভােব স ব! িক আসেল স ব, একটু
িচ া কর।
এখােন সমাধােনর মূল আইিডয়া হল- বাম থেক ডােন িগেয় িফের আবার বােম আসা- এভােব
িচ া না কের িচ া করেত হেব- বাম থেক ই পেথ ডােন যাওয়া যন সকল িব ই কাভার হয়-
তাহেলই িক হেয় যায়। একটু িচ া কের দখ। এখন িক সম া অেনক অেনক সহজ হেয় িগেয়েছ!
তাহেল হেলা state িক? কােনা এক মুহূেত state হেব বাম হেত ডােন যাওয়ার িট পথ
এখন কই কই আেছ। ধরা যাক আমরা িব িলেক বাম হেত ডান 1 হেত n এ না ািরং কেরিছ।
তাহেল state ক আমরা (i, j) িদেয় কাশ করেত পাির যার মােন হেব- থম পথিট এখন i এ
আেছ আর ি তীয় পথিট এখন j ত আেছ। আর DP (i, j) ফাংশনেক িরটান করেত হেব বািক পেথর
optimal র , অথাৎ i আর j হেত ডােন n এ যেত হেব আর বািক সব িব েক ব বহার করেত
হেব এরকম পাথ িটর সবেচেয় কম র । তাহেল হেলা DP (i, j) থেক তুিম কই যােব? যিদ
i > j হয় তাহেল তুিম এর পের i + 1 এ যাবার চ া করেব আর যিদ j > i হয় তাহেল j + 1 এ।
অথাৎ তুিম বাম হেত ডােন এেক এেক িব িলেক consider করেব। আমরা আমােদর িবধার
জ ধের িনেত পাির k = max(i, j) + 1 অথাৎ আমরা এর পের k ত যাব। িক কই থেক? i
থেক নািক j থেক? ই ভােবই চ া করেত হেব। অথাৎ যিদ আমরা i থেক k ত যাই তাহেল হেব
DP (k, j) + dist(i, k) আর যিদ j থেক যাই তাহেল হেব DP (i, k) + dist(k, j) এেদর মােঝ
যিট সবেচেয় কম সিটই DP (i, j) এর মান তাই না? আর DP এর করেব কীভােব? খুব সহজ
DP (1, 1) অথাৎ িট পেথর া তখন 1 এ থাকেব। আর শষ হেব কখন? যখন k = n + 1 হেয়
যােব। তখন িক i আর j এর ভতর যই া এখনও n এ পৗছায় নাই তােক n এ পউছােয় িদেত
হেব (নাহেল তা সাইেকল হেব না) এবং সই মানেক িরটান করেত হেব DP থেক। অথবা যিদ দখ
য k এর মান n তাহেল i এবং j উভয় ান থেকই( )n এর র যাগ কের িরটান(করেব। )
এই সমাধােনর time complexity হল O n2 কারণ তামার state হল O n2 আর েত ক
state হেত তুিম ই ধরেনর transition করছ।

১০৮
UVa 116 Unidirectional TSP
সমস া: একিট ি ড আেছ। ি েডর row সংখ া খুব জাড় 10 িট আর কলাম সংখ া খুব জাড় 100
িট। ি েডর িতিট ঘের একিট কের সংখ া আেছ এবং এই সংখ া িল ধনা ক বা ঋণা ক হেত পাের
(সংখ া িল 30 িবেট কাশ করা স ব)। তুিম ি েডর উপেরর বাম কানা হেত িনেচর ডান কানায়
যােব। যসব ঘর িদেয় যােব তােদর সংখ ার যাগফল তামােক সবিন করেত হেব। তেব এক ঘর
থেক আেরক ঘের যাবার িকছু িনয়ম আেছ। তুিম যিদ (r, c) ত থেক থাক তাহেল তুিম এই িতনিট
ঘেরর কােনা একিটেত যেত পারেব- (r−1, c+1), (r, c+1), (r+1, c+1). যিদ (r−1, c+1)
ি েডর উপর িদেয় বিরেয় যায় তাহেল স িনচ িদেয় আসেব অথাৎ যেহতু উপের (r − 1, c + 1)
বেল িকছু নই সেহতু স িনেচ চেল যােব (R, c + 1) যখােন R হল শষ row. একই ভােব যিদ
তুিম িনেচ যাবার সময় দখ য (r + 1, c + 1) বেল িকছু নই তাহেল তুিম উপের চেল যােব অথাৎ
(1, c + 1) এ চেল যােব। এক কথায় পুেরা ি ডিট একিট িসিল ডােরর মত (িসিল ডােরর উ তা x
axis বরাবর ক না কর)।
সমাধান: মেন কর একিট ফাংশন আেছ DP যা একিট ি েডর সল (r, c) ক প ারািমটার িহসােব
নয় এবং িরটান কের সখান থেক িনেচর ডােনর কানায় যাবার সবেচেয় কম খরেচর রা া। এখােন
একিট িজিনস, কােনা কােনা সল হেত িক িনেচর ডান কানায় পউছান স ব না। সে ে মেন কর
আমােদর ফাংশন অেনক অেনক বড় মান িরটান কের। এই মানেক এেতা বড় হেত হেব যন কােনা
পােথর খরচ যন এেতা বড় হেত না পাের। এই সম ার ে যেহতু 100 িট কলাম থাকেত পাের
তার মােন আমােদরেক 100 িট 30 িবেটর সংখ া পার হেয় যেত হেত পাের। তরাং আমােদর বড়
সংখ ািট এর থেক বড় হেলই হেব। অেনক সময় দখা যায় য এই বড় সংখ া বর করা বশ ক কর।
সসব ে খরেচর পাশাপািশ আরও একিট সংখ া রাখেত পার যা বলেব সমাধান আেছ িকনা। যিদ
সমাধান থােক তাহেল অপর সংখ া দেখ বুঝেত পারেব য খরচ কত।
যাই হাক, মূল সম ায় ফরত আিস। তাহেল তুিম DP ফাংশেনর ভতর থেক (r − 1, c +
1), (r, c + 1), (r + 1, c + 1) এই িতন ােনর জ DP কল করেব (বা দরকাের ি ড wrap করেব
আর িক)। এেদর ভতর থেক যিট সবেচেয় কম তার সােথ তামার ােনর সংখ া যাগ কের িরটান
করেব তাহেলই হেয় যােব। ( )
এই সমাধােনর time complexity হেব O RC যখােন R হল row সংখ া আর C হল কলাম
( )
সংখ া। কারণ আমােদর O RC সংখ ক state ( আেছ
) আর িতিট state হেত 3িট transition
করেত হয়। তরাং আমােদর complexity O RC .
মূল সম ায় অব আমােদর কান পেথ যেত হেব সটাও ি ট করেত বেলেছ। যিদ এরকম
একািধক পথ থােক তাহেল lexicographically ছাটিট ি ট করেত হেব বেলেছ। িক সটা তা
খুব একটা কিঠন না। িতিট DP এর সময় িলেখ রাখেব য সই ােনর optimal মান তুিম িতনিট
transition এর মােঝ কানিট থেক পেয়ছ। তাহেলই তা হল তাই না? কারণ তাহেল তুিম র
সেল িলেখ রেখছ এর পের কই যেত হেব, সই সেল িলখা আেছ এর পের কই যেত হেব এভা-
ব তুিম উপেরর বাম কানা হেত িনেচর ডান কানায় চেল আসেত পারেব। আর যেহতু আমােদর
lexicographically ছাট রা া ি ট করেত হেব সেহতু যখন আমরা দখব িতনিট রা ার মােঝ
একািধক রা া সবেচেয় কম খরচ দয় তখন আমরা lexicographically ছাট সল বেছ নব।
অথাৎ সাধারন path printing এর মত কেরই আমরা পাথ ি ট করব।

UVa 12563 Jin Ge Jin Qu hao


সমস া: তামার কােছ n িট (n ≤ 50) গান আেছ এবং এই গান িল বাজেত কত সময় নয় তাও বলা
আেছ। িতিট গােনর দঘ সেবা 3 িমিনট বা 180 সেক ড। এই n িটর বাইের একিট িবেশষ গান
আেছ যিট িঠক 678 সেক ড নয়। তামার কােছ t সেক ড সময় আেছ (t ≤ 109 ). হল এই
সমেয়র মােঝ তুিম সেবা কতিট গান বাজােত পারেব? যিদ একািধক ভােব তুিম এই কাজ করেত
পার তাহেল তামােক গান নবার সময় ক সবেচেয় বিশ করার চ া করেত হেব। এখন এখােন
একটা ব াপার আেছ আর তাহল তামার সব গান য t সমেয়র ভতেরই শষ হেত হেব সরকম

১০৯
কােনা কথা নই। শষ গানেক অব ই t সমেয়র আেগ হেত হেব আর যখন খুিশ তখন শষ
হেত পারেব। অথাৎ মেন কর তুিম িঠক t − 1 সমেয় 100 সেকে ডর গান করেল তাহেল তুিম
t + 99 সময় পয গান নেত পারেব। এখন আর িক কােনা নতুন গান নেত পারেব না কারণ t
সময় পার হেয় িগেয়েছ।
সমাধান: এখােন যিদ ধু বলত য সেবা কতিট গান নেত পারেব তাহেল িক খুব সহজ হত।
Greedy ভােব সবেচেয় ছাট গান িনেত থাকেত হত যত ণ তামার নয়া গান িলর মাট সময় t
এর থেক কম হত। িক এখােন গান সেবা করার পাশাপািশ মাট সময় কও সেবা করেত বলা
হেয়েছ। এই condition এর কারেন িক তামার greedy সমাধান কাজ করেব না। উদাহরন প
মেন করেত পার t হল 6 আর তামার কােছ িতনিট গান আেছ 2, 5, 678 সেকে ডর। যিদ greedy
ভােব কর তাহেল 2 আর 678 নেব। িক optimal সমাধান হল 5 আর 678 নয়া। তাহেল উপায়
িক?
থেম িকছু observation. আমােদর বাজান শষ গান অব ই িবেশষ গান হেত হেব। কন?
ই ধরেনর কস হেত পাের- একিট হল আমরা আমােদর িবেশষ গানটা বাজাই নাই অথবা বািজেয়িছ
িক শেষ না। থম ে মেন কর আমরা সবার শেষ যই গান বািজেয়িছ সিট বাজেত সময়
িনেয়েছ x সময়। আমরা জািন x ≤ 180. আমরা যিদ এই গােনর পিরবেত িবেশষ গান বাজাতাম
তাহেল অব ই সই গান অেনক বিশ সময় ধের বাজত। এখন ি তীয় কস দখা যাক। মেন কর
এই িবেশষ গানটা আমরা বািজেয়িছ িক সবার শেষ না। এই ে আমরা িক যই গান সবার
শেষ বািজেয়িছ সটা িবেশষ গান যই মুহূত হেত বাজান কেরিছলাম সই মুহূত হেত এই গানটা
বাজাব, এরপর বািক গান িল বাজান শষ কের আমােদর িবেশষ গানটা বাজাব। এেত কের িক
িবেশষ গান বাজােত কােনা সম া হেব না আবার িবেশষ গানটাও সবার শেষ বাজল। অথাৎ আমরা
আমােদর িবেশষ গানেক সবসময় শেষ বাজাব।
এর মােন হল আমরা বািক n িট গান হেত সবেচেয় বিশ কত িল গান বাজােত পাির যন তােদর
মাট সময় t অেপ া কম হয়। যিদ একািধক ভােব এই সেবা সংখ ক গান আমরা িনবাচন করেত
পাির তাহেল আমরা চ া করব সবেচেয় বিশ সময় যােত গান বােজ। এরপর আমরা আমােদর িবেশষ
গান বাজাব।
এখন এই সম া সমাধান করা িক খুব একটা কিঠন না। নানা ভােব তুিম এখন DP করেত
পার। DP সমাধান আেলাচনা করা আেগ একটা িজিনস, তাহল যিদও t এর মান অেনক হেত পাের
িক 50 × 180 + 678 িক খুব একটা বড় না। যিদ ইনপুেটর t এর মান এর থেকও বড় হয় তার
মােন হেব আমরা সব গান বাজােত পারব। তরাং আমরা ধের িনেত পাির আমােদর t এর মান এর
থেক ছাট।
এখন আমরা DP কীভােব করব সটা িনেয় ভাবেবা। থেমই আমােদরেক state বর করেত
হেব। আমরা আসেল িক চাই? আমরা জানেত চাই য i িট গান ব বহার কের j সময় ধের গান বাজােত
পাির িকনা। িক কান i িট গান? একিট উপায় হেত পাের িবটমা DP, অথাৎ n িট গােনর কান
কানিট ব বহার হেয়েছ তা িবটমাে র মাধ েম কাশ করা। িক সে ে সম া হল n এর মান
অেনক বড়, তাই 2n ও অেনক বড় হেব। তরাং এভােব কান i িট গান আমরা িনেয়িছ তা কাশ
করা যােব না। এখােন একটা িজিনস খয়াল কর, আমােদর িক এটা জানার দরকার নই কান কান
i িট গান আমরা ব বহার কেরিছ। আমরা এভােবও বলেত পাির য, " থম k টার ভতের i টা" আমরা
ব বহার কেরিছ। তরাং আমােদর state হেব (k, i, j) যার মােন হেব- থম k িট গােনর মােঝ i িট
গান ব বহার কের আমরা j সময় গান বাজােত পাির িক না। তুিম চাইেল এেক BFS বা DFS এর
মতও িচ া করেত পার। যেহতু এটা DP এর অধ ায় আমরা DP এর মত কের িচ া কির। আমরা
মুলত িতটা j < t, i ≤ n এর জ জানেত চাি (n, i, j) িক স ব িকনা। মেন কর আমরা
কােনা একিট (k, i, j) ত আিছ। এখান থেক আমরা িক করেত পাির? আমরা k তম গান িনেত
পাির, সে ে আমােদর জানা দরকার য (k − 1, i − 1, j − song[k]) িক স ব িকনা। অথবা
আমরা k তম গান নাও িনেত পাির, সে ে আমােদর জানা দরকার (k − 1, i, j) িক স ব িকনা।
সবেশেষ আমােদর base case হেব যখন k = 0. যিদ এই ে i = j = 0 হয় তার মােন
স ব, আর যিদ তা না হয়, তার মােন স ব না। তরাং আমােদর এই সমাধােন আমােদর state হল
n2(t আর) আমােদর DP এর ভতের মা িট transition. তাই আমােদর time complexity হেব
O n2 t .
তামরা চাইেল এরকম state করেত পারেত- (k, j) যার মােন হেব, থম k িট গান হেত

১১০
সেবা কত িল বািজেয় আমরা j সময় কাভার করেত পাির। তাহেল আমােদর time complexity
হেত একিট n কেম যােব।

UVa 11400 Lighting System Design


সমস া: মেন কর তামার কােছ n ধরেনর বা আেছ (n ≤ 1000). i তম ধরেনর বাে র voltage
rating Vi , সই রিটং এর একিট voltage source এর দাম Ki , সই রিটং এর একিট বাে র
দাম Ci আর আমােদর এই রিটং এর Li িট বা িকনেত হেব। আমরা চাইেল কােনা একিট বাে র
পিরবেত তার থেক বিশ voltage rating ওয়ালা বা িকনেত পাির। যিদ আমরা বিশ voltage
rating ওয়ালা বা ব বহার কির তাহেল যই voltage rating এর বা আমরা ব বহার করিছ সই
rating এর voltage source আমােদর ব বহার করেত হেব। একিট voltage source একািধক
বা েক ালােত পাের। বলেত হেব সবেচেয় কম কত খরেচ সব বা েক ালান স ব।
সমাধান: এখােন মূল সম া হল " কােনা একিট বা এর পিরবেত তার চাইেত বিশ voltage rating
ওয়ালা বা িকনেত পাির"। এর মােন আমরা যিদ বা িলেক তােদর voltage rating অ সাের সট
কির তাহেল এই কথাটা একটু সহেজ বলা স ব। ধরা যাক আমরা বা িলেক ছাট হেত বড় voltage
rating এ সট কেরিছ। এর মােন দাঁড়ায় i হেত j তম (i ≤ j) voltage rating এর বা িলেক
আমরা j তম বা ারা replace করেত পাির। এখন বলেত হেব সবেচেয় কম কত খরেচ এই কাজ
করেত পারব। এখােন িক খরেচর নানা component আেছ। যমন আমরা যিদ j তম বা িদেয় i
হেত j পয সকল বা replace কির তাহেল আমােদরেক j তম voltage source িকনেত হেব।
এরপর i হেত j তম পয মাট যত িল বা আেছ তত িল j তম বা িকনেত হেব। এখন একটা
িবষয়- এমন িক হেত পাের য i হেত j এর মােঝর িকছু বাে র জ আমরা j তম বা িদেয় replace
না কের k তম বা (k > j) িদেয় replace করা optimal হেব (আর বািক িল j তম িদেয়)?
না এরকম হেব না। হয় তামােক i হেত j সকলেক j িদেয় replace করেত হেব অথবা সকলেক k
িদেয়। মােঝর িকছু k িদেয় করেত হেব এরকম হেব না। কন? এভােব িচ া কর k িদেয় replace
করা কখন লাভ জনক? যিদ দখ k তম বাে র দাম খুব কম হয়। তাহেল সে ে ধু মা i হেত j
এর মােঝর "িকছু" কন? সব বা েকই তা আমরা k তম িদেয় replace করেত পাির তাই না? আর
যিদ k তম বাে র দাম বিশ হয় তাহেল কন ধু ধু আমরা ঐ ধরেনর বা িকনেত যাব বল?
তাহেল এখন িচ া কর এই সম ার state িক হেব? State হেব- আমরা i তম পয সকল
বা েক replace কের ফেলিছ, এখন বল বািকটু replace করেত আমার কত খরচ হেব। এখােন
i তম পয replace কের ফেলিছ মােন হেলা আমােদর কােছ i তম voltage source আেছ আর
আিম হয়েতা i এর আেগ িকছু িকছু বা েক i তম টাইেপর বা িদেয় replace কেরিছ। এটাই হল
DP(i). এখন এর পর কান DP ত যাব? ধরা যাক j ত যাব যখােন j > i. এর মােন িক? এর
মােন হেলা আমরা i + 1 তম হেত j পয সকল বা েক j তম বা িদেয় replace করব, সই সােথ
আমােদর j তম voltage source িকনেত হেব। এটা গল মূল খরচ। সই সােথ j এর পেরর অংেশর
জ আমােদর খরচ হেব DP(j). i হেত বড় সকল j এর জ এই cost সমুহ বর কের এেদর মােঝ
সবেচেয় ছাটিটই হেব DP(i) এর মান। আর base case তা সহজ। যিদ আমরা DP(n) এ চেল
আিস এর মােন হেব আমােদর নওয়া শষ, তরাং আমােদর বািকটু িনেত cost হেব 0.
যেহতু আমােদর state
( ) সংখ া n িট আর িত state এ n এর লুপ চালােত হয় তাই আমােদর
time complexity O n2 .

UVa 11584 Partitioning by Palindromes


সমস া: সেবা 1000 দেঘ র একিট ি ং দওয়া থাকেব। তামােক বলেত হেব এই ি ংিট সবিন
কয়িট ভােগ ভাগ করা যায় যন িতিট ভাগ একিট palindrome হয়। যমন aaadbccb এখা-
ন এেক িতন ভােগ ভাগ করা যায় যার িতিটই palindrome (aaa)(d)(bccb). এেক এর কম
palindrome এ ভাগ করা যায় না।

১১১
সমাধান: আেগর মত কেরই িচ া কর। আমােদর DP(i) এর মােন মেন কর- "আমরা ইিতমেধ ই
হেত i এর আগ পয সব ভাগ কের ফেলিছ, এখন বল i হেত শষ পয সবিন কত ভােগ ভাগ
করা যায়"? এই মান কীভােব বর করব? সহজ! j এর একিট লুপ চালাও আর দখ i হেত j পয
ি ংিট palindrome িকনা যিদ palindrome হয় তাহেল 1+DP(j+1) হেব একিট candidate.
এরকম সকল j এর মােঝ যিট সবেচেয় কম সিটই উ র। i এ এেস িতিট j এর জ i থেক j
পয ি ঙিট palindrome িক না এটা বর করা মেন হেত পাের অেনক costly. কারণ িতিট i
এ এেস তুিম j এর একিট লুপ চালােব i হেত n পয । এই লুেপর ভতের তুিম চক করেব( i হেত
) j
একিট palindrome িকনা। কােনা একিট ি ং palindrome িকনা ( )তােতা আশা কির O n (এই)
করেত পারবা। তাহেল এখােন DP(i) এর ভতর সময় লাগেছ O n2 (j এর লুেপর ভতর O n
এ (palindrome
) বর করা)। আর যেহতু মাট n িট state সেহতু এই সমাধােন মাট সময় লাগেব
O n3 .
এখন উপায় িক? এভােব ভাব- আমােদর সমাধােন costly অংশ কানটা? অব ই palindrome
বর করার অংশ। আমরা িক কােনা ভােব একিট সাবি ং palindrome িকনা তা আরও ত বর
করেত পাির? একটু যিদ খয়াল কর তাহেল বুঝেব এিটও একিট dp আসেল। তুিম জানেত চা i
হেত j সাবি ংিট palindrome িকনা। সটা কীভােব বর হেব? যিদ i আর j একই হয় তাহেল তা
হেয়ই গল। আর যিদ নাহয় দখবা i আর j তম character একই িকনা। যিদ না হয় তাহেল তা
palindrome না আর যিদ দখ একই তাহেল দখ i + 1( হেত ) j − 1 িক palindrome িকনা। এর
মােন আমােদর এই palindrome এর dp এর state O n2 আর ভতের মা একটা transition.
( )
অথাৎ মাট time complexity হেব O n2 .
খয়াল কর n2 × n2 = n4 না িক । এখােন মাট time complexity হে n2 + n2 = n2
(constant ন িহসােব থাকেল তার কােনা দাম নই)। যিদও একিট dp এর ভতর হেত আেরকিট
dp ক কল করা হে িক (দখ )পেরর dp এর state িক আেগর dp এর উপর িনভর কের না।
পেরর dp এর state িক O n2 ই থাকেব যখােন n হল ি ং এর দঘ । তুিম এভােব িচ া করেত
( )
পার- ি তীয় dp এর সকল state এর মান বর করেত সময় লােগ O n2 . এর পর তা থম dp
( )
ত palindrome বর করেত O 1 সময় লাগেব তাই না? তাহেল থম dp ত মাট সময় লাগেব
( 2) ( 2)
O n . এভােব মাট O n সমেয় সব িকছুর মান বর হেয় যােব।
সব শেষ একিট কথা, তামরা িক বুঝেত পারছ কন এটা greedy ভােব হেব না? অথাৎ
আমরা থেম সবেচেয় বড় সাবি ং নব যিট palindrome, এর পর আবার থেক সবেচেয়
বড় সাবি ং নব। এরকম কের করেল কন সবেচেয় কম ভােব ভাগ হেব না? িচ া কের দখ তা
anticase বর করেত পার িকনা। যমন একিট anticase হেত পাের pppbbp. তুিম যিদ greedy
ভােব ভাগ কর তাহেল হেব (ppp)(bb)(p) িক optimal হেব (pp)(pbbp).

UVa 1625 Color Length


সমস া: িট ি ং দওয়া আেছ যােদর দঘ সেবা 5000 হেত পাের। িতিট ি ংএ A হেত Z
এই 26 ধরেনর character থাকেত পাের। এখন তামােক এই ইিট ি ং merge করেত হেব।
Merge মােন িট ি ং ক িচ িনর মত কের merge করা। Formal ভােব বলা খুব কিঠন এর
থেক কেয়কটা উদাহরন দয়া যাক। যমন ABC আর DE ক merge কের ABDCE, ABDEC,
DEABC এরকম নানা ি ং বানােনা যায়। িক BDEAC, BCDE ইত ািদ বানােনা যােব না িক ।
এখন আমােদর ল িক? আমােদর ল হেলা এমন ভােব merge করা যােত আমােদর score
সবেচেয় কম হয়। একিট ি ং এর score কত? এিট হল এেত থাকা সকল িভ িভ character
এর score এর যাগফল। একিট character এর score কত? সিট হল- এই character থেম
কই আেছ, আর শেষ কই আেছ এই িট index এর িবয়গফল। যমন যিদ আমােদর ি ঙিট হয়
AABAB তাহেল থম A আেছ 1 এ (1-indexing ধের) আর শষ A আেছ 4 এ। তাহেল A এর
score হেব 3. একই ভােব B এর score হেব 2. তাহেল মাট score হেব 5. আমােদর ল হেব
এমন ভােব merge করা যােত score সবেচেয় কম হয়।
সমাধান: আিম যখন এই সম া থম দখলাম তখন আমার মাথা কীভােব কাজ কেরিছল তা বিল।

১১২
থেম আমার মেন হেয়েছ হয় এিট greedy নাহেল এিট dp. িক যেহতু string এর দঘ মা
5000 কের তাহেল মেন হয় greedy হেব না। বা অ ভােব বলেল যেহতু মান কম সেহতু আমরা
চাইেল dp চালােতই পাির। ইিট ি ং দওয়া আেছ, আমােদর dp এর state িক হেব? িট ি ং
দওয়া থাকেল সাধারনত state হয় (i, j) যখােন i হল থম ি ং এ একিট index আর j হল
ি তীয় ি ং এ। হেত i আর j পয েসস করা শষ। এখন বািকটু েসস করেত হেব। এখন
এই state এর সােথ আমােদর score এর স ক িক? এখন পয আমরা score িনেয় একটুও
িচ া কির নাই, তরাং এখন একটু িচ া ভাবনা করা যাক। আমরা যিদ িতিট character এর জ
তার থম index এর িবেয়াগ করেত পাির আর শষ index টা যাগ করেত পাির তাহেলই িক হেয়
যােব। এখন িচ া কর আমরা যিদ (i, j) থেক (i + 1, j) বা (i, j + 1) এ যাই তাহেল এই যাগ
িবেয়ােগর কাজ করেত পারবা িকনা? দখা যাক! মেন কর আমরা (i, j) থেক (i + 1, j) ত যাব।
তার মােন আমরা S[i + 1] নব (ধির S হল থম ি ং)। এিট আসেল merged ি ং এ কত তম
index? i+j+1 তম তাই না? কারণ এর আেগ আমরা i+j িট character িনেয়িছ, তরাং এিট হেব
i + j + 1 তম। আর িক জানার দরকার? জানা দরকার য, S[i + 1] এই character িট S[1 . . . i]
বা T [1 . . . j] ত আেছ িকনা। যিদ এেদর কােনািটেতই না থেক থােক তার মােন এিট হেব এই
character এর থম occurance এবং সে ে আমরা এই ান অথাৎ i + j + 1 িবেয়াগ করব।
আর যিদ দিখ এিট শষ character অথাৎ S[i + 2 . . .] আর T [j + 1 . . .] এ এই character
নই তাহেল এই ান যাগ করব। আর সই সােথ যাগ করব (i + 1, j) state এর dp এর মানেক।
একই ভােব আমরা (i, j + 1) এর জ ও একই িজিনস িহসাব করব। যেহতু আমােদরেক score
সবেচেয় কম করেত হেব তরাং এই িট option এর মােঝ যিট আমােদর কম score দেব সিটই
হেব আমােদর DP (i, j) এর মান।
একিট িজিনস বািক থেক গেছ আর তাহল অমুক character S[1 . . . i] এর মােঝ আেছ িকনা
বা S[i . . .] এর মােঝ আেছ িকনা- এ িজিনস কীভােব বর করেব? এটা নানা ভােবই খুব ত উ র
করা যায়। এর মােঝ সবেচেয় বুি মান উপায় মেন হয় িত character এর জ বর কের রাখা য
সই character িট S এ সবার থম কাথায় আেছ আর সবেশেষ কাথায় আেছ। তাহেল এই সবার
আর শষ ােনর সােথ compare কের বেল ফলেত পারেব সই character িট S[1 (. . . i])
বা S[i . . .] এর মােঝ আেছ িকনা। আর এই সমাধােনর complexity তা বুঝেতই পারছ- O n2
( )
যখােন n হেলা ি ং এর length. কারণ আমােদর state O n2 আর state এর ভতের মা িট
transition.

UVa 10003 Cutting Sticks


সমস া: তামার কােছ একিট লািঠ আেছ। লািঠর সেবা দঘ 1000. এই লািঠেত n িট মাক করা
আেছ (n ≤ 50). এই মাক করা ান িল তামােক কাটেত হেব। একবার কাটার cost হল ঐ মুহূেত
যই লািঠ কাটেতছ সই লািঠর দঘ । তামােক সবেচেয় কম খরেচ সকল দাগ দওয়া ান কাটেত
হেব। যমন মেন কর লািঠর দঘ হল 10 আর তামার মাট িতনিট জায়গায় দাগ আেছ- 2, 4 আর
7. তুিম যিদ থেম 2, এরপর 4, এরপর 7 এ কাট তাহেল খরচ হেব 10 + 8 + 6 = 24. িক তুিম
যিদ থেম 4, এরপর 2 তারপর 7 এ কাট তাহেল খরচ হেব 10 + 4 + 6 = 20.
সমাধান: বশ িশ ণীয় সম া। এই সম ািটও দখেল থেম greedy এর গ পাওয়া যায়। িক
আমার মেন হয় না এটা greedy ভােব সমাধান হেব। আর যিদ greedy নাহয় তাহেল এধরেনর
সম া সাধারণত dp িদেয় সমাধান হয়। কীভােব বুঝবা? Experience, তামার যত experience
হেব তত intuition বাড়েব। এখন হল যিদ dp িদেয়ই সমাধান হয় তাহেল state িক হেব?
একটু কাটার েসসটা ক না কর। লািঠর এক জায়গায় কাটবা, ই টুকরা হেয় যােব। আবার আেরক
জায়গায় কাটবা, যােক কাটলা সিট ই টুকরা হেয় যােব। এভােব। এখােন একিট িজিনস, এক টুকরা
ক কেট িচ িচ করার খরেচর সােথ অ টুকরা িচ িচ করার খরেচর কােনা স ক নই।
তাহেল আমরা "টুকরা" ক state িহসােব িবেবচনা করেত পাির। একিট টুকরােক represent করা
িক খুবই সহজ। ধু িট মাথা রাখেলই হয়। যমন আিম যিদ 10 দেঘ র একিট লািঠর 2 আর 6 এ
কািট তাহেল এিট িতন টুকরা হেয় যােব। এেদর state হল (0, 2), (2, 6), (6, 10). যেহতু আমােদর

১১৩
লািঠর দঘ 1000 সেহতু আসেল 10002 এর বিশ state হেব না। িক তুিম যিদ একটু িচ া কর
তাহেল বুঝেব আসেল এেতা state হেব না। মেন কর ে র উদাহরেন 2, 4 আর 7 এ দাগ িছল।
তরাং তুিম িক কখনও 8 বা 5 ইত ািদ ােন কাটেব না। অথাৎ আসেল n2 এর বিশ state হেব না।
এেক represent করাও িক বশ সহজ। তুিম ধু মাক িলর index রাখেব তাহেলই হেব। মােন
যমন ধর এর আেগর উদাহরেন যিদ mark[1] = 2, mark[2] = 4, mark[3] = 7 হয় তাহেল
(2, 7) না বেল আমরা বলেত পাির (1, 3) কারণ mark[1] = 2 আর mark[3] = 7. আমােদর
িক 0 আর 10 (অথাৎ 0 আর l) ও লাগেব। এেদরেক আমরা িট অিতির mark িহসােব রাখেতই
( )
পাির। যাই হাক মূল কথা- আমরা O n2 state এ একিট লািঠর টুকরা রাখেত পাির। আমােদর
DP ক িরটান করেত হেব এই টুকরা এর ভতের যত মাক আেছ সসেবর সব িলেক কাটেত হেল
সবিন কত খরচ হেব। এটা িক খুব একটা কিঠন না। তামার এই টুকরা এর ভতের যত িল মাক
আেছ, তােদর এেক এেক কাটার চ া করেত হেব। অথাৎ তুিম যিদ DP (i, j) ত থাক তাহেল সকল
i < k < j এর জ তামােক DP (i, k) + DP (k, j) + length(i, j) এর সবিন মান বর
করেত হেব। এেক িরটান করেলই হেব। এর মােন( আমরা
) DP ফাংশেনর ভতের একিট লুপ চালাি ।
তরাং আমােদর time complexity হেব O n3 .

UVa 1626 Brackets sequence


সমস া: তামােক একিট bracket sequence দওয়া আেছ। এেত (, ), [, আর ] থাকেত পাের। এই
sequence এর দঘ সেবা 100 হেত পাের। তামােক এেত সবেচেয় কম সংখ ক character
েবশ কিরেয় balance করেত হেব। যিদ একািধক ভােব করা যায় তাহেল যেকােনা একিট ি ট
করেলই চলেব।
সমাধান: একিট ি ং এর উপর dp করার জ সবেচেয় ব ল ব ব ত state হল- এখন আিম কান
index এ আিছ, অথাৎ state যিদ i হয় এর মােন হেব হেত i পয েসস কের ফেলিছ বািকটু র
উ র কত। িক এখােন এই state খাটেব না। কারণ ধর ([]) এই ে তা থম opening
bracket শষ closing bracket এর সােথ match হয়। মেন কর এেদর জনেক আমরা ম াচ
কিরেয়িছ। এখন আিম যিদ বিল 1 ন র পিজশন েসস কেরিছ আিম বািকটু েসস করব তাহেল
তা হেব না। কারণ তামার তা 4 ন র পিজশনও েসস হেয় িগেয়েছ তাই না? তাহেল িক বুঝেত
পারছ এখােন state িক হেব? খুব একটা কিঠন না, একিট substring হেব এই সম ার state.
অথাৎ DP (i, j) হেব আমােদর ফাংশন যার কাজ হেব i হেত j index এর মােঝর string টু েক
balance করেত সবিন extra কয়িট character লােগ তা েবশ কিরেয় সই string ক return
করা। যেহতু string এর দঘ মা 100 তরাং আমরা চাইেল আরও একিট লুপ চালােত পারব
এই ফাংশেনর ভতের। সই লুপ িদেয় আমরা আমােদর substring এর থম character এর জ
matching bracket খুঁজব। যিদ থম character িট opening হয় তাহেল এই substring এর
ভতের কাথাও তার matching closing bracket থাকেত পাের। ধরা যাক k ত আেছ, তাহেল
আমােদর একিট candidate হেব S[i] + DP (i + 1, k − 1) + S[k] + DP (k + 1, j) তাই না
(এখােন S হল ইনপুেটর bracket sequence, আর আমরা মেন করিছ DP আমােদরেক ? কারণ
আিম i ক k এর সােথ match করিছ আর [i + 1, k − 1] এই substring টু েত যত কম extra
character েয়াজন তা েবশ করাি । একই ভােব k এর পেরর অংশেতও আমরা যত কম স ব
extra character েবশ করাি । এভােব k এর লুপ চািলেয় আমরা িকছু candidate পলাম।
আর িক হেত পাের? আমরা চাইেল S[i] এর matching closing bracket কাথাও insert করেত
পাির, ধরা যাক S[k] এর পর insert করিছ। সে ে candidate হেব S[i] + DP (i, k)+? +
DP (k + 1, j) এখােন ? হল matching closing bracket. যিদ S[i] closing bracket
হয় তাহেল তা সহজ, এর matching opening bracket টা আমরা েত বসাব আর (এর )পর
বািকটু েক দলাই মলাই করেত একটা DP কল করব। এখােন time complexity হেব O n3 .
তুিম চাইেল একটু িচ া ভাবনা কের এই সমাধানটা একটু সহজ করেত পার। যমন ি তীয় -
(যখন S[i] এর closing bracker আমরা েবশ কিরেয়িছ) আিম বেলিছ য আমরা S[i] এর
matching closing bracket কাথায় বসাব তার উপর লুপ চালাব, িক একটু িচ া করেলই বুঝেব

১১৪
য আসেল লুপ চালানর কােনা দরকার নই। আমরা যিদ S[i] এর পেরই সই closing bracket
বিসেয় দই তাহেল িক কােনা িত নই।
যাই হাক, এই সম া িক চাইেল greedy ভােবও সমাধান করেত পার। একটু িচ া কের
দখ- কােনা একিট bracket sequence এ কয়িট অিতির character িদেল সিট balance
হেব সিট তুিম greedy ভােব বর করেত পার িকনা। খুব একটা কিঠন না িক ! Stack িদেয়ই এই
কাজ করা যায়।

UVa 1331 Minimax Triangulation


সমস া: একিট m নােডর পিলগন আেছ (m ≤ 50)। তামােক িকছু chord বা কণ টানেত হেব যােত
পুেরা পিলগনিট অেনক িল triangle এ িবভ হয়। একটু কাগজ কলম িনেয় যিদ িচ া ভাবনা কর
তাহেল বুঝেত পারেব য m নােডর যেকােনা পিলগণেক এরকম ি ভুেজ িবভ করেত িঠক m − 3
িট কেণর দরকার। কণ মােন তা বুঝছ? একিট নাড হেত অ যেকােনা নােড লাইন টানা (তার
পােশর জন বােদ)। তামার ল হেলা এমন ভােব িবভ করা যােত ি ভুজ িলর ফল িলর
মােঝ যিট সবেচেয় বড় সিট যন সবেচেয় কম হয়।
সমাধান: এত ণ আমরা খুব সাধারন dp দেখিছ। এই সম ািট একটু "অসাধারন" কারণ এখােন
একটু cyclic ব াপার াপার আেছ। অথাৎ এখােন state 1D বা 2D ম াি এর মত কের িচ া
করেল হয় না। Cyclic ভােব িচ া করেত হয়, তাই একটু ঝােমলা। যখনই দখবা cycle তখন তুিম
0 indexing করবা। কারণ এেত একিট িবধা হে i এর পেরর নাডেক তুিম (i + 1)%m আর
আেগর নাডেক (i + m − 1)%m আকাের িলখেত পার। তুিম যিদ এই ফমুলা না বুেঝ থাক তাহেল
একটু হােত হােত িহসাব কের দখ, দখেব 0 এর পর 1, এরপর 2 এভােব m − 1 এর পর আবার 0
পােব। উে ািদেকর ফমুলাও একই ভােব কাজ কের। এই ফমুলা না ব বহার করেল বা 0 indexing
ব বহার না করেল তামার কাড আরও জিটল হেব অথবা িতবার আেগর/পেরর নাড বর করেত
গেল তামােক if-else িলখেত হয় যা ঝােমলার।
এখন হল এই সম ার জ state িক বা কীভােব সমাধান করেত হেব। যিদ dp ত সামা
পিরমাণও অভ হেয় থাক তাহেল তুিম এটু বুঝেব য state হল একটা polygon. সখােন তুিম
একটা কণ টানেব, পিলগণেক ই ভােগ ভাগ করেব, তােদর জ dp কল করেব, এরপর তােদর
উ র merge কের তামার উ র িরটান করেব। উ র merge করা তা ব াপার না। ই dp হেত
ই িদেকর উ র আসেব (তােদর ি ভুজ িলর মােঝ সবেচেয় বড়িটর ফল), এবার এেদর মােঝ
যিট বড় সিট িরটান করেলই হেয় যােব। এই dp এর base case ও সহজ। যখন দখেব তামার
পিলগনিট একিট ি ভুজ তখন আর ভাগ করার দরকার নই। সবই তা সহজ গালাম হােসইন িক
state টা কীভােব িলখব!
তুিম িন য় এেতা বাকা না য ভাবেব "আের পুেরা পিলগন এর সব নােডর index পািঠেয় িদেলই
তা হল"। কারণ সে ে state অেনক িল (exponential) হয়। আমােদরেক এই পিলগন িল
একটু systematic ভােব বানােত হেব যন তােদরেক সহেজ represent করা স ব হয়। এেত িকছু
লাভ আেছ, এক কাড করা সহজ, ই এবং সবেচেয় পূণ তােদর state সংখ া exponential
হেব না। এখন কথা হেল কীভােব systematic ভােব আমরা আগােত পাির। তামরা ( ) চাইেল vertex
এর সােপে িচ া করেত পার। আমার মেন হেয়েছ vertex ধের িচ া করেল O n4 এ সমাধান করা
( )
স ব। িক তুিম যিদ edge ধের িচ া কর তাহেল বশ সহেজই O n3 এ সমাধান করা স ব।
এই vertex ধরা বা edge ধরা ক আিম metaphorical অেথ বেলিছ। আশা কির একটু পেরই
ব াপারটা পির ার হেব। চল দিখ edge ধের িচ া করা মােন িক।
মেন কর আমােদর কােছ একিট পিলগন এর চইন আেছ যার vertex িল হেব 0 হেত n − 1
পয । আমরা 0 − (n − 1) এই edge িনেয় কাজ করব। এখন এই edge িট অব ই কােনা
না কােনা ি ভুেজর বা হেব। িক কান ি ভুেজর? বিশ িচ া না কের একিট লুপ চািলেয় দাও
তৃতীয় িব র জ 0 আর n − 1 ছাড়া যেকউ হেত পাের। ধরা যাক আমরা লুপ চািলেয় i ক সই
তৃতীয় িব িহসােব িনবাচন করিছ। তাহেল আমােদর ি ভুজিট হেব 0 − i − (n − 1). আর এর
ফেল পিলগনিট একিট ি ভুজ এবং সেবা ইিট চইেন িবভ হেয় যােব। চইন িট হল 0 − i আর

১১৫
i − (n − 1). আশা কির এটা বুঝেত পারছ য যিদ i = 1 হয় তাহেল 0 − i বেল কােনা চইন
থাকেব না আর যিদ i = n − 2 হয় তাহেল i − (n − 1) বেলও কােনা চইন থাকেব না। এখন এই
চইন িটর জ recursively DP কল িদেলই হল। আর merge কীভােব করেব তােতা আেগই
আেলাচনা কেরিছ। তরাং আমােদর state হেব (a, b) যার মােন হল a হেত b এর চইন টু আর
a − b ইতমেধ ই একিট বা ারা জাড়া লাগান আেছ। এই DP এর িভতের আমােদর কাজ হেব
একিট i এর লুপ চািলেয় a − i − b ি ভুজ তির করা আর a − i, i − b এই চইন িটর জ DP
কল করা।

UVa 1220 Party at Hali-Bula


সমস া: একিট n নােডর rooted tree দওয়া আেছ (n ≤ 200). বলেত হেব তুিম সেবা কত িল
নাড িসেল করেত পারেব যন এেদর মােঝ এমন িট নাড না থােক যােদর একিট ওপরিটর
parent. আরও বলেত হেব সেবা নােডর সট িক মা এক রকমই হেত পাের নািক একািধক
রকম হেত পাের।
সমাধান: ি েত DP করেত হেব। আমরা root থেক DP করা করব। DP এর state হেব আমরা
এখন কান নােড আিছ, ধরা যাক আমরা বতমােন u নােড আিছ। DP ফাংশন ইিট মান return
করেব। একিট হল এই নাডেক যিদ নই তাহেল এই নাড সহ পুেরা subtree (মােন এই নাড
এবং এর িনেচর নাড িল) হেত সেবা কত িল নাড িনবাচন করা যােব (parent এর restriction
মেন)। আর আেরকিট মান হেলা এই নাডেক না িনেয় সেবা কত িল নাড িনবাচন করা স ব।
তামরা চাইেল ইিট মান িরটান না কের state এর প ারািমটার আরও একিট বাড়ােয় িদেত পার।
0 িদেয় বুঝাবা য u ক িনবা না আর 1 িদেয় বুঝাবা য u িনবা। যাই হাক। এখন কথা হল এই মান
ইিট কীভােব বর করবা। ধরা যাক তুিম এখন (u, 0) state এ আছ অথাৎ u ত আছ আর এেক
ছাড়াই তুিম সেবা সংখ ক নাড িনেত চাও। তাহেল তুিম যটা করেব তাহল u এর িতিট child
c এর জ (c, 0) আর (c, 1) এর মােঝ বড় মানিট নেব। কারণ যেহতু u িন না সেহতু c িনেব
িকনা িকছুই যায় আেস না। তুিম c এর য ে বিশ সংখ ক নাড পােব সিটই িনেব। আর (u, 1)
এর ে তামার c নবার কােনা েযাগ নই। তরাং সকল child c এর জ তামােক (c, 0)
িনেত হেব। এভােব আমরা সেবা নােডর সেট কয়টা নাড আেছ তা বর করেত পারব।
এখন হল এই সট কতভােব গঠন করা যােব। এটাও খুব একটা কিঠন না। যিদও এই
সম ায় জানেত চেয়েছ য এক ভােব না একািধক ভােব, িক যিদ বলত মাট কতভােব তির করা
যােব তাহেলও করা স ব। তুিম যখন (u, 0) বা (u, 1) এর মান বর করেব তখন সিট কত ভােব
হয় তাও বর করেব। থেম দখা যাক (u, 1) কতভােব হেব তা কীভােব বর করবা। (u, 1) তা
সকল (c, 0) এর যাগফল। তরাং (c, 0) িল যত ভােব তির করা স ব তােদর নফল এর সমান
ভােব (u, 1) তির করা যােব। কারণ তুিম যিদ এক সাবি হেত 10 ভােব (c, 0) পাও আর আেরক
সাবি হেত যিদ 20 ভােব পাও তাহেল তা মাট 200 ভােব তুিম (u, 1) বানােত পারেব তাই না?
আর আশা কির (u, 0) এর ে িক হেব তা িনেজরাই কের িনেত পারেব। সূ টা যিদও (u, 1) এর
মত সহজ না িক ওত কিঠনও না। আর আেরকটা কথা, এই সম ায় িক কত ভােব বানােত হেব
তা চায় নাই, চেয়েছ এক না একািধক। তরাং তুিম আসেল কেয়কটা if else লািগেয় িহসাব করেত
পার। তুিম যিদ পুেরা উ র বর করেত চাও য কতভােব সই সট পাওয়া যায় তাহেল সই সংখ া
overflow করেত পাের। ( )
আর আশা কির বুঝেত পারছ য এখােন time complexity হেব O n . অেনেক মেন করেত
পার state তা 2 ∗ n আর এর ভতের এর child িলর উপর িদেয় লুপ চালান হে । সেবা child
সংখ া হেত পাের n (n − 1 আর িক) তরাং মাট তা n2 হওয়া উিচত। না এখােন ল কর য
যিদ কােনা একিট নােডর child সংখ া বিশ হয় এর মােন অ নােডর child সংখ া কম হেব।
তুিম এভােবও িচ া করেত পার য মাট কতবার DP কল হেব? DP কল হেব িতিট নাড হেত
তার child এর জ । এর মােন িত parent-child স েকর জ । অথাৎ যত িল edge তত িল
স ক। মাট edge n িট (আসেল n−1). তরাং আমােদর DP কল ( হেব
) 2n বার। এিটই আমােদর
time complexity. মাট কথা এই DP এর complexity হেব O n .

১১৬
UVa 1218 Perfect Service
সমস া: একিট n নােডর ি দওয়া থাকেব (n ≤ 10000)। তামােক ি এর নাড িলেক সাদা ও
কােলা রঙ করেত হেব যন সকল সাদা নােডর িঠক একিট কােলা নাড neighbor িহসােব থােক।
িট সাদা রেঙর নাড neighbor হেল সম া নই। এখােন neighbor মােন হল adjacent. বলেত
হেব সবিন কত িল নাডেক কােলা রঙ করেত হেব।

সমাধান: আবােরা ি েত DP করেত হেব। তেব এবার একটু বিশ িচ া ভাবনা করেত হেব। যিদও
এই সম ার ি িট rooted না িক আমরা চাইেল যেকােনা একিট নাডেক root িহসােব ক না
করেত পাির। এেত কের আমােদর dp চালান সহজ হেব।
মেন কর আমরা এখন একিট নাড u ত আিছ। এেক আমরা চাইেল সাদা রঙ করেত পাির আবার
কােলা করেত পাির। আমােদর বর করেত হেব এই ই ে সবিন কত িল নাড কােলা রঙ করেল
পুেরা সাবি আমােদর শত মানেব। এজ ভাবেত হেব u এর child সমুহ হেত আমােদর িক িক তথ
জানা দরকার। এর উপর িভি কেরই আমরা আমােদর state দাঁড় করােত পারব। থেমই ধরা যাক
আমােদর নাড যিদ কােলা রঙ করা হয় তাহেল িক হেব। সে ে এই নােডর যেকােনা neighbor
কােলা হেত পারেব। আবার সাদাও হেত পারেব তেব সই ে সই সাদা নােডর আর কােনা
neighbor কােলা নাড িহসােব থাকেত পারেব না। এখােন একটা িজিনস ল করার িবষয়- সটা
হল কােনা একিট নাড সাদা হেলও তার ই রকম অব া থাকেত পাের। এক- তার িনেচ কােনা
কােলা neighbor থাকা যােব না, ই- কােলা neighbor থাকেত হেব। তরাং আমােদর িতিট
নােডর এই িতনিট state থাকেব- u নাড কােলা, u নাড সাদা িক এর কােনা child কােলা হেত
পারেব না, u নাড সাদা এবং এর িনেচ কােলা একিট নাড থাকেতই হেব।
এখন এেক এেক দখা যাক িতিট ে আমােদর িক করেত হেব। মেন কর আমরা এখন যই
নােড আিছ তােক কােলা রঙ করেত চাই। সে ে child নাড িলেক সাদা রঙ করেত হেব এবং
তােদর িনেচ কােনা কােলা neighbor থাকা যােব না।
যিদ িনেজেক সাদা আর এর িনেচ কােনা কােলা না রাখেত চাই তাহেল িক করেত হেব? সে ে
িনেচর সব িল সাদা হেত হেব। িক ধরেনর সাদা? ি তীয় ধরেনর সাদা, অথাৎ তােদর অব ই একিট
কােলা নাড neighbor িহসােব থাকেত হেব। কন? কারণ যিদ তােদর িনেচও যিদ কােলা না থােক
তাহেল তা তােদর আর কােনা কােলা neighbor থাকা স ব না।
বািক থাকল যিদ আমরা িনেজেক সাদা করেত চাই আর তার িনেচ যিদ একিট কােলা থাকেত হয়।
সই ে আমােদর িনেচ যারা আেছ তােদর একিটেক কােলা করেত হেব আর বািক িলেক সাদা
করেত হেব। কান ধরেনর সাদা? যােদর অ ত একিট িনেচ কােলা আেছ, অথাৎ ি তীয় ধরেনর।
তাহেল এই গল আমােদর state আর state আপেডট করার উপায়।
এখন খয়াল কর, থম ই আপেডেটর ে কােনা লুপ নই (child এর DP কল করার
লুপ বােদ)। িক শষ আপেডেটর ে িক একটা লুপ লাগেছ। সই লুপ চািলেয় আমরা কােলা
নাড fix করিছ এর পর আেরকিট লুপ চািলেয়( আমরা
) বািক নােডর জ DP কল করিছ। তরাং
আমােদর time complexity হেয় যাে O n2 . যিদ আমােদর এই কােলা নাড fix করার লুপ
(অথাৎ আমার কান child
( ) কােলা হেব) child এর DP কল করার লুেপর সােথ nested ভােব না
থাকত তাহেল িক O n হত। আমরা িক কােনা ভােব এই লুপ বাদ িদেত পাির বা nested না
কের করেত পাির? াঁ পাির। এসব ে একিট কমন টকিনক আেছ। খয়াল কর, আমরা এখােন
কােলা নাড fix কের বািক নাড িলর ি তীয় ধরেনর সাদার cost এর যাগফল বর করিছ তাই
না? আমরা এই যাগফল কােলা নােডর লুেপর ভতের বর না কের বাইের বর কির। অথাৎ আমরা
আমােদর নােডর িনেচ যত িল child আেছ সবার ি তীয় ধরেনর সাদার যাগফল বর কির, ধরা
যাক S. এর পর কােলা নােডর জ লুপ চালাই। ধরা যাক আমরা একটা নাড িনবাচন কেরিছ য
এেক আমরা কােলা করব। তাহেল S হেত আমরা এই নাড ি তীয় ধরেনর সাদা করেত যই cost
লােগ তা বাদ দই আর এেক কােলা করেত যই cost তা যাগ কির। তাহেলই (তা) হেয় গল তাই
না? আমােদর এখন আর লুপ িট আর nested নই। তরাং এভােব আমরা O n এ আমরা এই
সম া সমাধান করেত পাির। তামরা চাইেল এই কাজ িট লুেপর পিরবেত একিট লুপ িদেয়ও করেত
পার।

১১৭
UVa 1252 Twenty Questions
সমস া: n িট িভ িভ সংখ া আেছ (n ≤ 128). তামার ব ু এই n িট সংখ ার মােঝ কােনা একিট
মেন মেন ধেরেছ আর তামােক বেলেছ য স কান সংখ ািট মেন মেন ধেরেছ তা বর করেত। তুিম
জান য এই n িট সংখ া িক িক। িতিট সংখ া m িবেটর (m ≤ 11). তুিম তামার ব ুেক িকছু
করেত পার যমন- i তম িবট িক 0 নািক 1. এরপর সই উ েরর উপর িভি কের তুিম আবার
নতুন করেত পার। বলেত হেব সবেচেয় কম কত িল কের তুিম বলেত পারেব তামার ব ুর
সংখ ািট কত। যমন মেন কর যিদ n = 1 হয় তাহেল িক তুিম কােনা ছাড়াই বেল িদেত পার
তামার ব ুর সংখ া কত। আবার n = 2 হয় আর সংখ া িট হয় 100 আর 110 তাহেল তুিম একিট
কেরই বুঝেত পারেব তামার ব ু কান সংখ ািট মেন মেন ধেরেছ (মােঝর িবট অথাৎ 1 তম িবট
িক 0 না 1).

সমাধান: অেনেকই হয়েতা েত ভাবেত পাের আমােক িকছু িবট এর পিজশন িনবাচন করেত হেব,
ধরা যাক [i0 , i1 , . . .] যন সসব িবট স েক িজ াসা করেল তুিম বুেঝ ফলেত পার য কান সংখ া
তামার ব ু মেন মেন ধেরেছ। কীভােব বুঝেত পারেব? মেন কর তুিম এই সব িবট স েক িজ াসা
করেল আর তামার িজ াসার উ র হল [b0 , b1 , . . .]. যিদ দখ য n িট সংখ ার িতিটর জ যিদ
এই উ েরর িল আলাদা আলাদা হয় এর মােন এই উ র দেখই তুিম বেল ফলেত পারেব য
কান সংখ ািট তামার ব ু মেন মেন ধেরেছ। যমন উপেরর উদাহরন 100, 110 এর ে তুিম
যিদ ধু মােঝর িবট স েক িজ াসা কর তাহেল উ েরর িল থম সংখ ার জ [0] আর ি তীয়
সংখ ার জ [1]. অথাৎ আলাদা। তরাং আমরা ধু এই িবট িনেয় করেলই বুেঝ যাব কান
সংখ া তামার ব ু মেন মেন ধেরেছ। িক একটু িচ া করেল বুঝেব এখােন তুিম একটা িবশাল বড়
িজিনস ignore কের িগেয়ছ। আর তাহল তুিম িক চাইেল " থম ে র" উ র এর উপর িভি কের
"ি তীয় " করেত পারেব। অথাৎ আিম িকছু ণ আেগ যা বললাম তােত িক তুিম কান কান িবট
িনেয় করেব তা িক আেগই িনধারণ কের ফেলছ। Dynamically তুিম করছ না। হয়েতা
dynamically করেল তুিম কম ে ই বর কের ফলেত পারেব তামার ব ু কান সংখ া ধেরেছ!
একটু যিদ িচ া কর তাহেলই তুিম এরকম একিট case বর কের ফলেত পারেব। যমন সংখ া িল
যিদ এমন হয়- 000, 001, 110, 100. একটা িবট িজ াসা কের য তুিম 4 টা সংখ া আলাদা করেত
পারবা না এটা একটা বাকাও বুেঝ। তরাং দখা যাক আমরা এমন টা িবট পাই িকনা যই িট
িবট িজ াসা করেল আমরা এই চারিট সংখ া আলাদা করেত পারব। ধরা যাক আমরা থম (msb)
আর মােঝর িবট িনেয় িজ াসা করব। তাহেল িক থম িট সংখ ার ে ই উ েরর িল হেব
[0, 0]. যিদ আমরা থম আর শষ িবট িনেয় িজ াসা কির তাহেল শষ টা সংখ ার ে উ েরর
িল পাব [1, 0]. আর যিদ আমরা মােঝর আর শেষর (lsb) িবট িনেয় িজ াসা কির তাহেল থম
আর শষ ই সংখ ার ে ই পাব [0, 0]. এর মােন কােনাই লাভ হে না। আমােদর িতনিট
করেতই হে । িক আমরা যিদ থম ে র উ েরর উপর িভি কের যিদ ি তীয় কির তাহেল
িক আমরা মা িট কেরই বর কের ফলেত পারব। ধরা যাক আমরা থম িবট (msb) িনেয়
করলাম উ র 0 হেত পাের আবার 1 ও হেত পাের। যিদ উ র 0 হয় এর মােন তামার ব ু হয়
000 নাহয় 001 ধেরেছ। আমরা যিদ এই ে শেষর িবট িনেয় িজ াসা কির তাহেলই বুেঝ যাব
য 000 নািক 001 উ র। িক যিদ আমােদর থম ে র উ র 1 হয় এর মােন তামার ব ু হয়
110 নাহয় 100 ধেরেছ। এই ে আমরা মােঝর িবট িনেয় িজ াসা করব। তাহেলই আমরা বুেঝ
যাব তামার ব ু িক ধেরেছ। এর মােন আসেল আমােদর এই সম া এেতা সহেজ সমাধান হেব না।
আমােদর ক একিট একিট কের করেত হেব আর সই ে র উ র িক তার উপর িভি কের
পেরর করেত হেব।
তাহেল এিট কীভােব সমাধান করবা? একটা উপায় হল তুিম একিট bitmask এ িলেখ রাখবা
এখনও কান কান সংখ া valid, অথাৎ তামার ব ু কান কান সংখ া মেন মেন ধরেত পাের। তুিম
একিট কের করবা। আর সই ে র উপর িভি কের তামার এই valid সংখ ার সট ই ভােগ
ভাগ হেয় যােব। এই ই ভােগ আবার DP চািলেয় দখবা য কান ভােগ বিশ করেত হেব।
এরকম িতিট িবট িনেয় িনেয় try করেলই হেব। িক সম া হল এই ে mask এর সাইজ 2n
যা অেনক বিশ। িক আমােদর m িক বশ ছাট মা 11. আমরা িক 2m জাতীয় িকছু করেত
পাির? আমরা 2m এ চাইেল mark করেত পাির য কান কান িবট স েক আমরা িজ াসা করব।

১১৮
িক তাহেলই তা যেথ হেব না। কারণ এই সব িবেটর ে র উ র িবিভ হেত পাের আর তার
উপর িভি কের আমােদর eligible valid number এর সট আলাদা আলাদা হেত পাের। তাহেল
আমরা এক কাজ করেত পাির আর তাহল সসব ে র উ র িক িক তারও একটা mask রাখেত
পাির (ধরা যাক কান কান কেরিছ সটা হল mask1 আর উ র িল mask2, যসব করা
হয় নাই সসেব 0 বা 1 যেকােনািটই থাকেত পাের, আমরা আমােদর িবধার জ 0 রাখব)। এর
মােন আমােদর state হেব 2m × 2m অথাৎ আমরা কান কান িবট িনেয় কেরিছ এবং সসব
ে র উ র িক িছল। িতবার আমরা নতুন একিট িবট িনবাচন করব আর সই িবট িনেয় িজ াসা
করব। উ র 0 বা 1 হেত পাের। িতিটর জ আমরা DP কল করব। যিদ দিখ য এই পযােয় এেস
mask1 িল কের উ র mask2 হেয়েছ এরকম সংখ ার পিরমান কবল একিট এর মােন আর
আমােদর করেত হেব না। এভােব DP করেলই হেব। অথাৎ মেন কর আমরা এখন DP(mask1,
mask2) ত এেসিছ। থেমই দখেত হেব এখন valid উ েরর সেট কত িল সংখ া আেছ (n এর
একিট লুপ চািলেয় চক করব য িতিট সংখ ােক mask1 িদেয় and করেল mask2 আেস িকনা)।
যিদ মা একিট সংখ া থােক এর মােন আমােদর আর করার দরকার নই (0 িরটান কের দাও)।
আর যিদ দখ একািধক আেছ এর মােন আমােদর করেত হেব। কান িবট স েক করব
তার একিট লুপ চালাব (i এর একিট লুপ 0 হেত m-1 পয )। এর উ র 0 হেত পাের বা 1 ও হেত
পাের। 0 এর ে আমােদর কল করেত হেব DP(mask1 | (1<<i), mask2) আর 1 এর ে
আমরা কল করব DP(mask1 | (1<<i), mask2 | (1<<i)). এর পর এেদর ভতের যিট বিশ
তার সােথ এক যাগ করেল (এখন য i তম িবট িনেয় করেল তার জ 1) তুিম পােব i তম িবট
িনেয় করেল এিট সহ আর সেবা কতিট করেত হয় তার পিরমান। এভােব িতিট i এর জ
আমরা যসব উ র পাব তােদর ভতর হেত যার জ তুিম সবেচেয় কম পােব সিটই হেব তামার
DP(mask1, mask2) এর উ র। ( )
আপাত দৃি েত তামার complexity O 2m × 2m × (n + m) কারণ িতিট state এর
ভতের তামােক একিট n আর আেরকিট m এর লুপ চালােত হে । তামরা চাইেল েতই একিট
precompute কের রেখ এখান থেক n সিরেয় ফলেত পার। আমরা n এর লুপ চািলেয় বর করিছ
য mask1 ে র জ কত িলর ে উ র mask2. আমরা যা করেত পাির তাহল DP চালানর
আেগই 2m × n একিট লুপ চািলেয় 2m × 2m সাইেজর একিট টিবল precompute কের রাখেত
পাির য mask1 ে র জ( mask2 উ র) কত িল সংখ ার জ । এেত কের আমােদর time
complexity কেম হেব O 2m × 2m × m .
( )
এখােন একটা িজিনস, যিদও আিম বললাম য আমােদর time complexity O 2m ×2m ×m
( m )
িক আসেল আমােদর complexity O 3 × m . কন? কারণ খয়াল কর, িতিট ে র জ
আসেল আমরা 3 িট ট রাখিছ। একিট হল " কির িন", আেরকিট হল " কেরিছ এবং 0 উ র"
আর সবেশষিট হল " কেরিছ এবং 1 উ র"। যেহতু আমােদর কােছ মাট m িট আেছ সেহতু
আমােদর state হল 3m িট, 2m × 2m না। যিদও আমরা 2m × 2m মমির ব বহার করিছ। তামরা
চাইেল 3m মমিরও ব বহার করেত পার। এে ে িট bitmask না রেখ একিট bitmask রাখেত
হেব িক সিট হেব 3 base এর। আেগ তা 0 আর 1 িদেয় বুঝাি লাম য কেরিছ িক কের নাই
বা ে র উ র িক 0 না 1. 3 base এর ে আমরা যটা করব তাহল 0 িদেয় বুঝাব কির
নাই, 1 িদেয় বুঝাব কেরিছ িক ে র উ র 0 আর 2 িদেয় বুঝাব কেরিছ িক ে র উ র
হল 1. বা চাইেল তামরা তামােদর ই া মত state define কের িনেত পার।

UVa 1412 Fund Management


সমস া: তামার কােছ িকছু টাকা আেছ, টাকার পিরমান 0.01 হেত 109 হেত পাের। তুিম m িদন
ধের িকছু শয়ার কনা বচা করেত পার (1 ≤ m ≤ 100). তুিম n ধরেনর শয়ার কনা বচা করেত
পার (n ≤ 8). শয়ার িলর িতিদেনর দাম দওয়া আেছ আর এও বলা আেছ য তুিম কান শয়ার
সেবা কত সংখ ক একবাের িকেন রাখেত পারেব। অথাৎ কােনা একটা শয়ােরর িলিমট যিদ হয়
2 এর মােন হল এমন কােনা সময় থাকা যােব না যখন তামার কােছ সই শয়ার 3 িট আেছ। তুিম
চাইেল ব বার 1 িট িকেন 1 িট বচেত পার, িক কােনা সমেয় 2 িটর বিশ না থাকেলই হেলা।
এরকম সকল শয়ােরর িলিমট আেছ এবং এই িলিমট সেবা 8 হেত পাের। এছাড়াও মাট শয়ােরর

১১৯
উপরও আেরকটা িলিমট আেছ অথাৎ তুিম কােনা এক সমেয় এর বিশ সংখ ক শয়ার রাখেত পারবা
না এবং এই িলিমট সেবা 8 হেত পাের। তামােক িতিট শয়ার এর িতিদন এর দাম দওয়া
আেছ। তুিম এক িদেন খুব জাড় একিট শয়ার িকনেত পারেব বা একিট শয়ার বচেত পারেব, একই
সােথ িকনেত ও বচেত পারেব না বা একািধক কনা বচাও করেত পারেব না। বলেত হেব তুিম সকল
শত মেন কনা বচা করেল কত লাভ হেব। এছাড়াও বলেত হেব তুিম কীভােব শয়ার কনা বচা
করেব।

সমাধান: DP টা বশ সহজ। তুিম একিদন একিদন কের আগােব আর সই িদন তুিম িকছু িকনেব
নাহয় বচেব নাহয় িকছুই করেব না। তরাং তামােক িট িজিনস মেন রাখেত হেব (state). এক-
তুিম এখন কত তম িদেন আছ, ই- তামার কােছ এখন কান শয়ার কয়িট কের আেছ। তুিম যিদ
এই িট িজিনস মেন রাখেত পার তাহেল তা DP করা কােনা ব াপারই না। কথা হল কান িজিনস
কয়টা কের আেছ সটা state কের রাখেল িক খুউউউব বড় state হেয় যায় না? এখােন আমােদর 8
রকেমর শয়ার থাকেত পাের আর 8 রকেমর শয়ার এর িতিট 9 রকম ভােব থাকেত পাের ( যমন
কােনা একিট শয়ার 0 িট, 1 িট এরকম কের সেবা 8 িট থাকেত পাের)। তরাং আমােদর state
এর সাইজ হয় 98 = 43 × 106 আর এর সােথ ন হেব িদেনর সংখ া 100 অথাৎ 4 × 109 এর
মত। এর িভতের আবার আমরা কান শয়ার বচব বা কান শয়ার িকনব তার একিট লুপ চালাব।
তরাং আমােদর time complexity হেয় যাে 8 × 4 × 109 . অেনক বড়! এেক তা সমেয় আটেব
না, ই এ এেতা বড় state মমিরেত ধরেব না।
িক করা যায়? একটা িজিনস খয়াল কর আমরা য ধেরিছ য আমােদর কােছ এখন কান কান
শয়ার আেছ তা 98 রকম হেত পাের এটা িক একটা overestimate. কারণ মেন কর থম শয়ার
তামার কােছ 8 টা আেছ, তাহেল িক পেরর আর কােনা শয়ার তুিম িকনেত পারেব না। এখন
হল এটা কত বড় overestimate? তামরা চাইেল একিট backtrack কাড িলেখ দখেত পার য
আসেল কত িল valid state আেছ, অথাৎ তুিম খুব জাড় 8 ধরেনর শয়ার িকনেত পারবা আর
মাট 8 টার বিশ শয়ার িকনেত পারেব না। তাহেল কত িল িভ িভ valid state হেত পাের।
অথবা চাইেল তুিম mathematically ও বর করেত পার। এখােন আমােদর হল 8 ধরেনর
িজিনসেক 8 িট বাে মাট কত ভােব আমরা distribute করেত পাির। এটা combinatorics এ
খুবই common সম া। 8 িট িজিনসেক 8 িট 1 মেন কর, আর 8 িট বাে র জ 7 িট 0 ক না
কর। এবার এই 8 + 7 = 15 িট িজিনসেক permute কর। হেত থম 0 পয যত িল 1
আেছ স িল থাকেব থম বাে , থম 0 হেত ি তীয় 0 এর মােঝর 1 থাকেব ি তীয় বাে , এরকম
কের শষ (স ম) 0 এর শেষ যা থাকেব তা থাকেব শষ (অ ম) বাে । তার মােন আমরা যিদ বর
করেত পাির এই 15 িট িডিজট কত ভােব permute করা যায় তাহেলই আমরা পেয় যাব কত ধরেনর
state থাকেব। 15িট িডিজট যার 8 িট 1 আর 7 িট 0 এেদরেক মাট 7!8!
15!
= 6435 ভােব permute
করা যায়। এটা িঠক য আমরা এখােন িকছু িজিনস ধির নাই যমন- 7 িট িজিনসেক 8 িট বাে বা
7 িট িজিনসেক 7 িট বাে বা ইত ািদ। িক এটু বুঝা যাে য আমােদর মাট state এর সংখ া
আসেল 98 এর মত ভয় র বড় হেব না। কারণ দখ যিদ আমােদর 8 িটর কম ধরেনর শয়ার থােক
তাহেল আমরা চাইেলই নতুন শয়ার সৃি করেত পাির যার িলিমট হেব 0 বা যার দাম িতিদন 0 টাকা
হেব। তাহেলই হেব। বািক থাকল তুিম তা কােনা এক মুহূেত 8 িট শয়ার না রেখ 7 িট শয়ারও
রাখেত পার বা 6 িট বা এরকম আর িক। সে ে মেন কর তামার কােছ 8 িট না, মাট 9 িট বা
আেছ। আর তুিম শষ বা ধের ফেল িদেব। তাহেলই তা 0 . . . 8 যেকােনা পিরমান বলেক 8 িট
বাে কত ভােব রাখা যায় তা বর হেয় যােব তাই না? এর পিরমান কত? 8!8!16!
= 12870. তরাং
আমােদর valid state আসেল বিশ না।
তাহেল আমরা কাড করব কীভােব? যিদ memory সম া না হত তাহেল আমরা চাইেল 98
রকম কের state represent করেত পারতাম। এেত TLE খাবা না িক MLE খেয় যেত পার।
তাহেল িক করা যায়?
একিট উপায় হল state ক save কের রাখার জ আমরা য array ব বহার কের থািক তা না
কের একিট map ব বহার করেত পার। অথাৎ তুিম DP এর িভতের ঢুেক map চক কের দখবা
য তুিম এই state এ আেগ এেসছ িকনা আসেল উ র িরটান কের দাও। আর না আসেল উ র বর
হেয় গেল তা map এ রেখ দাও পের কােজ লাগেব এই ভেব। কান শয়ার কয়িট কের আেছ
সিট কােশর জ তামরা চাইেল 9 base এর সংখ া ব বহার করেত পার। আবার চাইেল একিট

১২০
vector ব বহার করেত পার। কারণ তুিম তা map ই ব বহার করছ, তরাং vector ক map
কের রাখেত কােডর িদক থেক কােনা সম া হেব না। যিদও হয়েতা একিট 9 base সংখ া রাখা
cost efficient. আবার cost efficient নাও হেত পাের, কারণ তামােক 9 base এর না ার থেক
ন ভাগ mod কের বুঝেত হেব কান শয়ার কয়টা আেছ ইত ািদ, যা হয়েতা costly হেত পাের।
তামােক একটু experiment কের দখেত হেব আর িক। 9 base এর না ার মােন তা বুঝছ? এর
আেগ যরকম 3 base এর না ার ব বহার কেরিছলাম িঠক সরকম।

UVa 10934 Dropping Water balloons


সমস া: তামার কােছ মাট k িট পািন ভরা বলুন আেছ (k ≤ 100). তামােক বলেত হেব n তালা
একিট িবি েঙর সবেচেয় িনেচর কান তালা থেক বলুনিট ফলেল তা ফেট যায় (n এর মান 64
িবট এর একিট সংখ া)। তামােক এই কাজ সবেচেয় কম বার চ া কের বর করেত হেব। একটা
চ া মােন কােনা এক তালা হেত একিট বলুন ফলা। মেন কর তুিম কােনা এক তালা হেত বলুন
ফলেল আর তা ফাটল না, তাহেল িক চাইেল সই বলুন তুিম আবােরা ব বহার করেত পারেব। যিদ
তামার 63 এর বিশ বার বলুন ফলেত হয় তাহেল বল য উ র 63 এর বিশ।
সমাধান: সম াটা একটু জিটল। বলুেনর সংখ া বশ কম মা 100, িক িবি েঙর উ তা বশ
বিশ। তেব একটা িজিনস, তাহল উ র িক খুব কম, মা 63 হেত পারেব খুব জাড়। এর বিশ
হেল তা িনেয় না ভাবেলও হেব। একটা টকিনক হল তামার যটা উ র সটােক DP এর state
বানােনা, আর ইনপুেট দওয়া কােনা বড় স ােক DP এর উ র বানােনা। যমন এই ে আমরা
বলেত পাির, তামার কােছ i টা বলুন আেছ আর তুিম j বার চ া করেত পারেব- তাহেল সেবা কত
উ তার িবি ং এর ে তুিম উ র বর করেত পারেব? যিদ আমরা সকল i, j এর জ এই মান
জেন যাই তাহেল n এর জ আমােদর উ র বর করা বশ সহজ হেব।
তাহেল আমােদর হল i িট বলুন ব বহার কের j চ ায় আমরা কত উচু িবি েঙর উ র বর
করেত পারব। সম াটা খুব একটা কিঠন না। ধরা যাক কােনা এক তালা হেত আমরা একিট বলুন
ফললাম। যিদ এিট না ফােট, তাহেল আমরা i িট বলুন ব বহার কের j − 1 চ ায় ধরা যাক A
উ তার িবি েঙর উ র বর করেত পাির। আর যিদ বলুনিট ফেট যায় তাহেল আমােদরেক দখেত
হেব j − 1 চ ায় i − 1 িট বলুন ব বহার কের কত উ তার িবি েঙর উ র বর করেত পাির, ধরা
যাক B. তাহেল আমােদর i, j এর জ উ র হেব A + B + 1. এভােব i, j এর একিট DP করেলই
হেয় যােব। আমােদরেক base case িনেয়ও একটু িচ া ভাবনা করেত হেব বা এই য িকছু ণ
আেগর ফমুলা A + B + 1 এর 1 িনেয়ও হয়েতা একটু িচ া ভাবনা করেত হেব। িক মূল আইিডয়া
হল এটা।

UVa 1336 Fixing the great wall


সমস া: একিট দয়ােল একিট রাবট আেছ। রাবটিট েত কাথায় আেছ তা বলা আেছ। এই
দয়ােলর িকছু িকছু ান ন হেয় িগেয়েছ। রাবট যিদ সসব ােনর উপর দয়া যায় তাহেল সসব
ান ভাল হেয় যােব। িতিট ন ান সারােত কত খরচ হেব তা দওয়া আেছ। তেব যিদ কােনা ন
ান সারান না হয় তাহেল তার খরচ িত সেকে ড িকছু পিরমান কের বৃি পােব ( িতিট ন ােনর
জ এই খরচ িভ িভ হেত পাের)। এই রাবটিটর speed দওয়া আেছ এবং এই speed িট
constant. এই speed এ রাবট বােম বা ডােন যেত পাের। এখন বলেত হেব সবেচেয় কম কত
খরেচ সব িল ন জায়গা সারান যােব। মাট ন ােনর সংখ া সেবা 1000.
সমাধান: মেন কর রাবট তার র জায়গা থেক িকছু দূর বােম গল। তাহেল স যটু ান কাভার
করল সসব ােন যসব ন জায়গা িছল তা িঠক হেয় যােব। এখন কথা হল কীভােব এই রাবট ডােন
বােম যােব যােত কের সব ন ান কাভার হয়। হেত পাের য রাবট থেম একদম বােমর ন ােন
গল এর পর সব থেক ডােনর। বা থেম একদম ডােন গল, এর পর সব থেক বােম। িক এই
ই অপশেন তা optimal উ র নাও পাওয়া যেত পাের। মেন কর তামার িঠক বােম এমন একিট

১২১
ন ান আেস যিটর খরচ িত সেকে ড অেনক কের বােড়। আবার মেন কর এরকম একিট জায়গা
ডােনও আেছ। তাহেল তামার উিচত হেব তুিম বােম িগেয় ঐ বিশ খরেচর জায়গা কাভার কের ঘুের
ডােন এেস আবার বিশ খরেচর জায়গা কাভার করা, এরপর বািকটু কাভার করা যােব। এখােন
খয়াল কর আমরা িক বােমর বিশ খরেচর জায়গা পার কের পেরর ন জায়গা িলেত যাই নাই।
এবং একবাের বাম/ডান িগেয় পের একবাের ডান/বাম যাওয়ার থেক এভােব যাওয়া অব ই ভাল।
তাহেল একটু িচ া কের দখ তা আমােদর optimal উ র এর রা া দখেত কমন হেব? Zig-Zag
তাই না? অথাৎ থেম িকছু দূর বােম, এরপর িকছু দূর ডােন, এর পর িকছু দূর বােম, আবার িকছু
দূর ডােন এরকম কের। িক এটা কীভােব DP এর state আকাের িলখেব? বা DP design করেব
কীভােব? আমােদর মেন রাখেত হেব য আমরা বাম িদেক কত দূর ইতমেধ ই কাভার কেরিছ আর
ডান িদেক কত দূর। এই ই মাথা রাখেত হেব। িক আমরা কাথায় আিছ? খয়াল কর আমরা িক
বলেতই পাির আমরা হয় বাম মাথায় আিছ নাহয় ডান মাথায়। মােঝ থেক িক লাভ নই। আমরা
যখন বাম মাথায় আেছ তখন চাইেল আরও বােম যেত পাির। অথবা ডান িদেক যতদূর কাভার হেয়েছ
তার থেকও বিশ দূর যেত পাির। অথাৎ আমােদর state হেব i, j, k যখােন i হল বােমর মাথা,
j হল ডােনর মাথা আর k এর মান 0 মােন আমরা বােম আিছ আর 1 মােন ডােন আিছ। এই state
হেত আমরা i − 1, j, 0 ত যেত পাির আবার চাইেল i, j + 1, 1 এও যেত পাির। এভােব আমরা
পুেরা সম া সমাধান করেত পাির।
অথাৎ আমােদর DP ফাংশেনর parameter হল i, j, k. এর মােন- আমরা i হেত j কাভার
কেরিছ এবং k এর মান অ সাের আমরা হয় i এ আিছ অথবা j ত আিছ। এখন হল আমরা বািক
কাভার করা হয় নায় এরকম জায়গা িল কত কম খরেচ কাভার করেত পারব। আেগই বেলিছ আমরা
এই state হেত i, j + 1, 1 আর i − 1, j, 0 এই ই state এ যাবার চ া করব। ধরা যাক আমরা
i, j + 1, 1 এর জ DP কল করলাম এবং তা হেত DP িরটান হল। এখােন খয়াল কর কােনা এক
ন ােনর খরচ িক কান সমেয় সখােন িগেয়ছ তার উপর িনভর কের। অথাৎ আমােদর state এর
আেরকটা parameter লাগেব- সময়। িক তা করেল তা state অেনক বিশ হেয় যােব। আর িক
উপায় আেছ? উপায় হল, খয়াল কর, মেন কর আমরা i হেত a ত যাি । আর ইতমেধ ই i হেত
j কাভার হেয় িগেয়েছ। বািক যারা আেছ তােদর খরচ িত সেকে ড কত কের বােড় তা আমােদর
জানা আেছ। আমরা যা করব তাহল i হেত a ত যেত যই সময় লােগ সই সমেয় এসব ন ােনর
খরচ কত বাড়েব সটা িহসাব কের ফলব। তাহেল খয়াল কর কােনা ন ােন গেল তার খরচ আর
variable না, বরং fixed. এর খরচ যত বেড়েছ তা ইতমেধ ই িহসাব কের ফলা হেয়েছ। তরাং
আমােদর আর কােনা ঝােমলা বািক নই। আমরা িত DP ত DP কল করব আর যই ান িল
বািক আেছ তােদর খরচ কত বাড়ল তা িহসাব কের ফলব। একটা ছাট উদাহরন দই। মেন কর
আমরা i = 1 হেত a = 3 এ যাি , আর আমােদর j = 2. 1 হেত 3 এ যেত মেন কর সময় লােগ x.
এখন আমােদর দখেত হেব x সমেয় বািক ন ান িলর খরচ কত বােড়। সই পিরমাণটাই আমরা
যাগ কের ফলব। ফেল সমেয়র সােথ সােথ কােনা ন ােনর খরচ যা বােড় তা িত transition
এই াে ডল হেয় যায়।

UVa 12105 Bigger is Better


সমস া: LED display এর মত 0 বানােত 6 টা, 1 বানােত 2 টা, 2 বানােত 5 টা, 3 বানােত 5 টা,
4 বানােত 4 টা, 5 বানােত 5 টা, 6 বানােত 6 টা, 7 বানােত 3 টা, 8 বানােত 7 টা, 9 বানােত 6
টা ম াচকািঠ লােগ। তামােক n টা ম াচকািঠ দওয়া আেছ। বলেত হেব এই ম াচকািঠ িল ব বহার
কের m ারা িবভাজ সবেচেয় বড় কান সংখ া তির করেত পারবা। n এর মান সেবা 100 আর
m এর মান সেবা 3000 হেত পারেব। যিদ এরকম কােনা সংখ া তির করা স ব না হয় তাহেল
-1 ি ট করেত হেব।
সমাধান: থম দখায় এটা খুব একটা কিঠন সম া মেন হয় না। আমােদর থম িচ া এর state কী
হেব। সবার থেম n × m এর মত state মাথায় আেস অথাৎ আমােদর এখন আর কয়টা ম াচকািঠ
বািক আেছ আর বািক যই সংখ া বানােত হেব তােক m িদেয় mod করেল কত হেব বা আমরা যটু
সংখ া বািনেয়িছ তােক m িদেয় mod করেল কত হেব। আর DP এর value িহসােব থাকেব য কত

১২২
বড় সংখ া বানােনা যায়। িক এখােন িকছু details বািক আেছ। যমন আমরা বাম হেত ডােন অংক
বিসেয় বিসেয় সংখ া তির করব নািক ডান হেত বােম বিসেয় বিসেয়, আমরা যই সংখ া তির করব
তা সবেচেয় বড় বানাব কীভােব ইত ািদ। ধীের ধীের আগােনা যাক।
এখােন clash of interest আেছ। মােন, মেন কর আমরা যিদ বাম হেত ডােন সংখ া তির
করতাম তাহেল িক সংখ ার mod কত হেব তা বর করা সহজ । আেগর mod যিদ a হয় তাহেল
নতুন mod হেব 10a + d (mod m) যখােন d হল তুিম এখন যই িডিজট বসােল তা। িক তুিম
যিদ ডান হেত বােম যাও তাহেল এিট একটু জিটল। মেন কর আমােদর একিট সংখ া আেছ এবং আমরা
এর বােম একিট িডিজট বসাি । ধরা যাক আমােদর ডােনর সংখ ার mod a এবং তার length b
আর তুিম বােম যই নতুন িডিজট বসা তাহল d. তাহেল আমােদর নতুন mod হেব d10b + a
(mod m). একটু জিটল। ধু জিটল না আসেল এভােব করেল dp এর state বেড় যােব। খয়াল
কর, আমরা কান িডিজট d বসাব তার একটা লুপ চালাি । আবার a আর m িক dp এর state এ
থাকেব বেলিছলাম। িক আমােদর তা b ও দরকার। তাহেল b কও state এ রাখেত হেব। যেহতু
n এর মান সেবা 100 আর 1 বানােত আমােদর সবেচেয় কম 2 িট কািঠর দরকার হয় তাই আসেল
b এর সেবা মান 100/2 = 50 (অথাৎ 50 িট 1). তরাং আমরা যিদ ডান হেত বােম যাই তাহেল
আমােদর একিট অিতির প ারািমটােরর েয়াজন হেব। যিদও সই প ারািমটােরর সেবা মান খুব
একটা বড় না।
আমরা িক এটা preliminary িচ া ভাবনা করলাম। আমরা এখনও সবিকছু ফাইনাল কির নাই।
ধু মা এটা দখলাম য আমরা বাম থেক ডােন গেল িক হয় আবার ডান থেক বােম গেল িক
হয়। এছাড়াও আমােদর আেরকটা িবষয় মাথায় রাখেত হেব য আমরা আমােদর শষ উ রটা বড়
করেত চাই।
আমরা থেম দিখ বাম হেত ডােন গেল িক হয়। অথাৎ আমরা বাম হেত এেক এেক িডিজট
বসাি । ধরা যাক বতমান mod a, আর আমােদর n িট কািঠ বািক আেছ- এই িট হল state. আর
আমােদর DP এর value হেব বািক n িট কািঠ ব বহার কের (সব য ব বহার করেত হেব এমন কথা
নই) এর ডােন সবেচেয় কত বড় সংখ া তির করা যায় যন পুেরা স ািট m ারা ভাগ যায়। আমরা
িতিট state এ d এর একিট লুপ চালাব। d বসােল আমােদর নতুন mod হেব 10a+d (mod m).
এবার এিট ব বহার কের আর n হেত d ত ব ব ত কািঠ িল বাদ িদেয় আমরা recursive ভােব
DP কল করব। আর আমােদর base case হেব যখন আমােদর state এর mod এর মান 0 বা
আমােদর কােছ থাকা n িদেয় যখন আর কািঠ বানােনা স ব না। এরকম কের আমরা িতিট d এর
জ চ া করব এবং দখব সবেচেয় কত বড় সংখ া আমরা ডােন বসােত পাির।
এখন এই DP ব বহার কের আমরা path printing এর মত কের সবেচেয় বড় সংখ া ি ট
করেত পাির। থমত খয়াল কর আমােদর বােমর সংখ া শূ হওয়া যােব না। তাই আমরা 1 হেত 9
এর লুপ চালাব এবং DP ক বলব য আমরা এই সংখ া বিসেয়িছ, আমােদর বতমান mod এেতা,
এখন বল আমােদর ডােন সবেচেয় বড় কত লংেথর সংখ া বসান যায়? 1 হেত 9 এর যিট বসােল
সবেচেয় বিশ সংখ ক অংক বসান যায় আমরা সই অংকিট বসাব, যিদ একািধেকর জ সবেচেয়
বিশ সংখ ক অংক বসান যায় তাহেল আমরা তােদর মধ হেত সবেচেয় বড় অংক বসাব। এরপর
হেত আমরা 0 হেত 9 এর জ চ া করব। অথাৎ এেদর িতিট বিসেয় বর করব আমােদর বতমান
mod কত, আর কয়িট কািঠ বািক আেছ। তার উপর িভি কের আমরা DP কল করব।
যিদ আমরা ডান হেত বােম DP করেত চাই তাহেল আমােদর state হেব আমােদর ডান িদেকর
লংথ কত, ডান িদেকর সংখ ার mod কত আর কয়িট কািঠ বািক আেছ- এখন বল বাম িদেক সেবা
আর কত িল অংক বসান যােব। িক এেত একটা সম া আেছ। এরকম DP এর ে path
printing একটু সম া। যিদ যেকােনা path চাইত তাহেল হয়েতা সম া িছল না, িক সবেচেয়
বড় সংখ া চেয়ই একটু কিঠন কের ফেলেছ। এভােব িচ া কর, আমরা ডান হেত বােম সংখ া বসাি ।
মেন কর ডােন 7 বসালাম এরপর DP ত দখলাম য বােম আর 3 িট সংখ া বসান যােব। আবার
মেন কর 5 বসােলও DP বলেছ য আর 3 িট বসােত পারব। িক আমরা তা জািন না কানটা বসােল
ভাল হেব। আমরা যিদ ডান হেত বােম আসতাম তাহেল ব াপারটা সহজ হত, তাই না? এই জ
এই সম ার ে ডান হেত বােম DP করা সম া। অস ব িক না। আমরা যিদ DP এর return
মান িহসােব বােম কত বড় লংেথর সংখ া বসান যায় তা না রেখ, বােম কত বড় সংখ া অথাৎ পুেরা
সংখ াটাই রািখ তাহেলই হেব। িক এে ে আমােদর bigint ব বহার করেত হেব কারণ আমােদর
উ র তা 50 লংেথর হেত পাের।

১২৩
তরাং আমােদর যিদ সবেচেয় বড় বা ছাট path ( লংেথ না, lexicographically বা numerically)
ি ট করেত বেল তাহেল একটু সাবধান হেয় DP িডজাইন করেত হেব।

UVa 1204 Fun Game


সমস া: একিট ােন িকছু ছেল মেয় গাল হেয় বেস আেছ। তুিম randomly একজনেক একিট
কাগজ দেব। স সখােন B িলখেব যিদ স ছেল হয়, আর G িলখেব যিদ স মেয় হয়। এরপর
স তার পছ মত এক িদেক (clockwise বা anti-clockwise) সই কাগজিট তার পােশর জনেক
দেব। তার পােশর জনও একই ভােব B বা G িলখেব। এরপর থম জন যিদেক কাগজ িদেয়িছল
ি তীয় জনও একই িদেক িদেব। এভােব চলেত থাকেব। কােনা একজন এর কােছ িগেয় এই কাগজ
শষ হেব। সই কােনা একজন ক তার িঠক নই। এরকম কের তামােক সেবা মাট 16 িট কাগজ
দওয়া আেছ। সই কাগজ িলেত িক িলখা আেছ তা তামােদর ইনপুট। বলেত হেব সবেচেয় কম
কতজন ছেল মেয় থাকেল সব িল কাগজ valid. ইনপুট string িলর লংথ সেবা 100 হেত
পাের।

সমাধান: সম াটা বশ কমন। আমরা সম াটা একটু সহজ কির। মেন কর আমরা জািন য সবসময়
clockwise যােব। তাহেল আমােদর সমাধান িক হেব? এটার সমাধান আমরা িশখব। তাহেল তুিম
মূল সম ার সমাধান িনেজরাই করেত পারেব।
এই সমাধােনর জ তামােক থেমই দখেত হেব য দ N িট ি ং এর মােঝ এমন কউ
আেছ িকনা য অ কারও ভতের substring আকাের আেছ। থাকেল ছাটটােক ধের ফেল িদেত
হেব। কারণ আমােদর উ ের যিদ বড়টা থােক তাহেল তা ছাটটা এমিন এমিনই থাকেব তাই না?
আমরা যিদ এই ছাটেদরেক সিরেয় না ফিল তাহেল আমােদর সমাধােন সম া হেব। এখন আরও
মেন কর এমন কােনা ি ং নই যটা পুরা circle ঘুের আেস। আমরা পের দখব এই assumption
না থাকেলও আমােদর সমাধান কীভােব কাজ কের। তার মােন আমােদর optimal উ র হেব এরকম-
থেম একিট ি ং থাকেব S1 , তােক যতদূর স ব overlap কের এরপর থাকেব S2 , এেক যতদূর
স ব overlap কের থাকেব S3 এরকম কের সবেশেষ থাকেব SN . এই SN আবার ঘুের িগেয়
S1 এর সােথ সবেচেয় বিশ দূর overlap কের থাকেব। খয়াল কর যখন আমরা S3 বসাি তখন
আমরা িক ধু S2 িনেয়ই িচ া করিছ, S1 ক পা াই িদি না। কন? কারণ S3 যিদ S1 এর সােথ
overlap কের আর এেদর মােঝ যিদ S2 থােক, এর মােন S2 পুেরাপুির S3 এর ভতের আেছ। িক
এরকম ি ং তা আমরা েতই সিরেয় ফেলিছ তাই না? তরাং আমােদর state এ যা রাখেত
হেব তাহল এখন পয কান কান ি ং ব বহার কের ফেলিছ আর সবেশেষ কান ি ং ব বহার
করা হেয়েছ। িঠক travelling salesman problem এর মত। তাহেল আমরা িকভােব সমাধান
করব? থেম আমরা যেকােনা একিট ি ং িনেয় করব (TSP ত যরকম যেকােনা একিট
নাড থেক কির)। যেকােনা ি ং থেক করেলই হেব কারণ িতিট ি ংই তা আমােদর
circle এ থাকেব তাই না? তরাং আমরা একিট ি ং িনেয় করলাম (ধরা যাক S1 ). এর পর
আমােদর state হেব সবেশষ কান ি ং ব বহার কেরিছ আর কান কান ি ং এই পয ব বহার
কেরিছ। এরপর আমরা কান ি ং িনব তার উপর লুপ চালাব। দখব য এই ি ং ইেতামেধ ই নওয়া
হেয়েছ িকনা। যিদ নওয়া হেয় থােক তাহেল তা আর এটা নবার ই আেস না। আর যিদ না নয়া
হয় তাহেল এটা নয়ার চ া করব। হল এটা িনেল cost কত হেব? Cost হেব এর আেগর
ি ং এ এই ি ং যতদূর স ব overlap করার পর যটু ি ং বািক থােক যাগ বািক অংেশর DP.
এভােব যসকল ি ং নওয়া বািক আেছ তােদর মােঝ যিট িনেল আমােদর cost সবেচেয় কম হয়
সিটই িনব। এভােব আমরা DP শষ করব। তাহেল এই DP ত আমরা ি ং িল এেকর পর এক
সবেচেয় কম খরেচ জাড়া লািগেয় একটা চইন বািনেয়িছ, এখনও একিট circle বানাই নাই। Circle
বানােনার জ তমন িকছু না আমােদর base case িনেয় একটু িচ া করেত হেব। আমােদর এই
DP এর base case িক? যখন সব ি ং নওয়া হেয় িগেয়েছ। আমরা যিদ একটু িচ া কির তাহেল
বুঝব য সব শষ ি ং একদম র ি ং এর সােথ সবেচেয় বিশ পিরমান overlap কিরেয় িদেত
পারেলই আসেল আমরা আমােদর circle কস া ডল কের ফলেত পারব (হয়েতা এেতা সহজ না,
একটু িচ া ভাবনা কের সিঠক ফমুলা বর করেত হেব, িক মূল আইিডয়া এটাই)। অথাৎ আমােদর

১২৪
এত ণ যই মাট খরচ হেয়েছ তা হেত র আর শেষর ি ং যত খািন( overlap) কের সটু র
cost আমােদর িবেয়াগ করেত হেব। এই DP এর time complexity O n2 2n যিদ আমরা িট
ি ং সবেচেয় বিশ কত খািন কের overlap কের থােক সটু precompute
( ) কের রািখ। ঐ িজিনস
precompute করেত তা বিশ cost নই তাই না? খুব জাড় O n2 L2 যখােন সেবা লংথ
হল L.
তাহেল আমরা সব িল ি ং ব বহার কের সবেচেয় কম লংেথর একিট circle বািনেয় ফললাম।
এবার আসা যাক আমরা য িকছু িজিনস বাদ িদেয়িছলাম সখােন। আমরা ধের িনেয়িছলাম য আমা-
দর এমন কােনা ি ং নই যিট পুেরা circle কাভার কের না। আমরা এই restriction উিঠেয় নই।
একটু িচ া করেল বুঝেব এই কস এমিন এমিনই া ডল হেয় যায়। এটা িক আিম অেনক বড় কথা
বেল ফেলিছ। আশা কির এই কথা তামরা চাখ বুেজ িব াস করেব না। একটু কাগেজ কলেম কের
দখ কন এই কথা সত । ফরমািল এই কথা মাণ করা খুব একটা সহজ কাজ না। আবার িবিভ
কস িদেয়ও য তামােদর ক convince করার চ া করব সটাও খুব একটা সহজ কাজ না। সহজ
কাজ হেব তামােদর উপর ছেড় দওয়া :) তামরা যভােব িচ া করেব তাহল anti case বানােনার
চ া করেব। মেন কর তুিম মেন করেতছ য এরকম case এ তামার এই সমাধান ভুল উ র দেব।
িক যখন দখেব য দয় না তখন িচ া করেব কন দয় না, কীভােব এই সমাধান তামার case
ক া ডল করেছ। এভােব তুিম আসেল বুঝেত পারেব কন এই সমাধান সিঠক। অথবা আেরক কাজ
করেত পার, িতিট ি ংেক ছাট কের ফলেত পার।
বািক থাকল আমরা য ধু clockwise ধেরিছ সটা। এটা া ডল করা খুব একটা কিঠন না।
যটা করেব সটা হল িতটা ি ং এর ই রকম ভােব িনেত পার এক সাজা ভােব আেরকটা উলেটা
কের। তরাং আমােদর bitmask এ N িটই িবট থাকেব কান ি ং নওয়া হেয়েছ কানটা নওয়া
হয় নাই তা বুঝানর জ । ওিদেক আেরকটা থাকেব যা বলেব সবেশষ কান ি ং িনেয়িছেল সটা
বুঝানর জ । আেরকটা নতুন সংখ া িনেত হেব যটা বলেব য শষ ি ংটা িক সাজা নওয়া হেয়িছল
নািক উলেটা। ব াস!

UVa 12099 The Bookcase


সমস া: N িট বই আেছ (N ≤ 70). িতিট বই এর height এবং thickness দওয়া আেছ।
Height সেবা 300 এবং thickness সেবা 30 হেত পাের। তামােক এই বই িল রাখার জ
একিট বুকেসলফ বানােত হেব। যেহতু শলেফর depth বই িলর মােঝ যার width সবেচেয় বিশ,
তার সমান হেব সেহতু আমরা বই এর width আর শলেফর depth িনেয় ভাবব না। আমােদর
শলেফ িতনিট থাক থাকা লাগেব। িতিট থােকর উ তা হেব সই থােক থাকা বই িলর মােঝ
যার উ তা সবেচেয় বিশ তার সমান। আর বুকেশলেফর স হেব িতিট থােক থাকা বই িলর
thickness এর যাগফল যার সবেচেয় বিশ তার সমান। অথাৎ আমরা বই িলেক tightly pack
কের একিট বুকেশলফ বানাব। আমােদর ল এই শলেফর ফল (অথাৎ উ তা ন ) যন
সবেচেয় কম হয়। এই সবেচেয় কম ফল তামােক ি ট করেত হেব।

সমাধান: এই সম াটা বশ র। কারণ এখােন অেনক parameter আেছ। তরাং ে ম পড়ার


সােথ সােথ বুঝা যায় না আমােদর expected time complexity কত হেব বা তামার state এ
িক িক রাখবা। খুব naive ভােব state দাঁড় করােল state এ িক িক থােক? িতন শলেফর উ তা,
িতন শলেফর বতমান স , আর বতমােন বই এর অ ােরর থম হেত কয়টা বই নওয়া হেয়েছ।
অব ই এত িল প ারািমটার নওয়া স ব না, তামরা চাইেল এর েটর complexity বর কের
দখেত পার। হল এখন িক িক ভােব এই অব া ভাল করা যায়। থেম খয়াল কর, আমরা
চাইেল েতই বলেত পাির য আমারা সবেচেয় উচু বই থম থােক রাখব। এর ফেল আমােদরেক
আর িতনিট শলেফর উ তা রাখা লাগেছ না, িট রাখেলই হেয় যাে । আমরা আমােদর িবধার
জ বই িলেক তােদর উ তা অ সাের সট কির আর থম বইেক থম থােক িদেয় দই। তাহেল
আমােদর 7 টা প ারািমটার থেক একটা কমেলা। আেরকটা িজিনস খয়াল কর, আমােদর িক সব
শলেফর স রাখার দরকার নই। আমরা জািন কান কান বই িনেয়িছ, আর যিদ আমরা জািন
ই শলেফর বই এর স তাহেলই আমরা তৃতীয় শলেফর স বর কের ফলেত পারব। বািক

১২৫
থাকল 5 টা। তরাং আমােদর কােছ আেছ ইটা শলেফর উ তা, ইটা শলেফর স আর বই এর
অ ােরর কান পয বই নওয়া হেয়েছ। িক এই 5 টা িক independent, তরাং এেদরেক আর
এভােব কমান স ব না। একটা কমন টকিনেকর কথা বেলিছলাম। তাহল প ারািমটারেক ভ ালুেত
পাঠােনা। খয়াল কর আমােদর এই DP এর ভ ালু হল 0 বা 1, স ব িক স ব না। আমরা িক কােনা
ভােব উ র বা কােনা একটা প ারািমটারেক ভ ালুেত আনেত পাির না? স ব িক স ব না সটা নাহয়
-1 িদেয় বুঝাব? এরকম হেত পাের- আমরা ইটা শলেফর স জািন (তৃতীয় শলেফর স হল
এই পয নওয়া বই এর স িবেয়াগ এই ইটা শলেফর স ), আর একটা শলেফর উ তা জািন,
আর কান কান বই নওয়া হেয়েছ তাও জািন। ভ ালু ত থাকেব তৃতীয় শলেফর উ তা সবেচেয়
কম কত হেল আমােদর state এর 4 টা প ারািমটারই কাজ করেব। ধু ধু তা তৃতীয় শলেফর
উ তা বািড়েয় লাভ নাই তাই না? আমােদর যত কমােনা যায় ততই লাভ। তরাং এভােব আমরা 4
টা প ারািমটাের নামােত পাির। তাহেল আমােদর complexity দাঁড়ায় 21002 × 70 × 300. এখনও
বশ বিশ। অ ত আরও একিট কমােত হেব। এখন খয়াল কর আমােদর িক চেয়েছ। আমােদর
চেয়েছ মাট ফল। আমরা তা ভ ালু বা প ারািমটার িহসােব একিট উ তা বা একিট এরকম
কের রাখিছ। আমরা িক আমােদর উ র িক চেয়েছ তার িভি েত কােনা optimize করেত পাির?
এই ধাপটাই মেন হয় সবেচেয় কিঠন। উ র বেল িদি - আমরা চাইেল ভ ালু িহসােব একটা শলেফর
উ তা না বরং ইিট শলেফর উ তার যাগফল রাখেত পাির। আর একিট প ারািমটার ব বহার
করেত পাির এটা বলেত য এখােন কয়টা শলেফর উ তা আেছ, একটা না ইটা। তরাং আমােদর
state হেব 21002 × 70 × 2 আর ভ ালুেত থাকেব ইিট (বা একিট) শলেফর উ তার যাগফল।
িনঃসে েহ এটা খুব একটা সহজ observation না। িক এটা একটা িবশাল িশ া!

UVa 12170 Easy Climb


সমস া: n িট পাহাড় পাশাপািশ আেছ (n ≤ 100). িতিট পাহােড়র উ তা hi দওয়া আেছ
(hi ≤ 109 ). তুিম চাইেল যেকােনা পাহােড়র উ তা কমােত বা বাড়ােত পার। এর জ cost
হেব তুিম মাট যই কয় unit কমােল বা বাড়ােল (সবসময় integer unit কের কমেব বা বাড়েব)।
পাহােড়র উ তা িল এমন হেত হেব যন পাশাপািশ িট পাহােড়র উ তার পাথক d এর বিশ না
হয় (d ≤ 109 ). বলেত হেব সবেচেয় কম কত cost এ এই কাজ করা স ব। যিদ স ব না হয়
তাহেল impossible ি ট করেত হেব।

সমাধান: বলার অেপ া রােখ না য সম াটা খুব একটা সহজ নয়। খুব naive ভােব িচ া করেল
state হেব আমরা এখন কান পাহােড় আিছ, আর বতমান পাহােড়র modified height কত। তাহেল
আমরা কােনা একিট state এ এেস এর পেরর পাহােড়র height কত হেব তার উপর লুপ চালাব
তাহেলই হেব। যেহতু কােনা পাহােড়র height সেবা 109 হেত পাের সেহতু এটা একটা ব াপক
costly সমাধান। কী করা যায়?
একটু িচ া করেলই বুঝা যায় য- সব height আমােদর জ important না। িক কান কান
height আমােদর জ important তাও বুঝেত পারা খুব একটা সহজ না। মেন কর i < j. যিদ
hj > hi + d ∗ (j − i) হয় বা hj < hi − d ∗ (j − i) হয় এর মােন i আর j এর মােঝর পাহােড়র
উ তা যভােবই রােখা না কন সটা valid arrangement হেব না। কারণ i এর পেরর পাহাড় তার
থেক খুব জাড় d উ তা বিশ হেত পাের, তার পেরর পাহাড় 2d, তার পেরর পাহাড় 3d, এরকম
কের j তম পাহাড় খুব জাড় d ∗ (j − i) উচু হেত পারেব। একই ভােব কত কম উচু হেত পারেব
সটাও বর করা যােব। মূল কথা আমরা যিদ কােনা একিট পাহাড় িফ কির তাহেল এর আেগর বা
পেরর পাহাড় িলর জ bound পাওয়া যােব। সব িল পাহাড়েক তার bound িল মানেত হেব।
এখােন মূল observation হল কােনা একিট কলােম (পাহােড়) যত িল boundary আেছ স িলই
হেলা important height. অথাৎ তুিম িতিট পাহাড়েক িফ মেন কের বর কর য i তম পাহাড়িটর
জ bound িক িক। এই সব bound এর মান িলই হেলা important height. এখােন একটা
িজিনস খয়াল কর, সটা হল- optimal pattern য এই সব height ব বহার না কের হেত পারেব
না- তা না। িক এই সব height ব বহার কের optimal মান পাওয়া যােবই। চাইেল এটা আমরা

১২৬
ফমাল ভােব মাণ করেত পাির। আিম িনেজও িঠক িনি ত না কীভােব এটা মাণ করা স ব। িক
আসেল ািমং কে টে আমরা অেনক িজিনস ফমাল ভােব মাণ কির না। বরং িকছু উদাহরন, (িকছু)
intuition এর উপর িনভর কের আমরা সমাধান কের থািক। তাহেল িতিট পাহােড় আমােদর O n
িট স ব ান থাকেব (আসেল 2n − 1, কারণ িতিট j ত অ সকল i এর জ উপের আর িনেচ
িট কের বাউ ড পাওয়া যায়, আর তাছাড়া ঐ কলােমর initial height তা আেছই)। তরাং আমরা
i তম পাহােড়র িতিট interesting height থেক পেরর( পাহােড়র
) িতিট interesting height
িলেত যাবার চ া করব (d এর িলিমট মেন)। অথাৎ O n3 সমাধান।
( )
চাইেল অব এেক O n2 এ পিরনত করেত পার। মূল আইিডয়া হল, মেন কর তুিম i তম
পাহােড়র j তম interesting height এর জ optimal মান বর কেরছ। এখােন মেন কর i − 1
তম পাহােড়র a হেত b পয interesting height িল হেত আসা যায়। এখন তুিম যিদ i তম
পাহােড়র j + 1 তম interesting height এর জ optimal মান বর করেত চাও তাহেল একবার
িচ া কের দখ তা i − 1 পাহােড়র কান কান interesting height হেত আসেত পারেব? ায়
a হেত b পয interesting height হেত তাই না (a < b)? মেন কর j + 1 তম interesting
height, j তম interesting height অেপ া বড়। এর মােন হয়েতা দখা যােব a ানিট j + 1
তম interesting height হেত d এরও বিশ দূের চেল িগেয়েছ। তরাং আমােদরেক সটা খয়াল
রাখেত হেব এবং েয়াজেন a এর মান বাড়ােত হেব (বাড়ােনা নাও লাগেত পাের, বা একািধকবারও
বাড়ােত হেত পাের)। একই ভােব দখা যােব b + 1 তম interesting height িট আমােদর থেক
d রে চেল এেসেছ। তরাং b এর মানও হয়েতা বাড়ােনার েয়াজন হেত পাের। এভােব আমরা
j +1 এ কই কই থেক আসা যায় সই [a, b] রে র মান আমরা খুব সহেজই বর কের ফলেত পাির।
এভােব এক বাড়ােয় কমােয় [a, b] বর করার কারণ হল এেত কের i তম পাহােড়র সকল interesting
height এর জ এই র linear সমেয় বর কের ফলা যােব ( িতিট linear না, সব িল িমেল
linear. এেক amortized time বেল)। আমরা যখন র জেন ফেলিছ বািক টু করা বশ সহজ।
এখন আমােদর সম া হল- আমরা i তম পাহােড়র j তম interesting height এর জ উ র বর
করিছ, আর i − 1 তম পাহােড়র [a, b] রে র interesting height হেত আমরা এখােন আসেত
পাির। ধরা যাক আমরা k থেক আসিছ (a ≤ k ≤ b), সে ে আমােদর cost হেব- dp[i −
1][k] + ABS(height[i − 1][k] − height[i][j]). এরকম সকল k এর জ আমােদর যসকল
cost পাওয়া যােব, তােদর মাঝ হেত সবেচেয় কমিট আমােদর িনেত হেব। এিট খুব সহেজই RMQ
ব বহার কের করা যায়। মেন করা যাক আমরা [a, b] ক িট ভােগ ভাগ করিছ [a, c], [c + 1, b] যন
height[i][j] ≥ height[i−1][c] এবং height[i][j] ≤ height[i−1][c+1] হয়। তাহেল [a, c]
অংেশর জ cost এর ফমুলা আমরা িলখেত পাির dp[i−1][k]−height[i−1][k]+height[i][j]
আর অ অংেশর জ আমরা িলখেত পাির dp[i − 1][k] + height[i − 1][k] − height[i][j].
খয়াল কর তুিম যখন i তম পাহােড়র j তম interesting height এ দািড়েয় আছ তখন তামােদর
জ শষ term একিট constant. বািক থাকেছ র অংশটু েক minimize করা। আমরা র
িট টামেক এক কের একিট RMQ বানাব এবং আমােদর দরকাির রে ([a, c] বা [c + 1, b])
query করব।

UVa 1380 A scheduling problem


সমস া: একিট n নােডর ি দওয়া আেছ (n ≤ 200). ি িটর edge িল directed ও হেত পাের
আবার undirected ও হেত পাের। তামােদরেক undirected edge িলেত direction িদেত হেব
যন ি র সবেচেয় ল া চইন ছাট হয়। চইন মােন হল একই direction এ পর পর িকছু edge.

সমাধান: এিটও বশ কিঠন সম া। মেন কর তুিম সকল undirected edge ক মুেছ ফলেল, এর
ফেল সবেচেয় বড় যই chain হয় তার দঘ মেন কর d. তাহেল তামার উ র কমপে d হেবই।
মেন কর আমােদর কােছ একিট ফাংশন আেছ (এিট একিট সংখ া x নয়) যােক আমরা যিদ িজ াসা
কির য undirected edge িলর direction এমন ভােব সট করা স ব িকনা যন সবেচেয় বড়
চইেনর দঘ x এর চেয় বিশ না হয়। এরকম একিট ফাংশন থাকেল আমরা এেক এেক এেক
d, d + 1, d + 2 . . . িনেয় করব। তাহেলই আমরা আমােদর উ র পেয় যাব।

১২৭
এখন আমােদর কাজ হল এই ফাংশন িলখা। আমরা আসেল এই ি এর উপের DP করব।
িতিট নােড ই ধরেনর মান থাকেব, f আর g. ধরা যাক i একিট নাড। আমরা তা i নােডর
িনেচর undirected edge সমুহেক নানা ভােব direction িদেত পাির যন x এর থেক বিশ বড়
chain তির না হয়। এরকম যত ভােব orient করা স ব তার মােঝ কােনা একিটর ে তা i
হেত িনেচ িগেয়েছ এরকম চইেনর দঘ সবেচেয় কম হেব তাই না? মেন কর সই দঘ হল f [i].
একই ভােব i এ উেঠ এেসেছ এরকম চইেনর দঘ সবেচেয় কম g[i]. আমরা দখব এই f আর
g কীভােব বর করব। আমােদর নাড i এর িক িতন ধরেনর child আেছ। ধরা যাক থম ধরেনর
child হল- a. এেদর ে i হেত তােদর িত ইেতামেধ ই একিট directed edge আেছ। ি তীয়
ধরেনর child হল-b. এেদর ে এেদর হেত i এর িদেক ইেতামেধ ই একিট directed edge
আেছ। আর তৃতীয় ধরেনর child হল c. এেদর সােথ i এর undirected edge আেছ। মেন কর a
সমুেহর মােঝ সবেচেয় বড় f এর মান হল f [a]. একই ভােব b সমুেহর মােঝ সবেচেয় বড় g এর মান
হল g[b]. এর মােন আমােদর ইেতামেধ ই f [a] + g[b] দেঘ র চইন তির হেয় িগেয়েছ। তরাং
আমােদর দখেত হেব এিট যন x এর থেক বিশ না হেয় যায়। এখন বািক থােক c নাড িল।
এেদর মােঝ িকছু নােডর ে i হেত িনেচ direction এ edge হেব, আর িকছুর ে উপেরর
direction এ। মেন কর আমরা c ক ই ভােগ ভাগ করলাম cf আর cg. i থেক cf এ edge
থাকেব আর cg থেক i এ থাকেব। এখন মেন কর cf সমুেহর মােঝ সবেচেয় f এর মান বিশ ধরা
যাক f [cf ]. এখন যিদ cg সমুেহর মােঝ যিদ এমন কােনা নাড থােক যার f এর মান f [cf ] এর
থেক কম, তাহেল িক আমরা তােক cg হেত সিরেয় cf এ আনেত পাির। এেত কের িক আমােদর
কােনা চইেনর দঘ িক একটুও বাড়েব না। কারণ এই নতুন আসা নােডর থেকও বড় f আলা
একিট নাড ইিতমেধ ই আমােদর cf এর মােঝ আেছ। তরাং আমরা যটা করেত পাির তাহল, c
এর নাড সমুহেক f এর মান অ যায়ী সট করেত পাির। এর পর একিট লুপ চািলেয় িঠক করেত পাির
য কান টু cf, আর কান টু cg. এটু যিদ িঠক হেয় যায় তাহেল আমরা f [cf ] আর g[cg]
বর কের ফলেত পারব। f [cf ] তা আমরা লুেপর ভতেরই বর কের ফলেত পারব, আর g[cg]
এর মান আমরা নাহয় আেগই উে ািদক হেত লুপ চািলেয় precompute কের রাখব। যাই হাক,
তরাং আমােদর কােছ এখন 4 িট মান আেছ- f [a], g[b], f [cf ], g[cg]. এেদর হেত আমরা থেম
দখব য এরা x এর শত ভ কের িকনা। যিদ না কের তাহেল আমরা এখান থেক optimal f [i]
বর করার চ া করব। একই ভােব i নােডর g এর মান বর করব। এভােব আমরা সকল নােডর
f, g বর করব। এই েসেসর সময় যিদ কখনই x এর শত ভ নাহয়, তার মােন এই x ই আমােদর
উ র।
মজার িজিনস হল, এই সম ার উ র হয় d হেব নাহয় d + 1. সজ আমরা ধু x = d চ া
করেলই বুঝব য উ র িক d নািক d + 1. কন d + 1 এর বিশ লাগেব না তার মাণ আিম জািন
না। হয়েতা তামরা( কাগেজ
) কলেম করেল িনেজেক convince করেত পারেব। এই সমাধােনর time
complexity O n2 .

UVa 10559 Blocks


সমস া: একিট বাে র সাির দওয়া আেছ। এখােন সেবা 200 িট বা থাকেত পাের। বা িল
িবিভ রেঙর হেত পাের। তুিম যিদ কােনা বাে ি ক কর তাহেল তার সােথ লাগােনা (পাশাপািশ
লাগােনা থাকেত হেব) আেগ পের যত একই রেঙর বা আেছ সব গােয়ব হেয় যােব। যিদ মাট k িট
বা গােয়ব হয় তাহেল তামার score হেব k 2 . এই গােয়ব হেয় যাওয়া বাে র ই পােশর বা িল
আবার িক পাশাপািশ চেল আসেব। তামােক বা িলেক ি ক কের কের সকল বা গােয়ব করেত
হেব। তামার ল হল তামার মাট score সেবা করা।
সমাধান: এিট খুব একটা কিঠন না। এখােন যই িজিনসটা সম াটােক কিঠন কের ফেল সটা হল
তুিম যিদ কাথাও ি ক কর তাহেল িকছু বা গােয়ব হেয় যায় আর বােমর আর ডােনর বা িল
জাড়া লেগ যায়। এর ফেল এই বাে র সািরেক state আকাের কাশ করাটা খুব একটা সহজ কাজ
না। তরাং এভােব িচ া করেল হেব না।
মূল সমাধােন যাবার আেগ আমরা একটা কাজ কির। তাহল আমােদর ইনপুট িল আলাদা আলাদা

১২৮
বা িহসােব িচ া না কের, একই রেঙর বা িলেক আমরা প কের ফিল। ফেল আমােদর ইনপুট
বা আমােদর অ াের হেব বাে র েপর। িতিট েপর একিট কের রঙ থাকেব আর বাে র পিরমান
থাকেব।
আমােদর state মেন কর (i, j) অথাৎ আমােদরেক i হেত j তম পেক েসস করেত হেব।
এখন িচ া কর তুিম বাম থেক ডােন আসছ। তামার হােত ইটা অপশন। তুিম বােমর পেক ি ক
করেব। তাহেল i তম পেক ি ক করেল যত cost হেব তা পােব আর (i + 1, j) ক সমাধান করার
জ যই cost হেব সটা। এটাই হল থম অপশেনর cost. ি তীয় অপশন হল ি ক না করা। সই
ে পরবতীেত এই প পেরর একই রেঙর আেরকিট েপর সােথ merge হেব, ধরা যাক সিট
হল k. এখন খয়াল কর i আর k ক merge করেত হেল িক (i + 1, k − 1) এই র েক গােয়ব
করেত হেব। এটু গােয়ব করার cost িক আমরা dp কল করেলই পাব। এখন আমােদর i আর k
প merge হেয় যােব। এই িজিনসটা আমরা dp ত কীভােব করব? খুব একটা কিঠন না, আমরা
(i, j) এর সােথ সােথ আরও একিট parameter রাখব, prev. যটা বলেব আমােদর বতমান প
i এর সােথ i এর বামিদেক থেক আসা কত িল বা merge হেব ( যমন উপের আমরা (k, j) কল
করব সই সােথ তৃতীয় parameter এ বলব য k েপর সােথ i এ থাকা বা িল যাগ হেব)।
তাহেল আমােদর dp এর parameter হল ) j, prev), আর এর ভতের আমরা k এর একিট লুপ
( (i,
চালাব। তরাং আমােদর dp িট হেব O n4 যিদও সব ট visit হেব না।

UVa 1228 Integer Transmission

সমস া: তামার কােছ n িবেটর একিট সংখ া আেছ। তুিম এেক এেক িবট িল একিট নটওয়াক এর
ভতর িদেয় পাঠােব। i তম িবট তুিম পাঠােব i তম সেকে ড। এই িবটিট receiver পােব i + 1 হেত
i + d + 1 তম সেকে ডর যেকােনা সমেয়। যিদ একািধক িবট একই সমেয় পৗছায় তাহেল তােদর
অডার যেকােনা হেত পাের। যিদ receiver তার া িবট িলেক পাওয়ার অডাের সাজায় তাহেল
বেলত হেব কত িল িভ িভ িবট sequence স পেত পাের। n আর d এর মান সেবা 64 হেত
পাের।

সমাধান: বশ র সম া। যিদ d এর মান খুব বিশ নাহত তাহেল হয়েতা শষ d িবেটর িক অব া


সটা িবটমাে রাখেত পারেত। িক d এর মান বশ বড়। িক করা যায়? এভােব িচ া করেত পার-
মেন কর তুিম আউটপুট জান। তুিম িক বলেত পারেব কান িবট কাথায় থেক এেসেছ? যিদ তুিম
এই কাজ করেত পার তাহেল তুিম যটা করেব তাহল তুিম বাম হেত ডােন যােব আর 0 বা 1 বসােনার
চ া করেব। আর িতবার িজ াসা করেব য এই িবট কাথায় থেক এেসেছ। যিদ এই িজ াসার
উ র হয় না এটা কাথাও থেক আসেত পাের না, তাহেল তুিম ঐ ােন ঐ িবট বসােত পারেব না।
এভােব তুিম count করেত পার য কত ভােব তামার আউটপুট গিঠত হেত পাের। এখন কথা হল
তুিম কীভােব বলেব য কান িবট কাথায় থেক এেসেছ। এটা িক খুব একটা কিঠন না। আউটপুেটর
i তম 0 আসেব ইনপুেটর i তম 0 থেক (একই ভােব 1 িবট ও)। খয়াল কর, আউটপুেটর i তম 0 য
ইনপুেটর i তম 0 হেতই আসেব তার িক কােনা িন য়তা নই। িক যেকােনা valid আউটপুেটর
জ আমরা যিদ মেন কির য ইনপুেটর i তম 0 আউটপুেটর 0 থেক এেসেছ তােত কােনা সম া
নই। আমরা মেন করেতই পাির য এর মােন কােনা ােন 0 বা 1 বসােত গেল তামােক জানেত
হেব য ইেতামেধ ই তুিম কত িল 0 বা 1 বিসেয়ছ। এই িট information জানেলই তুিম বলেত
পারেব য তুিম িক 0 বসােত পারেব িকনা বা 1 বসােত পারেব িকনা। মেন কর আমরা ইেতামেধ ই
i − 1 িট 0 আর j − 1 িট 1 ব বহার কের ফেলিছ। আমরা িক এখন 0 বসােত পারব? এর উ র
কীভােব দেব? মেন কর i − 1 তম 0 আর j − 1 তম 1 এর মােঝ যিট সবেচেয় পের িছল তা িছল
t তম িবট। এখন দখ i তম 0 কত তম িবট, ধরা যাক s তম। এর মােন হল t তম িবট আসার
পর িক s তম িবট আসেত পাের িকনা, অথাৎ s − t এর সােথ d ক তুলনা কের দখেত হেব য এই
কাজ স ব িকনা।

১২৯
UVa 1628 Pizza Delivery

সমস া: একিট 1d coordinate system এ তামার n িট ব ুর বাসা আেছ। n এর মান সেবা


100. সই সােথ তুিম কাথায় আছ সটাও বলা আেছ। িত unit distance যেত এক unit কের
সময় লােগ। তামােক সবার বাসায় যেত হেব। তামােক তামার ব ুেদর মাট waiting time
কমােত হেব। মাট waiting time হল তামার সকল ব ুর waiting time এর যাগফল। কােনা
একিট ব ুর waiting time হল কত সময় পর তুিম তার সােথ থম দখা করেত িগেয়ছ। যমন মেন
কর তামার িট ব ু আেছ এক জন আেছ 8 এ, আেরকজন আেছ 11 ত। তুিম আছ 10 এ। তুিম যিদ
থেম থম ব ুর বাসায় যাও তাহেল সময় লাগেব 2, এরপের থম ব ুর বাসা হেত ি তীয় ব ুর
বাসায় যেত সময় লাগেব 3, অথাৎ তুিম 5 সময় পর ি তীয় ব ুেক দখা করেত িগেয়ছ। তরাং
তামার ব ু দর waiting time হল 2 এবং 5. মাট waiting time 7. তুিম যিদ থেম ি তীয় ব ুর
সােথ দখা করেত এরপর থম ব ুর সােথ তাহেল তামার মাট waiting time হত 4. তামােক
বলেত হেব মাট waiting time সবেচেয় কম কত করা স ব।

সমাধান: এটু তা বুঝা যাে য তুিম zig zag কের যােব। অথাৎ থেম িকছু র বােম, এরপর
িকছু র ডােন এরকম কের তুিম তামার ব ুেদর বাসায় যােব। তরাং তামার state হেব বােম কান
ব ুর বাসায় ইেতামেধ ই িগেয়ছ, ডােন ইেতামেধ ই কান ব ুর বাসায় িগেয়ছ আর এখন তুিম কাথায়
আছ ডােন না বােম। অথাৎ আমােদর ট 2n2 . খয়াল কর, আমরা যিদও কােনা সমেয় আমােদর
রে র ভতের থাকেত পাইর, িক আসেল তা state িহসােব রাখেল costly হয়। এর থেক তুিম
বাম াে বা ডান াে থাকেব এবং এর পর িঠক করেব তুিম কই যােব, বােম পেরর ব ুর বাসায়
যােব নািক ডােন পেরর ব ুর বাসায় যােব।
মেন কর তুিম (lef t, right, side) এ আছ। এরপের তুিম হয় lef t−1 এ যােব অথবা right+1
এ যােব। এখােন left মােন হল left তম ব ুর বাসা (একই ভােব right). side এর উপর িভি কের
সখােন যেত কত সময় লাগেব তা বর করা স ব। িক সম া হল এেত কের তা আমরা যই
ব ুর বাসায় যাি তার waiting সময় বর হে না। আসেল এই সম ায় যার কােছ যা তার
waiting সময় বর করেল হেব না। বরং এইেয এখন যই সময় লাগেছ সটা িক এখন পয যার
যার বাসায় যাওয়া বািক তােদর সকেলর waiting সমেয় contribute করেছ। যিদ এর পেরর ব ুর
বাসায় যেত সময় লােগ t (বতমান ব ুর বাসা হেত পেরর ব ুর বাসা র ), আর এখনও যিদ k জন
ব ুর বাসায় যাওয়া বািক থােক তাহেল মাট kt waiting সময় contribute হেব। এরপর আমরা
dp কল করব। এভােব সকল contribution যাগ করেল আমরা মাট waiting time পেয় যাব।

৮.১ অ শীলনী

৮.১.১ সম া

Simple

ˆ UVa 10285 Longest Run on a Snowboard ˆ UVa 1543 Telescope


ˆ UVa 1213 Sum of Different Primes ˆ UVa 1645 Count
ˆ UVa 1650 Number String ˆ UVa 12063 Zeros and Ones

১৩০
Easy

ˆ UVa 10618 Tango Tango Insurrection ˆ UVa 10118 Free Candies


ˆ UVa 1629 Cake slicing ˆ UVa 1630 Folding

ˆ UVa 242 Stamp and Envelope Size ˆ UVa 10723 Cyborg Genes

ˆ UVa 1631 Locker ˆ UVa 1633 Dyslexic Gollum

ˆ UVa 12093 Protecting Zonk ˆ UVa 12589 Learning Vector

ˆ UVa 1379 Pitcher Rotation ˆ UVa 1371 Period

ˆ UVa 1637 Double Patience ˆ UVa 1393 Highways

ˆ UVa 1390 Interconnect ˆ UVa 1414 Hanoi Towers

ˆ LOJ 1085 All Possible Increasing Subsequences

Medium
ˆ UVa 1439 Exclusive Access 2 ˆ UVa 1375 The best name for your baby
ˆ UVa 1632 Alibaba ˆ UVa 10641 Barisal Stadium
ˆ UVa 1289 Stacking Plates ˆ UVa 1443 Garlands

ˆ UVa 1579 Matryoshka ˆ UVa 11982 Fantasy Cricket

ˆ UVa 12371 Guards ˆ UVa 12212 Password Remembering

ˆ UVa 1654 Pairs of integers

Hard

ˆ UVa 1634 The Picnic ˆ UVa 10271 Chopsticks

৮.১.২ িহ ট

UVa 10118: বশ tricky সম া। িতিট stack আর কয়িট কের ক াি ড আেছ এবং এখন ঝুিরেত
কান কান টাইেপর ক াি ড আেছ তা িমেল ট। িক এই ট তা িবশাল! ায় 404 × 205 .
মজার িজিনস হল কান কান ক াি ড এখন ঝুিরেত আেছ তা ট এ রাখার েয়াজন নই। কারণ
তুিম যিদ জান য এখন কান কান ক াি ড stack এ আেছ এর মােন তুিম জান কান কান ক াি ড
ইেতামেধ ই তুিম েসস কেরছ। আর েসস করার সময় তা জাড়া হেলই তুিম পেকেট ঢুিকেয়ছ
তাই না? এর মােন তুিম ধু দখেব কান কান ক াি ড এই মুহূেত odd স কবার েসস হেয়েছ।
স িলই এখন ঝুিরেত পের আেছ। অথাৎ তুিম চাইেল DP ফাংশেনর প ারািমটার িহসােব ঝুিরেত
কান কান ক াি ড আেছ তা পাঠােত পার, িক তা dp এর state িহসােব রাখার কােনা েয়াজন
নই।
UVa 1439: এটা বশ মজার সম া। থমত তুিম এেক ােফ represent কের ফল। িতিট
character এর জ একিট কের নাড থাকেব আর িতিট েসেস যই িট character আেছ
তােদর মােঝ একিট edge িদেয় দাও। তামার সম া তাহেল দাঁড়াল য- িতিট edge ক একিট
direction িদেত হেব যন এখােন কােনা cycle তির না হয় এবং সবেচেয় বড় চইন এর দঘ যন
সবেচেয় কম হয়। এখােন একটা িজিনস খয়াল রাখেত হেব য আমােদর নােডর সংখ া িক মা 15.
আরও একটা িজিনস খয়াল করেত পার তাহল এখােন িক বেল নাই য "যিদ সবসময় deadlock এ
পের তাহেল impossible ি ট কর"। এর মােন উ র সবসময় স ব। কন? উ র িক বশ সহজ
আমরা চাইেল নাড িলেক একটা অডাের রাখেত পাির আর িতিট edge ক আেগর হেত পেরর
িদেক direction দব, অথাৎ topological sort এর মত। মােন আমরা থেম নাড িলেক একটা
অডার দব, ধর L − M − N − . . . এরকম, এর পর যিদ L আর N এর মােঝ কােনা edge থােক
তাহেল দখেব এেদর ক আেগ ক পের আেছ আমােদর অডাের। এে ে L আেগ আর N পের।
তাহেল আমরা L হেত N এর direction এ edge দব। তাহেলই আমােদর ােফ আর সাইেকল

১৩১
থাকেব না। িক আমােদর ল হল chain এর দঘ সবেচেয় কম করা। এই কাজ কীভােব করবা?
মেন কর আমােদর সবেচেয় বড় চইেনর দঘ d. তাহেল আমরা িক এই নাড িলেক d েপ ভাগ
করেত পাির যখােন িতিট েপর মােঝ কােনা edge নই, আর এই েপর অডার অ সাের edge
িলর direction হেব। এর মােন আমােদর সম া দাঁড়াল আমরা আমােদর নাড িলেক সবেচেয়
কম কত িল েপ ভাগ করেত পাির যন এই প িলর িনেজেদর মােঝ কােনা edge না থােক।
কীভােব করবা? খুব একটা কিঠন না। যেহতু আমােদর নাড সংখ া কম সেহতু আমরা নাড সমুেহর
একিট bitmask রাখেত পাির য কান কান নাড িল ইেতামেধ ই নওয়া হেয় গেছ। এরপর এখন
িঠক করেব কান প নেব। এইেয কান প নেব তােক অব ই এখন পয নওয়া হয় নাই তার
submask হেত হেব। এই submask এর ভতের যিদ কােনা edge না থােক তাহেলই কবল
আমরা এই submask িনেত পারব। তাহেল কান কান submask আমরা িনেত পারব তা আেগ
থেকই precompute কের ফিল। িতিট mask এর জ আমরা ইিট for লুপ চািলেয় দখব
এই মাে র ভতের আেছ এরকম নাডেদর ভতের কােনা edge আেছ িকনা। ( যিদ) থােক তার মােন
এই মা invalid আর না থাকেল valid. এই precompute করেত O 2n n2 এর বিশ সময়
লাগেব না। আর ওিদেক আমােদর dp ত সময় লাগেব 3n কারণ আমরা িতিট মাে িগেয় তার
submask িনেয় িনেয় চ া করিছ। কন এটা 2n × 2n নাহেয় 3n হল তা তা আমরা আ িরদম ও
ডটা াকচার বই হেত জেন ফেলিছই।
UVa 1375: এই ধরেনর সম ার ে একিট ি ক হল কােনা ল যিদ হয় A = XY Z তাহেল
এেক পিরবতন কের িলখা A = XT1 , T1 = Y Z অথাৎ কােনা েলর ডান িদেক ইিটর বিশ
character থাকেব না। এই কাজ করেল dp করেত সহজ হেব। আমােদর dp এর state হেব
আমরা এখন কান character এ আিছ (হেত পাের এিট ইনপুেটর কােনা character বা কােনা
temporary character, যমন উপেরর T1 ) আর আমােদর কত লংেথর শ বানােত হেব। িরটান
ভ ালু হেব সই লংেথর lexicographically সবেচেয় ছাট ি ং অথবা empty ি ং যিদ সই
লংেথর কােনা শ বানােনা স ব না হয়। তাহেল তুিম dp এর ভতের িক করেব? থমত দখেব
বতমান character িক ছাট হােতর িকনা (terminal symbol) তাহেল তা একটাই অপশন, 1
লংেথর শ (যিদ ট এর লংথ 1 নাহয় তার মােন কােনা শ বানােনা স ব না)। আর যিদ
terminal symbol না হয় এর মােন আমরা এই symbol ক নানা ভােব expand করেত পাির।
আমরা সকল ভােবই expand করার চ া করব এবং এই সকল চ ার মােঝ lexicographically
সবেচেয় ছাটিট তুিম িরটান করেব। এখন এই য expand করার চ া- সটা িক ভােব করেব?
যেহতু আমােদর সেবা মা িট character থাকেব expansion এ, তরাং এই কাজ বশ
সহজ। আমরা একিট লুপ চািলেয় িঠক করব কত লংথ বাম থেক আসেব, কত লংথ ডান থেক।

১৩২
অধ ায় ৯

Graph Theory

UVa 1599 Ideal Path


সমস া: একিট n নােডর াফ দওয়া আেছ (n ≤ 100000). ােফর edge িল (সেবা 200000
িট) undirected এবং weighted. তামােক ােফ 1 হেত n এ সবেচেয় optimal path বর করেত
হেব। কােনা একিট পাথ optimal হেব যিদ তার থেক ছাট দেঘ র আর কােনা পাথ না থােক এবং
একই দেঘ র পােথর মােঝ তা যিদ lexicographically সবেচেয় ছাট হয়।
সমাধান: বুঝাই যাে এর সমাধান BFS. আমােদর optimal path এর দঘ কত হেব সটা BFS
কের খুব সহেজই বর করা যায়। ধরা যাক আমরা 1 হেত একিট আর n হেত আেরকিট BFS চািলেয়
1 এবং n হেত িতিট নােডর র বর কেরিছ। মেন কর 1 হেত v নােডর র f[v] আর n হেত v
নােডর র g[v]. যিদ কােনা নাড v এর জ যিদ f [v] + g[v] এর মান f [n] এর সমান না হয়
তাহেল সই v নাডেক মুেছ ফলা যায়। এভােব আমরা সকল অ েয়াজনীয় নাডেক মুেছ ফলব।
এবার আমরা 1 নাডেক ধের পুেরা াফেক ঝুিলেয় দই। থম লয়াের থাকেব 1, ি তীয় লয়াের
থাকেব f [v] = 1 ওয়ালা নাড সমুহ, এরকম কের সব শষ লয়াের থাকেব n. অথাৎ আমরা f [v]
অ সাের নাডেদরেক লয়াের লয়াের সািজেয়িছ। এখন আমােদর কাজ হল lexicographically
ছাট পাথ বর করা।
মেন কর েত কবল মা 1 active, আর বািক সকল নাড deactive. থেম আমরা থম
লয়ার দখব (এই লয়াের কবল 1 আেছ)। এই লয়াের যত িল active নাড আেছ তােদর সই
সব neighbor দর দখব যারা পেরর লয়াের আেছ। এেদর মােঝ যসব edge আেছ তােদর মােঝ
সবেচেয় ছাট লেবল ( ছাট weight) বর করেত হেব। এরপর যসকল edge এর লেবল এই
ছাটিট, তার অপর াে র নাড িলেক আমরা active কের দব। এরপর পেরর লেভেলর active
নাড িলেক একই ভােব েসস করব। এরকম কের সকল লেভল েসস করেল আমরা 1 হেত n
পয পােথর edge সমুেহর লেবল িল পেয় যাব।

UVa 12171 Sculpture


সমস া: একিট sculpture িকছু rectangular 3d বা ারা গিঠত (সেবা 50 িট)। এমন হেত
পাের য কােনা একিট বাে র ভতের অ একিট বা , বা িট বা overlap করেছ। এই পুেরা
sculpture ক তুিম একিট তরেল ডুবােল। বলেত হেব sculpture এর volume কত আর তরেল
ডুবােনা অব ায় এর পৃ তেলর ফল কত। Coordinate িল 1 হেত সেবা 500 পয হেত
পাের। মাট 100 িট ট েকস থাকেত পাের।
সমাধান: সম াটা িক বশ সহজ। যেহতু সেবা coordinate 500 হেত পাের সেহতু আমরা
500 × 500 × 500 সাইেজর একিট ি ড নব এরপর আমােদর যসব বা দওয়া আেছ তারা যসব

১৩৩
ি ড পিজশন জুেড় থােক তােদর মাক কের দব। সকল বাে র জ মাক করা শষ হেয় গেল
volume বর করা খুবই সহজ। ধু নেত হেব মাট কয়িট তরেলর ঘর আেছ (কীভােব বর করবা
একটু পেরই বলিছ)। বাইেরর পৃে র ফল বর করাও িক বশ সহজ। আমরা িনি ত য 0, 0, 0
বাইেরর তরেলর একিট ঘর। আমরা এই ঘর হেত কের একিট BFS করব যিট সকল unmark
ঘর িদেয় যায়। এর ফেল আমরা সকল তরল এর সল বর কের ফলেত পারব ( মাট আয়তন থেক
এিট িবেয়াগ করেলই আমরা structure এর volume পাব)। এর ফেল িক হেব? এখন আমরা
িতিট ঘের যেত পাির, যিদ এটা তরেলর ঘর হয় তাহেল আমরা এর ডান বাম উপর িনেচ সামেন
িপেছ দখব য কােনা বাে র সল আেছ িকনা। থাকেল আমরা পৃ তেলর খ ফল এক বাড়ােয়
দব। িক সম া হল এটা বশ costly. কারণ আমােদর test case এর পিরমাণ 100 িট। তাহেল
100 বার 500 × 500 × 500 করা একটু সম া। এছাড়াও আমরা েত 50 িট বা িনেয় তা দখল
কের এরকম িতিট ঘর মাক কেরিছ এটা করেতও িক িত কেস 50 বার 5003 কাজ করেত হেব।
কীভােব আমরা এই কাজেক একটু ত করেত পাির? coordinate compression টকিনক।
মেন কর তামার কােছ একিট বা আেছ যার এক কানা (2, 2, 2) এ আর আেরক কানা (5, 5, 5) এ।
আমােদর িক 500 × 500 × 500 ি েডর দরকার নই। খয়াল কর x = 100 ত যা ঘেট x = 200
তও একই িজিনস ঘেট। এখােন interesting coordinate হল x = 2, 5 একই ভােব y, z এও।
অথাৎ যিদও বা িল িবশাল জায়গা জুেড় আেছ িক আমরা ধু মা িট কেয়ক coordinate িনেয়
interested. যেহতু আমােদর মা 50 িট বা আেছ সেহতু আমরা িতিট বাে র বাম আর ডান
িমলােয় মাট 100 িট x coordinate িনেয় interested (একই ভােব y আর z coordinate ও)।
তরাং আমােদর আসেল 5003 সাইেজর ি ড না িনেয় 1003 সাইেজর ি ড িনেয় কাজ করেলই হেব।
িঠক কীভােব এটা কাড করেত হয় সটা তামরা িনেজরাই একটু িচ া করেল বর করেত পারেব।
িজিনসটা কিঠন না। তামরা ইনপুেট দওয়া সকল x, y আর z coordinate িল িল করেব।
এরপর তােদরেক সট কের unique কের নেব। মেন কর x এর িল দখেত এরকমঃ 10, 30,
40. তাহেল তামরা বাে িগেয় coordinate িলেক rename করেব। 10 মােন 1, 30 মােন 2,
40 মােন 3 এরকম। আর ওিদেক িলেখ রাখেব 1 মােন আসেল 10, 2 মােন আসেল 30 ইত ািদ।
এরপর ছাট ি েড তুিম BFS কের সকল তরল বর করেব। আর যখন তুিম volume বা area এর
িহসাব করবা তখন তুিম যই সেলর জ িহসাব করছ তােক real coordinate এ পিরবতন কের
নেব।

UVa 11853 Paintball


সমস া: একিট 1000 × 1000 সাইেজর মাঠ আেছ। তুিম এর বাম বা র এক িব হেত ডান বা র
এক িব েত যােব। মােঠর িবিভ জায়গায় তামার ব ু জলকামান িনেয় ত আেছ। এসব ব ুর
(x, y) coordinate দওয়া আেছ আর বলা আেছ তারা কতদূর পয পািন ছুড়েত পাের (radius).
বলেত হেব তুিম িনেজেক তামার সকল ব ুর কাছ থেক র া কের মােঠর বাম হেত ডােন যেত
পারেব িকনা। সেবা 1000 জন ব ু থাকেব।
সমাধান: বশ িকছু ণ িচ া ভাবনা করেল বুঝেত পারেব য বাম িদক হেত ডান িদেক যাওয়া স ব
হেব যিদ "িনচ হেত উপের connected circle এর " না থােক। তুিম circle িলেক একিট
কলাম (থা া) িহসােব িচ া কর। যিদ মােঠর িনচ হেত উপের এই কলাম িল থােক তার মােন তুিম
িকছুেতই বাম থেক ডােন যেত পারেব না তাই না? িক যিদ এরকম কলােমর দওয়াল না থােক?
তাহেল যাওয়া যােব। কন? তুিম মেন কর বাম িদেক থেক িকছু তরল ঢালেল। তাহেল িক তারা
ফাঁক ফাঁকর িদেয় ডান িদেক চেল যােব না? যােব। তরাং আমােদরেক বর করেত হেব িনচ হেত
উপের connected circle আেছ িকনা। এটা তা করা খুব সহজ তাই না? তুিম BFS করেব।
েত queue ত সসব circle ঢুকােব যারা আয়েতর িনেচর া েক ছদ বা শ কের। এরপর
তুিম queue হেত একিট বৃ উঠােব আর তার adjacent যসব বৃ এখনও visit হয় িন তােদরেক
queue ত েবশ করােব। িট বৃ adjacent হেব যিদ তারা ছদ কের বা শ কের। এরকম
করেত করেত যিদ এমন একিট বৃ পাও যটা আয়েতর উপেরর বা েক শ বা ছদ কের তার মােন
আমােদর পে বাম হেত ডােন যাওয়া স ব না।

১৩৪
UVa 10129 Play on Words
সমস া: তামােক সেবা 100,000 িট ইংেরিজ শ দওয়া থাকেব। তামােক বলেত হেব তুিম
এই সকল শ পাশাপািশ এক লাইেন রাখেত পারবা িকনা যােত পাশাপািশ থাকা িট শে র ে
আেগরটার শষ অ র আর পেররটার র অ র একই হয়।
সমাধান: থমত খয়াল কর কােনা একিট শে র থম আর শষ অ র বােদ বািক অ েরর কােনা
কাজ নই। তরাং আমরা িতিট শ েক িট অ েরর ক না করেত পাির (এক অ েরর হেল িক
করবা তা আশা কির িনেজরা বর করেত পারবা)। এখন আমরা এখান থেক একটা directed াফ
বানাব। ােফর নাড হেব ইংেরিজ ভাষার অ র িল। আর edge হেব িতিট শে র থম অ র
হেত শষ অ র এর িদেক directed edge. এবার িচ া কর তা আমােদর উ র আেছ মােন িক?
মােন হল- একিট নাড হেত আর কের িতিট edge একবার কের traverse কের কােনা একিট
নােড শষ হওয়া। অথাৎ directed ােফ euler path আেছ িকনা সটা িজ াসা করেছ। আর এই
কাজ কীভােব করেত হয় তােতা আমরা া ািমং কে ট বই এ দেখিছ।

UVa 1572 Self Assembly


সমস া: তামােক িবিভ ধরেনর বগ দওয়া আেছ। িত ধরেনর বগ অসংখ সংখ ক আেছ। িত
ধরেনর বেগর িতিট বা েত লেবল আেছ। লেবল িল দখেত এরকম হয়- B+, A+, A- ইত ািদ।
অথাৎ ই লংেথর লেবল, থম character িট হয় একিট ইংেরিজ অ র আর পেররিট হয় + বা
-. আেরকিট িবেশষ ধরেনর লেবল আেছ 00. এখন তুিম িট বগেক পাশাপািশ রাখেত পারবা
যিদ adjacent বা িটেত একই ইংেরিজ অ র থােক িক িভ sign (+ আর -) থােক। যমন
তুিম A+ আর A- ক পাশাপািশ রাখেত পারবা। 00 এর পােশ কাউেকই রাখেত পারবা না। তুিম
চাইেল বগ িলেক ঘুরােত পার বা reflect করেত পার। বলেত হেব তুিম এই সকল বগ ব বহার কের
unbounded structure বানােত পারবা িকনা। unbounded structure মােন তুিম বগ জাড়া
লাগােতই থাকবা অথাৎ জাড়া লাগােনা চাইেল কখনই থামােত পারবা না।
সমাধান: েত unbounded structure িজিনসটা দেখ একটু ভয় লাগেত পাের। িক ওতটা
কিঠন না িক । তামার যই infinite structure সটা এরকম হেব- থম বেগর কােনা একিট বা
এর পােশ ি তীয় বগ, এই ি তীয় বেগর কােনা একিট বা র পােশ তৃতীয় বগ এরকম কের চলেত
থাকেব। আর অ কােনা বগ িক ব াপার না। এই আইিডয়া ব বহার কের এখন তুিম নানা উপােয়
এই সম া সমাধান করেত পার। একিট হেত পাের- আমােদর ােফর state (বা নাড) হেব কান
বেগ আমরা আিছ আর এর কান বা েত। এখান থেক আমরা এই বেগর যেকােনা বা হেয় তার সােথ
খাপ খায় এরকম অ বেগর বা র state এ যেত পাির (হয়েতা িনেজর মত একিট বেগর কােনা
বা িদেয়ও ঢুকেত পাির)। তরাং আমরা এই ই state এর ভতের একিট directed edge িদেত
পাির। এরকম সকল state এর ভতের আমরা directed edge দব। যিদ এই directed ােফ
cycle থােক তার মােন আমরা unbounded structure বানােত পারব।

UVa 1395 Slim Span


সমস া: একিট weighted graph দওয়া আেছ। ােফ সেবা 100 িট নাড থাকেব। তামােক
এমন একিট spanning tree বর করেত হেব যার সবেচেয় বিশ cost এর edge এবং সবেচেয়
কম cost এর edge এর cost এর পাথক যন সবেচেয় কম হয়।
সমাধান: খুব একটা কিঠন সম া না। তুিম যিদ িঠক কর য তামার সবেচেয় কম cost এর edge
এর cost কত (ধর b) তাহেল বািকটু তা সহজ তাই না? তুিম কবল মা সসব edge ই িনেব
যােদর cost কমপে b এর সমান। এবং এেদর মােঝ তুিম Minimum Spanning Tree (MST)
করেব। এরপর MST এর সবেচেয় বড় cost এর edge আর b এর পাথক পরী া কের দখেব। এই

১৩৫
সমাধােন আমােদরেক িতিট edge এর উপর লুপ চািলেয় b িঠক করেত হেত পাের। তরাং সই লুপ
হেব 1002 এর, কারণ 100 িট নােডর ােফ ায় 1002 িট edge থাকেত পাের।(এরপর আমােদর
)
বািক edge িলর উপর MST করেত হেব। আর MST এর complexity হল O m log m যিদ
( )
kruskal কর। তরাং আমােদর complexity দাঁড়াে ায় O 1004 log 1002 . এই সম ার
ে এই সমাধানই accepted হয়।
তেব তামরা চাইেল এর থেক একটু ভাল সমাধানও দাঁড় করােত পার। মেন কর তুিম edge
িলেক ছাট হেত বড়েত সট করেল। এরপর তুিম এেক এেক edge িলেক ( ছাট হেত বড় cost
এর েম) আমােদর ােফ insert করার চ া করেব। কােনা একিট edge ক insert করার আেগ
দখেব তার ই মাথা ইেতামেধ ই connected িকনা। যিদ না হয় তাহেল চাখ ব কের এই edge
ক insert কর। আর যিদ ই মাথা ইেতামেধ ই connected হেয় থােক তাহেল মেন কর এই ই
মাথা হল a আর b. তুিম দখ a আর b এর মােঝ যই path সই path এ সবেচেয় কম cost
এর edge কানিট। তুিম তােক graph থেক মুেছ ফল আর তামার নতুন edge ক insert কর।
বতমান edge যিদ insert করা শষ হয় তাহেল দখ এখন ােফ সবেচেয় বড় cost আর সবেচেয়
কম cost এর edge কান কানিট। তােদর উপর িনভর কের তুিম তামার উ র আপেডট কের ফল।
তেব খয়াল রখ তামােদর ােফ যন n − 1 িট edge থােক, তা না হেল াফিট connected হেব
না। আমােদর এই সমাধােন কােনা এক মুহূেত আমােদর ােফ n − 1 িটর বিশ edge থাকেব না।
তরাং n2( িট) edge ক insert করেত গেল তামােক একিট ( BFS
) করেত হেব এবং তার cost
আসেল O n . তাহেল আমােদর মাট complexity হেব O n3 .

UVa 1653 Yet Another Multiple Problem


সমস া: একিট সংখ া n (n ≤ 104 ) এবং িকছু িডিজট দওয়া আেছ। কবল মা এই সকল িডিজট
ব বহার কের তামােক n এর সবেচেয় ছাট multiple বানােত হেব।
সমাধান: এই সম া িবিভ কারেণ আমার বশ পছে র। থমত তামরা দখেব য- যিদও আপাত
দৃি েত এখােন কােনা নাড নই, কােনা edge নই, িক এর সমাধান হেব BFS িদেয়। ি তীয়ত
তামরা দখেব কখন DP ব বহার না কের BFS ব বহার করেত হয়।
থেম একটু DP এর মত কের িচ া কের দিখ। DP করেত গেল আমােদর ট এর েয়াজন
হয়। এই সম ার ে ট হল, এখন mod কত (অথাৎ n ারা ভাগ করেল ভাগেশষ কত)। ধরা
যাক আমরা এখন m mod এ আিছ। এখন আমরা যিদ d িডিজট ব বহার করেত চাই তাহেল পেরর
ট হেব (10m + d) (mod n). এভােব আমরা দখব য 0 ত পৗঁছান যায় িকনা। হল এই
প িত কন কাজ করেব না?
কাজ না করার মূল কারণ হল এে ে DP ত সাইেকল তির হয়। মেন কর আমােদর n = 2.
এখন আমরা েত 0 ত আিছ। এখন আমরা 1 ব বহার করলাম কের (10 ∗ 0 + 1) (mod 2) এ
গলাম অথাৎ আমরা recursively 1 এর জ উ র জানেত চাি । এখােন আমরা আবার 1 ব বহার
করেত পাির এবং সে ে আমরা আবার 1 এ যাব। খয়াল কর, আমরা 1 এ িছলাম আবার 1 এ
এেসিছ। অথাৎ DP করেল আমােদর একটা সাইেকেল পের যােব। সাইেকেলর দঘ য সবসময় 1
হেব তা নয়। চাইেল বিশও হেত পাের। তরাং DP করা যােব না। এই ে BFS করেত হয়।
আেগর মতই আমােদর state (বা নাড) হল mod n এর মান। আর edge িল হল িডিজট। অথাৎ
একটা edge ব বহার করা মােন একিট িডিজট বাড়িত লাগােনা। আমরা 0 state হেত করব।
আমােদর ল হল সবেচেয় কম edge (সবেচেয় কম সংখ ক িডিজট) ব বহার কের 0 ত পৗঁছান
(যিদ একািধক থােক তাহেল lexicographically সবেচেয় ছাট উপায় বর করা)। এখােন আমরা
0 থেক কের আবার 0 ত পৗঁছােনার রা া য খুঁজেতিছ সটা িনেয় আবার ে পের যও না।
চাইেল তামরা র 0 ক আলাদা একটা িবেশষ state ধের িনেত পার। আমােদর ল হল সই
িবেশষ state হেত mod 0 state এ পৗঁছান। যাই হাক। এখন কীভােব আমরা BFS করব? খুব
একটা কিঠন না। আমরা িতিট state হেত সকল digit ব বহার করব এবং বর করব সই িডিজট
ব বহার কের পের কান state এ যাওয়া যায় ( ইিট নােডর মােঝ edge). আমরা যিদ BFS কির
তাহেলই সবেচেয় কম edge ব বহার কের আমরা mod 0 ত পৗঁছােত পারব অথাৎ সবেচেয় কম

১৩৬
িডিজট ব বহার কের 0 ত পৗঁছােত পারব। আর যিদ আমরা কােনা নাড থেক যসকল edge বর
হয় সসকল edge ক ছাট হেত বড় order এ চক কির তাহেলই আমরা lexicographically
ছাট পাথ পেয় যাব।
DP িদেয় য করা যােবই না তা না, তেব সে ে DP ত mod এর পাশাপািশ length এর
আেরকিট প ারািমটার রাখেত হয়, ফেল এর state এর পিরমাণ বেড় যায়।

UVa 10603 Fill


সমস া: িতনিট পািনর পা আেছ যােদর আয়তন a, b এবং c. এরা েত েক খুব জাড় 200 হেত
পাের। েত থম িট পা ফাঁকা আর তৃতীয় পা িট ভরা। তুিম চাইেল এক পা থেক আেরক
পাে পািন ঢালেত পার যত ণ না যই পা থেক ঢালছ সিট ফাঁকা হেয় যায় বা যই পাে ঢালছ
সিট ভের না যায়। তামােক বলেত হেব য এরকম ঢালাঢািল কের তুিম d আয়তেনর পািন আলাদা
করেত পারবা িকনা। যিদ না পার তাহেল বলেত হেব d এর কাছাকািছ িক তার থেক ছাট কান
পিরমাণ তুিম আলাদা করেত পারেব।
সমাধান: এই সম াটাও DP িদেয় হেব না। তামােক BFS করেত হেব। মেন কর তুিম তৃতীয়
পা থেক থম পাে পািন ঢালেল এবং DP ক recursively িজ াসা করেল এই state হেত d
পাওয়া যায় িকনা। সখােন িগেয় িক তুিম আবার থম পা থেক তৃতীয় পাে পািন ঢেল িজ াসা
করেব য এই ান হেত d পাওয়া যায় িকনা। দখ সাইেকেল পের গেছ তামার DP. তরাং এটা
DP িদেয় হেব না। তামােক BFS করেত হেব বা চাইেল DFS ও করেত পার। আমােদর state
হল কান পাে িক পিরমাণ পািন আেছ। িতিট state হেত তুিম ছয় রকেমর কাজ করেত পার।
থম/ি তীয়/তৃতীয় পা থেক অপর ই পাে পািন ঢালা। এই ঢালার পর তুিম নতুন state এ চেল
আসেব। এভােব তুিম BFS বা DFS কের যত state এ যাওয়া স ব সব state িভিজট করেব।
সবেশেষ যসকল state িভিজট হেব স লেত িগেয় িগেয় দখেত হেব য d পিরমাণ আলাদা করা
যায় িকনা, আর না গেল d এর কাছাকািছ কান পিরমাণ আলাদা (করা যায়।
)
এখােন একটা িজিনস ল করার। সটা হল- এখােন আমরা O 2003 সাইেজর state এর উপর
BFS করিছ। আমােদর state হেব (i, j, k) যখােন i, j আর k হল িতনিট পাে পািনর পিরমান।
িক খয়াল কর, আমরা যিদ জািন থম ই পাে িক পিরমাণ পািন আেছ তাহেল িক আমরা খুব
সহেজই বর করেত পারব তৃতীয় পাে িক পিরমাণ পািন আেছ, কারণ িতনিট পাে সবসময় মাট c
পিরমাণ পািন
( থাকেব।
) অথাৎ k = c − i − j. তরাং এই observation খািটেয় আমরা আমােদর
state O 2002 এ নামােত পাির।

UVa 10048 Audiophobia


সমস া: একিট 100 নােডর weighted াফ দওয়া আেছ। সই সােথ সেবা 10,000 িট query
দওয়া থাকেব। িতিট query ত িট নাড দওয়া হেব। এই িট নােডর মেধ এমন একিট পাথ
বর করেত হেব যােত থাকা edge িলর মােঝ সবেচেয় বিশ cost যন সবেচেয় কম হয়।
সমাধান: থেম আমরা দিখ য একিট query কীভােব সমাধান করা যায়। মেন কর আমােদর
query হল s থেক t ত যেত হেব। খুব একটা কিঠন না। আমরা dijkstra এর মত কের s হেত
t ত shortest path বর করব। তেব shortest path এর ে dijkstra ত আমরা কীভােব
augment কির তা একটু িচ া কর। মেন কর আমরা এখন u ত আিছ আর u − v edge বরাবর
augment করার চ া করিছ। ধরা যাক edge এর cost w. তাহেল আমরা দিখ য d[v] িক
d[u] + w এর থেক বড় না ছাট। যিদ বড় হয় তাহেল আমরা d[v] এর মানেক এই নতুন মান
িদেয় update কির। এরকম কের u এর সকল adjacent edge এর জ update শষ হেয় গেল
আমরা আমােদর priority queue হেত সবেচেয় কম d[u] ওয়ালা u ক তুিল। িঠক একই ভােব
আমরা dijkstra এর মত কের এই সম া সমাধান করেত পাির। পাথক হল d[v] ক d[u] + w এর

১৩৭
সােথ তুলনা বা আপেডট না কের আমরা max(d[u], w) িদেয় তুলনা বা আপেডট
( করব।
) তাহেলই
হেয় যােব। এই সমাধােনর complexity হেব dijkstra এর মত অথাৎ O m log n এর মত।
কউ কউ এেক prim এর মতও মেন করেত পার।
আমরা চাইেল একটু সহজ ভােবও সমাধান করেত পারতাম। িকছু ণ আেগ বললাম উপেরর
সমাধানটা িকছুটা prim এর মত। আমরা চাইেল kruskal এর মতও সমাধান দাঁড় করােত পাির।
থেমই edge িলেক তার cost অ যায়ী সট কের ফল। এর পর ছাট হেত বড় েম এেক এেক
edge িলেক নাও। িতটা edge িনবা আর তার ই া েক merge করবা। এরপর দখবা য s
আর t িক connected হেয় গল িকনা। যিদ হেয় যায় তাহেল শষ যই edge ব বহার করলা তার
cost ই হল উ র। আমার মেন হয় priority queue ব বহার কের prim এর মত কাড করার থেক
union find ব বহার কের kruskal এর মত কাড করা তুলনামুলক সহজ।
িক এটা তা বুঝাই যাে য উপেরর িট সমাধান 10,000 query এর জ বার বার করা
স ব না। TLE হেয় যােব। উপায় িক?
এবার আমরা িতনিট সমাধান দখব। থেম এভােব িচ া করেত পার- আমােদর যিদ ব বার
query কের িট নাড এর মােঝ shortest পাথ বর করেত বেল তাহেল িক করব? একিট উপায়
হল আমরা েতই িতিট নাড হেত dijkstra চালােয় িতিট নাড হেত
( অপর সকল
) নােডর
shortest path বর কের রাখব। একবার dijkstra চালােত খরচ হয় O m log n . তাহেল n
( )
বার চালােত খরচ হেব O nm log n . একই ভােব আমরা আমােদর উপেরর modified dijkstra
সমাধানটা েতই n বার চালােল িতিট নাড জাড়ার মােঝর জ উ র বর হেয় যােব।
ি তীয় উপায় হল- আমােদর all pair shortest path বর করার জ একিট িবেশষ algorithm
িছল- floyd warshall. সটােক এই সম ার জ আমরা modify করেত পাির। এটা একটু িচ া
করেলই পারেব। Floyd warshall এর ে আমরা d[u][v] এর সােথ d[u][k] + d[k][v] এর
তুলনা করতাম। এই সম ার ( ে) d[u][v] এর সােথ max(d[u][k], d[k][v]) তুলনা করব। খুবই
সহজ। Complexity হেব O n3 .

তৃতীয় উপায় তুলনামুলক কিঠন। িক আশা কির এই সমাধােনর টকিনক তামােদর অ কােনা
সম ায় কােজ লাগেব। থম িট সমাধােন আমরা উপেরর dijkstra বা prim এর মত সমাধানেক
আপে ড কেরিছ। আমরা িক কােনা ভােব kruskal এর মত সমাধানেক আপে ড করেত পাির?
এই িচ া থেকই এই সমাধান। আেগর মতই আমরা edge এর cost িলেক সট করব। এরপর
এেক এেক ছাট হেত বড় edge িল এেক এেক েসস করব। থেম দখব য বতমান edge
এর ই া ইেতামেধ ই connected িকনা। যিদ হয় তাহেল তা িকছু করার নই। আর যিদ না
হয় তার মােন এই edge এর ই া িট connected component এ আেছ। ধরলাম এই িট
component হল A আর B. তাহেল A ত থাকা নাড এবং B ত থাকা নাড এই িট নােডর
জ উ র হেব বতমান edge এর cost. এই সমাধােনর complexity এবার িহসাব করা যাক।
আমােদর এরকম merge অপােরশন িক n − 1 বার এর বিশ হেব( না )(MST এর িতিট edge
এর জ )। Worst case এ এই merge অপােরশন সময় নেব O n2 (যিদ িট component
এ n/2 এর মত কের নাড(থােক)।) যেহতু আমরা এই কাজ n বার এর মত করব সেহতু আমােদর
মাট complexity হেব O n3 .
( ) ( )
তামরা চাইেল O n log n এ preprocess কের O log n এ িত query উ র করেত
পার। এজ তামােদরেক kruskal এর মত কাজ কের া tree এর উপর Least Common
Ancestor (LCA) টকিনক খাটােত হেব। সংে েপ বিল। Kruskal এর algorithm খািটেয় আমরা
থেমই tree বািনেয় ফলব। এরপর িতিট নাড v এর জ আমরা 2i তম parent বর কের
রাখব। িঠক LCA যভােব করা হয়। পাথক হল, আমরা এখন কবল মা 2i তম parent বর করব
না, বরং িঠক একই ভােব 2i তম parent পয ( পােথর) উপেরর সবেচেয় বড় cost এর edge এর
cost ও বর করব। এরফেল আমরা যভােব O log n এ LCA বর করেত পাির, িঠক একই ভােব
আমরা ি েত িট নােডর মােঝ সবেচেয় বড় cost এর edge এর cost ও বর করেত পাির।

১৩৮
UVa 11671 Sign of a Matrix
সমস া: েত একিট n×n সাইেজর সকল element 0 ওয়ালা একিট ম াি থাকেব (n ≤ 100)।
তুিম এক অপােরশেন কােনা একিট কলাম বা কােনা একিট রা এর সকল element ক এক বাড়ােত
বা কমােত পার। তুিম এক বা একািধক অপােরশন চালােত পার। এখন ইনপুট িহসােব তামােক একিট
n × n সাইেজর ম াি দওয়া থাকেব যার িতিট element হেব 0, + বা -. 0 মােন হল তুিম
সকল অপােরশন চালানর পর ঐ জায়গার সংখ া 0, + মােন হল সকল অপােরশেনর পর ঐ ােনর
সংখ া ধনা ক আর - মােন ঐ জায়গার সংখ া ঋণা ক। বলেত হেব সবেচেয় কম কয়িট অপােরশন
কের তুিম ইনপুেট দওয়া ম াি ে র মত একিট ম াি বানােত পারেব।
সমাধান: ািসকাল একিট সম া। থেম িচ া কের দখ কােনা একিট রা ত িক একে +1 আর
-1 অপােরশেনর কােনা দরকার আেছ? নাই। মেন কর তুিম কােনা একিট রােত 10 বার +1 কেরছ
আর 3 বার -1. এর থেক িক 7 বার +1 করা ভাল না? এরমােন িতিট রা/কলােম আমরা হয়
ধু যাগ করব নাহয় ধু িবেয়াগ করব। এখন িতিট রা আর কলােম একিট কের সংখ া িলিখ ধর
সংখ ািট হেত পাের +10, -5, +4, 0 ইত ািদ। এর মােন তা বুঝছ? ঐ রা বা কলােম +1 বা -1
অপােরশন িল কতবার কের চালােনা হেয়েছ তা। যেহতু ঐ সংখ া আমরা জািন না, আমরা এেদরেক
একিট ভ ািরেয়বল ারা িনেদশ করেত পাির। যমন i তম কলােমর সংখ া Ci আর i তম রা এর সংখ া
Ri . এই ভ ািরেয়বল িলর সােপে আমরা ইনপুট ক কীভােব িলখেত পাির? মেন কর (i, j) একিট
সল। এখােন 0 আেছ। এর মােন Ri + Cj = 0. যিদ সখােন + থােক এর মােন Ri + Cj > 0
আর যিদ - থােক তার মােন Ri + Cj < 0. তাহেল আমােদর সম া দাঁড়াে য- িকছু equation

দওয়া আেছ, বলেত হেব এর সমাধান আেছ িকনা। থাকেল abs(Ri ) + abs(Ci ) এর সবিন
মান কত।
এখন আমরা একটা নতুন টকিনক িশখব। মেন কর আমােদর িকছু equation দওয়া আেছ
di + w[i][j] ≥ dj যখােন di িল হল ভ ািরেয়বল আর w[i][j] হল constant. এরকম মেন কর
d1 . . . dn ভ ািরেয়বল ব বহার কের িকছু inequality দওয়া আেছ। আমােদরেক
∑ বলেত হেব এর
সমাধান আেছ িকনা, থাকেল এমন একিট সমাধান বর করেত হেব যখােন abs(di ) এর মান
সবিন হয়।
খয়াল কর, আমরা যিদ এই নতুন সম া সমাধান করেত পাির তাহেল আমােদর মূল সম াটা
সমাধান হেয় যােব। কীভােব? খুব সহজ, আমরা ধরব d1 = R1 , . . . dn = Rn আর dn+1 =
−C1 . . . d2n = −Cn . তাহেল আমরা এেক এেক আমােদর equation িল দিখ Ri + Cj = 0
ক আমরা িলখেত পাির di − dn+j ≥ 0 এবং di − dn+j ≤ 0 যা di ≥ dj + w[i][j] এর মত
তাই না? অ িল দিখ, Ri + Cj > 0 ক আমরা িলখেত পাির di − dj+n ≥ 1. একই ভােব
তৃতীয় equation কও আমরা আমােদর কাি ত ফেম িলখেত পাির। এর অথ দাঁড়াল আমরা যিদ
আমােদর এই নতুন সম া সমাধান করেত পাির তাহেলই মূল সম া সমাধান হেয় যােব। কথা হল
এই নতুন সম া কীভােব সমাধান করব।
এক কথায় বলা যায় আমােদর এই নতুন সম ােক আমরা shortest path সম ায় কনভাট
করেত পাির। কীভােব? এই কীভােবটা আমার মেন থােক না। আিম কীভােব িচ া কির খয়াল করেত
পার-
মেন কর u হেত v ত w cost এর একিট edge আেছ। ধরা যাক কােনা একিট সাস থেক
এই ােফ তুিম িতিট নােড shortest path বর কেরছ। ঐ সাস হেত u পয shortest path
হল d[u], একই ভােব v পয shortest path d[v]. তাহেল িক d[u] + w[u][v] ≥ d[v] হেব।
কন d[u] + wuv < d[v] হেত পারেব না? কারণ এর মােন হল তুিম যিদ সাস হেত u ত d[u]
cost এ আেসা এর পর u হেত v এর w[u][v] cost এর edge িদেয় v ত যাও তাহেল তামার
cost হেব d[u] + w[u][v] যা equation মাতােবক d[v] হেত কম। তােতা স ব না কারণ d[v]
হল সাস হেত v পয shortest path. তরাং d[u] + w[u][v] ≥ d[v] হেব।
তরাং আমরা যটা করব তাহল, েত ক d[u] + w[u][v] ≥ d[v] equation এর জ u
হেত v ত w[u][v] cost এর একিট directed edge দব। এরপর আমরা একিট সাস নব
এবং তা হেত সকল নােড 0 cost এর edge দব। এরপর আমরা এই সাস হেত সকল নােডর
shortest path বর করব। যেহতু w[u][v] negative হেত পাের সেহতু আমােদরেক bellman

১৩৯
ford অ ালগিরদম চালােত হেব। যিদ দিখ আমােদর ােফ negative cycle আেছ তার মােন এই
সম ার কােনা সমাধান নই। আর যিদ negative cycle না থােক তাহেল এই shortest path

∑ালগিরদম তামােক optimal d[u] এর মান দেব। অথাৎ এমন সব d[u] এর মান দেব যন
abs(d[u]) এর মান যন সবেচেয় ছাট হয়। কন? মাণ জানেত চাইেল তামরা Coreman
এর বই দখেত পার।

LOJ 1099 Not the Best


সমস া: N নােডর একিট াফ আেছ (N ≤ 5000) যােত সেবা 105 িট undirected weighted
edge থাকেত পাের। তামােক 1 হেত N এ যাবার second shortest path বর করেত হেব।
Second shortest path হল সই shortest path যার cost একদম shortest path অেপ া
বিশ হয়। তুিম চাইেল একিট edge একািধক বার ব বহার করেত পার।

সমাধান: খুব একটা কিঠন সম া না। তুিম িতিট নােডর জ িট cost রাখেব। একটু হল
shortest path এর cost ধরা যাক d1 [i] আর আেরকিট হেব second shortest path এর cost
ধরা যাক d2 [i]. এরপর তুিম াভািবক ভােব dijkstra বা যেকােনা shortest path অ ালগিরদম
চািলেয় d2 [N ] বর করেব। েত d1 [1] = 0 হেব। এরপর এেক তুিম priority queue ত ঢুকােব,
অথাৎ কান নাড আর d1 নািক d2 . এরপর আমরা priority queue হেত এেক এেক state তুলব।
এরপর এই নােডর adjacent edge িল দখব। ধরা যাক আমরা এখন যই state এ আিছ তার
cost d আর আমরা এখন যই edge দখিছ তার cost w, আর এই edge এর ওপর মাথা v.
তাহেল আমরা d + w ক d1 [v] আর d2 [v] এর সােথ তুলনা করব। যিদ d + w এর মান d1 [v]
এবং d2 [v] এর থেক কম হয় তাহেল d2 [v] = d1 [v] করব আর d1 [v] = d + w করব। যিদ তা না
হয়, তাহেল দখব d1 [v] < d + w < d2 [v] িকনা। তাহেল d2 [v] = d + w করব। মােন আমরা v
এর second shortest path ক আপেডট করব। এভােব যখন priority queue যখন ফাঁকা হেয়
যােব তখন আমরা d2 [N ] আউটপুট করব। এখােন িকছু details আিম বাদ িদেয়িছ, যমন েত
d1 ও d2 ক infinity িদেয় initialize কের িদেত হেব, কােনা একিট d1 [v] বা d2 [v] আপেডট হেল
তােক priority queue ত ঢুকােত হেব ইত ািদ।

LOJ 1034 Hit the Light Switches


সমস া: একিট N নােডর (N ≤ 10000) directed াফ দওয়া আেছ যােত সেবা 105 িট edge
থাকেত পাের। ােফর িতিট নাড েত সাদা রেঙর। তুিম যিদ কােনা নাডেক কােলা রঙ কর
তাহেল তা থেক যত িল directed edge বর হয় তার ওপর া ও কােলা হেয় যােব, এরপর
তােদর থেক যসব directed edge বর হয় তারাও কােলা হেব এভােব চলেত থাকেব। তামােক
বলেত হেব তুিম সবেচেয় কম কত িল নাড কােলা করেল পুেরা াফেক কােলা কের ফলেত পারেব।
সমাধান: এভােব িচ া কর- তুিম যেকােনা একিট নাড িনেল। যিদ দখ এেত েবশ কের এরকম
যিদ একিট edge থােক তাহেল ভাব য- থাক এেক আর রঙ না কির, এেত তা একিট directed
edge েবশ কেরেছ, তরাং তার ওপর া যখন কােলা হেব তখন এও কােলা হেয় যােব। তাহেল
তুিম কােলা রঙ করেব কােক? যােত কােনা directed edge েবশ কের না অথাৎ যার indegree
0. ধু তােদর কােলা রঙ করেলই িক হেব? না। একটা খুব সহজ উদাহরন নাও। মেন কর 2
নােডর একিট সাইেকল। A থেক B ত edge আর B থেক A ত edge. এে ে িক তামােক
একিট নাডেক রঙ করেতই হেব। তাহেল উপায় িক? উপায় হল, তামােক Strong Connected
Component বর করেত হেব। এরপর একই SCC ত থাকা নাড িলেক collapse কের ফলেত
হেব। তাহেল আমরা এমন একিট directed াফ পাব যােত কােনা সাইেকল থাকেব না। এবার
আমরা আেগর প িতেত িফের যাব। দখব এই ােফ কত িল নােডর indegree 0. তত িল
নাডেক কােলা করেলই হেব। অথাৎ সসব নাড যসব component ক represent কের সসব
component থেক যেকােনা একিট নাডেক কােলা রঙ করেলই হেব।

১৪০
LOJ 1221 Travel Company

সমস া: একিট N নােডর (N ≤ 100) directed াফ দওয়া আেছ যােত সেবা 9900 িট edge
থাকেত পাের। িতিট edge এর িট কের weight আেছ। একিট হল income আর আেরকিট হল
expense. তুিম যিদ একিট নাড হেত আর কের িকছু edge ঘুের আবার র নােড ফরত
আেসা এবং তামার যিদ মাট expense যিদ হয় E আর মাট income যিদ হয় I তাহেল profit
ratio হেব I/E. তামােক বলেত হেব এমন একিট সাইেকল পাওয়া স ব িকনা যার profit ratio
এর মােন P অেপ া বড়।

সমাধান: মেন কর এরকম


∑ ∑ একিট সাইেকল∑খুঁেজ পাওয়া স ব। এর∑ মােন সই সাইেকেলর জ
আমরা িলখেত পাির I/ E > P বা I − P ∗ E > 0 বা P ∗ E − I < 0. অথাৎ
আমরা যিদ িতিট edge এর cost ক P ∗ E − I আকাের িলিখ এবং এই ােফ যিদ আমরা একটা
negative cycle খুঁেজ পাই তার মােন আমরা এমন একিট সাইেকল খুঁেজ পেত পাির যার profit
ratio এর মান P অেপ া বড়। এখন আমরা যেকােনা negative cycle finding algorithm
ব বহার কের এই সম া সমাধান করেত পাির।

UVa 753 A Plug for UNIX

সমস া: তামার কােছ 100 িটর মত device আেছ এবং একিট ঘের 100 িটর মত াগ আেছ।
একিট দাকােন িকছু converter আেছ যা এক ােগর ধরনেক আেরক ােগ কনভাট কের। সব
ধরেনর কনভাটার নই, তেব য েলা আেছ তা অেনক পিরমােণ আেছ। কান িডভাইস এর িকরকম
াগ দরকার তা বলা আেছ। তুিম চাইেল সই িডভাইসেক সই ধরেনর ােগ লাগােত পার অথবা এক
বা একািধক কনভাটার ব বহার কের অ ােগ লাগােত পার। বলেত হেব সেবা কত িল িডভাইস
তুিম একে ােগ লাগােত পারেব।

সমাধান: একিট ােগ একািধক িডভাইস লাগােত পারবা না, সেবা কত িল িডভাইস লাগােনা স ব-
ইত ািদ হল max flow এর িহ ট। Maxflow সম ার ে িকছু কমন টাম হল- "এেতািটর বিশ
ব বহার করেত পারবা না" (capacity), "সেবা কতিট" (maximum flow), আর িজিনস িলর
মােঝ একটা general স ক বজায় থােক, মােন এই সম ার ে খয়াল কর এক ধরেনর কনভা-
টার তুিম একািধক বার একািধক িডভাইেসর জ ব বহার করেত পার- এটা একটা general স ক।
DP সম ার ে সাধারনত এরকম many to many স ক থােক না। যাই হাক এ েলা অব
স এর ব াপার। যত বিশ সম া সমাধান করবা, তামার এই সকল স তত পির ার হেব।
এই সম ার ে া এর িডজাইন কীভােব করবা? কেয়কটা িজিনস পির ার। আমােদর সাস
এর সােথ থাকেব িডভাইস আর িস এর সােথ থাকেব াগ। এই সকল edge এর ক াপািসিট হেব
1. এখন কথা হল িডভাইস, াগ আর কনভাটার এর মােঝ edge িল কীভােব িদবা। থেম খয়াল
কর, িডভাইস আর ােগর মােঝর edge িল িক obvious. যই িডভাইস যই ােগর সােথ
compatible তােদর মােঝ একিট edge িদেত হেব। edge এর capacity আসেল ব াপার না।
তুিম চাইেল 1 িদেত পার আবার infinity ও িদেত পার। কারণ source থেক তা একিট িডভাইেস
একিটর বিশ া আসেব না। এখন কথা হল যিদ িডভাইসিট সরাসির ােগ না িগেয় কনভাটাের
যায়? একিট উপায় হল, যই াগ থেক অ য ােগ কনভাটার আেছ তােদর মােঝ edge দওয়া।
এর মােন হেব, কােনা একিট িডভাইস এই টাইেপর ােগ লািগেয়িছ, এখন এই াগ চাইেল আেরক
ােগ ঢুকান যােব অথবা চাইেল কােরে ট লাগােনা যােব (তাহেল আমােদর হল- সেবা কত িল
িডভাইস কােরে ট লাগােনা যােব)। এই edge এর ক াপািসিট কত হেব? Infinity. কন? কারণ
আমরা তা একই ধরেনর কনভাটার একািধক বার ব বহার করেত পাির তাই না? এই সম ায়
Infinity িহসােব কত মান আমরা ব বহার করেত পাির? যেহতু আমােদর িডভাইস সংখ া 100 িট,
সেহতু কােনা কনভাটার 100 এর বিশ বার ব বহার হেব না। তরাং infinity এর মান 100 এর
বিশ বা সমান হেলই হেব। এই ােফর maxflow ই হেব উ র।

১৪১
UVa 11082 Matrix Decompressing
সমস া: একিট ম াি দওয়া আেছ। ম াি এর সেবা ডাইেমনশন কােনা একিদেক 20 হেত
পাের (অথাৎ 20 × 20 হল সবেচেয় বড় ম াি )। তামােক এই ম াি ে র িতিট রা এবং কলােমর
সংখ ার যাগফল দওয়া আেছ। তামােক ম াি িট ি ট করেত হেব। ম াি এর িত ঘের 1 হেত
20 পয সংখ া বসেত পাের।
সমাধান: এটা য া এর সম া সটা বুঝা ওতটা সহজ না। িক একবার দখেল আশা কির এর পর
থেক এরকম সম া সমাধান করেত পারবা। যেহতু িতিট ঘের কমপে 1 িদেতই হেব সেহতু
আমরা িতিট ঘের 1 িদেয় দই। সই অ সাের আমরা িতিট রা এবং িতিট কলােমর যাগফলেক
adjust কের নই। এখন আসা যাক কীভােব াফ বানাব স িবষেয়। এই সম ার ে আমােদর
সাস এর সােথ রা িলর edge থাকেব আর কলাম িলর সােথ িস এর edge থাকেব। edge
িলর capacity হেব ঐ রা বা কলােমর সংখ া িলর যাগফল। আর িতিট রা থেক িতিট কলােম
edge থাকেব। সই edge এর capacity হেব 19 (কারণ িতিট সেল সেবা 20 থাকেত পাের
আর 1 তা ইেতামেধ ই িদেয় ফেলিছ)। এই ােফ া চালােলই আমােদর উ র পাওয়া যােব।
এখােন িক হে খয়াল কর, িতিট রা এর যই যাগফল তা সাস থেক বর হেয় সই রা এর
িবিভ সেলর ভতর িদেয় িবিভ কলােম যাে । সাস আর রা এর মধ কার capacity এটা িনি ত
করেছ য সই রা এর সংখ া িলর যাগফল যন আমােদর দ যাগফলেক অিত ম না কের।
একই ভােব কলােমর যাগফলও আমরা আমােদর capacity িদেয় বাউ ড করিছ। িতিট রা আর
কলােমর মােঝর 19 capacity এর edge িদেয় আমরা িনি ত করিছ য কােনা ঘের যন 19 এর
বিশ সংখ া না যায়। আর আমরা maxflow চািলেয় িনি ত করিছ যন িতিট সাস- রা edge িল
saturated হয়। খয়াল কর, যিদ এরকম হয় য এমন একিট সাস- রা edge আেছ যা saturated
হয় নায়, তার মােন আমােদর এরকম কােনা ম াি পাওয়া স ব না। তেব এই সম ার ে বলা
আেছ য উ র সবসময় স ব। তরাং এই সম ায় আমােদর এটা চক করার দরকার নই।

UVa 1349 Optimal Bus Route Design


সমস া: একিট াফ দওয়া আেছ যখােন সেবা 99 িট vertex থাকেত পাের। াফিট directed
এবং weighted. তামােক িকছু সাইেকল বর করেত হেব যন িতিট নাড িদেয় িঠক একিট
সাইেকল যায়। তামার ল হল এই সাইেকল িলর cost এর যাগফল যন সবেচেয় কম হয়।
সাইেকল িলেক কমপে 2 length এর হেত হেব।
সমাধান: বশ ি িক সম া। আেগ থেক এধরেনর সম া সমাধান না করেল পারা কিঠন। িতিট
নােডর িট কিপ কর। থম কিপেক সাস এর সােথ edge িদেত হেব, আর ি তীয় কিপেক িস
এর সােথ। এেদর িতিটর capacity 1 আর cost 0. এখন মেন কর মূল ােফ একিট edge আেছ
যটা u আর v এর মােঝ আর তার cost হল w. এর জ আমােদরেক যা করেত হেব তাহল u এর
থম কিপ হেত v এর ি তীয় কিপেত w cost এর এবং 1 capacity এর একিট edge িদেত হেব।
এখন যিদ তুিম mincost maxflow চালাও তাহেলই উ র পেয় যােব (যিদ flow এর পিরমাণ n
এর থেক কম হয়, তাহেল কােনা সমাধান নই)। হল কন? খয়াল কর maxflow ত কখনই
এমন অব া হেব না য- সাস হেত u এর থম কিপ, এর পর u এর ি তীয় কিপ এবং সবেশেষ
িস । কারণ আমােদর দওয়া edge িলর u এবং v সবসময় আলাদা হেব (যিদ একই হয় তাহেল
সই edge ক ফেল িদেলই হল, কারণ আমােদর উ ের তার কােনা ভাব নই)। তাহেল একটু
যিদ খয়াল কর দখেব, আমােদর া দখেত এরকম হেব- সাস হেত a এর থম কিপ, এর পর
b এর ি তীয় কিপ এরপর িস (এখােন a আর b আলাদা)। আমরা এেক (a, b) িলখেত পাির।
এভােব আমরা n িট pair িলখেত পাির যখােন এেদর থম element সবসময় আলাদা, আর ি তীয়
element ও সবসময় আলাদা। কারণ আমােদর সাস হেত থম কিপেত capacity 1, একই ভােব
ি তীয় কিপ হেত িস এ capacity 1. এখন আমরা যিদ এই pair িলেক ভাল ভােব দিখ তাহেল
িকছু সাইেকল দখেত পাব। কন? মেন কর আমােদর একিট pair (a, b), এরপর আমরা b িদেয়
এরকম একিট pair িনব, ধরা যাক (b, c), এরপর (c, d) এরকম কের সবেশেষ হেব (d, a).

১৪২
অথাৎ আমরা a থেক কেরিছলাম a তই শষ কেরিছ। মােন সাইেকল। এরকম এক বা একািধক
সাইেকল গঠন হেব n িট pair িদেয়। যেহতু কােনা (u, u) মাকা pair নাই সেহতু সাইেকল িল
কমপে 2 দেঘ র হেবই। আর যেহতু আমরা "mincost" maxflow করিছ সেহতু এই সাইেকল
িলর cost এর যাগফল সবেচেয় কম হেব।

UVa 1515 Pool Construction


সমস া: একিট 2d ি ড দওয়া আেছ। ি েডর িতিট সেল হয় # থাকেব নাহয় . থাকেব। # মােন
হল সখােন ঘাস আেছ আর . থাকার মােন হল সখােন পািন আেছ। তুিম চাইেল d টাকা খরচ কের
কােনা একটা ঘােসর সল খুঁেড় সখােন গত কের পািন ঢালেত পার। আবার চাইেল f টাকা খরচ কের
কােনা একটা পািনর সলেক মািট িদেয় ভরাট কের সখােন ঘাস লাগােত পার। সবেশেষ যিদ িট
পািন আর ঘােসর িট সল পাশাপািশ থােক তাহেল তােদর মােঝ ব ারা িদেত হেব এবং এর জ
খরচ হেব b টাকা। ি েডর বাউ ডাির এর কােনা সল পািনর সল হেত পারেব না। বলেত হেব কত
কম খরেচ তুিম এই কাজ করেত পারেব। ি েডর সাইজ সেবা 50 × 50 আর d, b, f এর সেবা
মান 10,000 এর মত।
সমাধান: এিটও বশ ি িক সম া। আেগ থেক এ ধরেনর সম া সমাধান না করেল পারা কিঠন। এই
ধরেনর সম া সমাধান হয় mincut ব বহার কের। Mincut সম ায় একিট weighted undirected
াফ দওয়া থােক। ােফ িট নাড s আর t ও দওয়া থাকেব। সম া হল তুিম এই াফ থেক
িকছু িকছু edge ক মুেছ ফলেব যন s আর t এই িট নাড disconnected হয়। তামার ল
হল মুেছ ফলা edge িলর cost এর যাগফল যন সবেচেয় কম হয়। এই সম ার সমাধান আর
s হেত t ত flow (এখােন ােফর weight িল edge এর capacity িহসােব ব বহার হেব) এর
পিরমাণ একই হেব। যিদ কারও আ হ থােক তাহেল maxflow mincut এর theory িল পেড়
দখেত পার।
এখন কথা হল এই সম া কীভােব সমাধান করব। এইসব ে যটা হয় আমরা ইটা নাড s
আর t নই। মেন কর s হল পািন এর নাড আর t হল ঘােসর নাড। তুিম mincut করার পর s এর
সােথ যু নাড িল পািন ারা ভরাট থাকেব আর t এর সােথ যু নাড িল ঘাস ারা ভরাট থাকেব।
তাহেল এখন একটু িচ া কের দখত য s আর t বােদ আর িকেসর িকেসর নাড দরকার? সহজ,
িতিট সেলর জ একিট কের নাড দরকার। তাহেল এই গল আমােদর নাড। এখন িচ া করেত
হেব কীভােব edge িদবা বা edge িলর capacity বা weight কত হেব। থমত s আর t বােদ
সেলর যসকল নাড আেছ তােদর মােঝ যিদ িট সল পাশাপািশ হয় তাহেল তােদর মােঝ edge
দওয়া দরকার। কারণ যিদ এই িট সেলর একিট যিদ পািন হয় আেরকটা যিদ ঘাস হয় তাহেল তা
s-t কােট তারা আলাদা হেব এবং এই আলাদা করার জ আমােদর b cost হেব তাই না (বাউ ডাির
এর জ )? তরাং যসকল সল পাশাপািশ আেছ তােদর নাড এর মােঝ b cost এর edge হেব।
আর যারা পাশাপািশ নাই? তােদর মােঝ আসেল কােনা edge দওয়া লাগেব না। কারণ তারা িক
পািন নািক ঘাস এটা িনেয় আসেল কােনা মাথা ব থা নাই। ধু পাশাপািশ পািন আর ঘাস থাকেল
তােদর মােঝ বাউ ডাির িদেত হেব এজ এই b cost এর edge দওয়া। অথাৎ মেন কর i আর j
নাড িট পাশাপািশ। তাহেল আমরা i হেত j ত এবং j হেত i ত b cost এর একিট edge দব।
এখন িচ া কর s এর সােথ সেলর নাড িলর edge এর কথা। মেন কর x একিট সল। আমরা
িচ া করব s এর সােথ x এর edge থাকা না থাকার মােন িক বা থাকেল তার cost এর মােন িক।
আমােদর মূল ল হল s-t কাট বর করা। যিদ এই কােট s আর x ই পে থােক এর মােন হল
x হেব ঘাস (আেগই বেলিছ s হল পািন বা cut এর পর s এর সােথ যু সকল নাড হেব পািন)।
এর মােন s-x এখােন একিট edge িদেত হেব এবং সই edge এর cost হেব x ক ঘাস বানােনার
cost. যিদ x আেগ থেকই ঘাস থােক তাহেল তা এই cost 0. আর যিদ আেগ থেক পািন থােক
তাহেল এই cost হেব f. কন এরকম হল? কারণ s-t কােটর সময় যিদ s-x আলাদা হয় তাহেল
তা s-x এর মােঝর edge তা কাটা পরেব, এর মােন x হেয় যােব ঘাস ( যেহতু আেগই বেলিছ t
এর সােথ যু সব িকছু ঘাস) । এর জ কত cost হেব? x ক ঘাস বানােত যত cost, তাই না?
সটাই হল s-x এর cost. একই ভােব আমরা x-t এর মােঝ edge িদেত পাির এবং তার cost হেব

১৪৩
x ক পািন বানােনার cost. আর বািক থাকল "বাউ ডাির এর কােনা সল পািন হেত পারেব না"। এর
জ আমােদর যা করেত হেব তাহল েতই বাউ ডাির এর সকল পািনর সলেক f খরচ িদেয় ঘােস
পিরনত করেত হেব। এরপর আমরা এই সকল সলেক t এর সােথ infinity cost এর একিট edge
িদেয় দব। আেগই বেলিছ t হল ঘােসর নাড। আর আমরা চাইনা এসকল নাড t হেত িবি হাক।
তাই আমরা বললাম যিদ িবি করেতই হয় তাহেল infinity cost দাও। এর মােনই হল mincut
এ এরা কখনও আলাদা হেব না, তাই না? কারণ এেদর আলাদা না কের s হেত বািক সব নাডেক
আলাদা করা লাভ জনক (অথাৎ সকল নাডেক f খরেচ ঘাস বািনেয় ফলা)।
তাহেল আমােদর সকল নাড আর সকল edge বানােনা শষ। এখন আমােদর কাজ s হেত t ত
া চালােনা। Maxflow এর মানই হেব আমােদর mincut এর মান।

UVa 10735 Euler Circuit


সমস া: একিট 100 নােডর াফ দওয়া আেছ। ােফ edge িলর মােঝ িকছু directed আর িকছু
undirected. তামােক undirected edge িলেত direction িদেত হেব যন াফিটেত euler
circuit থােক। বলেত হেব এরকম করা স ব িকনা হেল তামােক euler circuit ি ট করেত হেব।
সমাধান: একিট directed ােফ euler circuit থাকার শত হল াফিটেক connected হেত হেব
(মােন সকল directed edge ক undirected মেন কের) আর িতিট নােডর indegree আর
outdegree সমান হেত হেব। থম condition চক করা তা খুব সহজ। হল ি তীয়িট করা
স ব িকনা।
Euler circuit থাকার শত হল তার indegree আর outdegree এর সংখ া সমান হেব। আমরা
জািন িতিট নােড কয়িট edge লেগ আেছ। তরাং সই নােড কয়িট directed edge েবশ
করেত হেব আর কয়িট edge বর হেত হেব তা আমরা িহসাব কের বর কের ফলেত পাির।
হল িতিট নােডর এই demand পূরণ করা স ব িকনা। মেন কর আমরা ােফর নাড িলেক
বাম পােশ রাখব আর ােফর edge িলেক flow network এর ডান পােশ। দ ােফর িতিট
undirected edge এর জ যসব নাড out-degree িহসােব কাজ করেত পাের সসব নাড আর
সই undirected edge এর মােঝ আমােদর flow network এ edge দই। এর মােন কােনা
একিট undirected edge এর জ তার edge থাকেব তার ই াে র নােডর সােথই। ডান
িদেকর িতিট edge কই তার adjacent কােনা একিট নােডর সােথ match করােত হেব।
ঐ িদেক বামিদেকর িতিট নােডর জ আমরা জািন কয়িট অিতির edge ক out-degree
িহসােব পেত হেব। অিতির বললাম কারণ ইিতমেধ ই যসব directed edge আেছ তােদর আর
indegree বা outdegree কত হেত হেব সই সংখ া িল িনেয় িহসাব করেলই বর হেয় আসেব য
িতিট নােডর আর কয়িট অিতির outdegree দরকার। এটা হল িতিট নােডর চািহদা। তরাং
আমরা এখােন একটা flow network বানােয় ফলেত পাির। সাস হেত বাম িদেকর িতিট নােড
তােদর চািহদা মাতােবক capacity সহ edge দব আর ওিদেক ডান িদেকর edge এর নাড
িলর জ িস এর সােথ 1 capacity ওয়ালা edge দব (কারণ িতিট edge কবল একিট out-
degree িদেত পাের)। এই া াফ সমাধান করেলই আমরা পেয় যাব কান edge এর direction
িকরকম হেব। এটু জেন গেল আমরা euler circuit বর করার অ ালগিরদম ব বহার কের বািক
টু কের ফলেত পারব।

UVa 1659 Help Little Laura


সমস া: 2D ত িকছু িব আেছ। এেদর সংখ া সেবা 100 হেত পাের। এেদর কারও কারও মােঝ
directed edge আেছ। সই সােথ িট সংখ া X এবং Y দওয়া আেছ। তুিম একিট কলম িনেয়
তামার ই া মত কােনা িব হেত কের িকছু directed edge ঘুের আবার র িব েত িফের
আসেত পার। এভােব তুিম যতবার খুিশ করেত পার। চাইেল একবারও না করেত পার। তেব কােনা
edge তুিম একািধক বার ব বহার করেত পারেব না। এখন এর ফেল মেন কর তুিম d র অিত ম

১৪৪
করেল আর c িট edge মন কেরছ। তাহেল তামার cost হেব d × X − c × Y . তামার ল
হল cost ক সেবা করা।

সমাধান: Maxflow এর সম া ল য ত াঁদড় মাকা হয় তা আশা কির ইতমেধ বুেঝ িগেয়ছ। কই


থেক কীভােব এটা য flow হেয় যায় তা ধরেত পারা বশ কিঠন। অেনক experience লােগ।
আেগর সম ার মত এই সম ােত একটা বড় observation আেছ, আর তাহল িতিট নােডর
indegree আর outdegree সমান হেত হেব। এই property ব বহার কের কীভােব সমাধান করা
যায়?
থমত িতিট edge এর জ তার cost বর কর। কােনা একিট edge এর যিদ দঘ হয় d
তাহেল তার cost হেব dX − Y . আমােদর cost িক সবেচেয় বিশ করেত বেলেছ। তরাং আমরা
থেমই যসকল edge এর cost ধনা ক তােদর িনেয় ফলব। মেন কর এসব edge নবার ফেল
কােনা একিট নােডর indegree হেয়েছ 5 আর outdegree হেয়েছ 7. এর মােন িক? এর মােন হল
আমােদরেক হয় িট outdegree বাদ িদেত হেব অথবা িট indegree বাড়ােত হেব। আসেল িঠক
তা না, কারণ আমরা যিদ িতনিট outdegree কমাই আর একিট indegree কমাই তাহেলও হেব। মূল
কথা হল আমােদরেক indegree আর outdegree সমান করেত হেব। আেগই তা দেখছ এধরেনর
সম ােক কীভােব approach করেত হয়। থেম িতিট নােডর জ দখ এেত indegree বিশ
নািক outdegree. ধর indegree বিশ, এর মােন এেত িকছু অিতির indegree আেছ যা
আমােদর কমােত হেব অথবা িকছু outdegree বাড়ােত হেব। আপাতত indegree কমােনার কথা
ভুেল যাও। মেন কর আমরা ধু outdegree বাড়ােবা। সে ে যত বাড়ােত চাই তত সাস হেত ঐ
নােড capacity িহসােব িদেত হেব। কারণ আমরা যখন া চালাব তখন ঐ পিরমাণ া কােনা না
কােনা directed edge িদেয় বর হেব ফেল outdegree বাড়েব। একইভােব যিদ কােনা নােডর
outdegree যিদ বিশ হয় এর মােন হয় outdegree কমােত হেব অথবা indegree বাড়ােত হেব।
আেগর মতই আপাতত ভুেল যাই য outdegree কমােলও হয়। যিদ আমরা indegree বাড়ােত চাই
তাহেল আমরা সই নাড থেক িসে ঐ পিরমাণ capacity এর edge দব তাহেলই হেয় যােব।
আর েতই আমরা যসকল edge নই নাই (কারণ তােদর cost িছল negative) তােদরেক
আমরা ােফ নব। তােদর capacity হেব 1 কারণ এসব edge ক তা আমরা একািধক বার
িনেত পারব না। আর cost? dX − Y িছল negative. আর আমােদর চ া করেত হেব যন
আমােদর শষ score সেবা হয়। অথাৎ আমােদর ক এই flow ত নওয়া edge িলর cost ক
maximize করেত হেব। বা অ ভােব এেদর negative cost ক minimize করেত হেব। আমরা
তা "mincost" maxflow চালাব, তরাং এসব edge এর cost িদেত হেব −(dX − Y ).
এখন বািক থাকল ভুেল যাওয়া অংশ। অথাৎ কােনা নােডর indegree বিশ হেল তা কমােনা
যায় কীভােব তা বর করা (একই ভােব outdegree বিশ হেল তা কমােনা)। খয়াল কর, indegree
কমােনা মােন িক আেগর নওয়া একিট edge ক বাদ দওয়া। া এর মত কর িচ া কর- এর
মােন হল আেগ একিট া িছল সটােক cancel করা। তাহেল িক করবা? মেন কর u হেত v একিট
edge িছল যার cost িছল c. মেন কর এই edge িট আমরা বাদ িদেয় আমরা u এর outdegree
কমােত চাই। তুিম যটা করবা তাহল v হেত u একিট edge িদবা যার cost হেব −c. কন? আমরা
যিদ v হেত u edge এ া দই তাহেল এই u হেত v এর edge নওয়াটা cancel হেয় যায়। আর
েতই আমরা িক c cost িনেয়িছলাম (কারণ c > 0) এখন আমরা যিদ এই edge নই তাহেল
আমােদর যাগ হেব −c, এর মােন আেগর cost টা কাটা যাে । তরাং ব াপার খানা এমন, আিম
outdegree কমােত চাই- এই সম াটা indegree বাড়ােত চাই এ convert হেয় িগেয়েছ। এভােব
তুিম mincost maxflow িদেয় এই সম া সমাধান কের ফলেত পারেব।
এই সম া সমাধােনর আেরকিট উপায় হল negative cycle cancellation algorithm.
তামােদর ই া থাকেল এটা িনেয় একটু পড়া না করেত পার। তেব মূল আইিডয়া হল, তুিম চাইছ
তামার score যত বিশ হেব তত ভাল। এই সম ােক একটু পা ােত হেব। অথাৎ আমােদর
score যত কম হয় তত ভালেত পিরবতন করেত হেব। খুব সহজ, িতিট edge এর cost ক
−1 িদেয় ন কের িদেলই হেব। এরপর তুিম এই ােফ negative cycle খুঁেজ বর কর। এেত
augment path কর, অথাৎ িতিট edge ক উলিটেয় দাও আর তােদর cost ক negate কের
দাও। এরকম কের যত ণ negative cycle খুঁেজ পাবা এই েসস চালােত থাক। িতবার তুিম
তামার negative cycle এর cost যিদ যাগ করেত থাক তাহেল এই শষ যাগফলিটই তামার

১৪৫
উ র। এিটই negative cycle cancellation algorithm.

UVa 1664 Conquer a New Region


সমস া: একিট 200,000 নােডর ি দওয়া আেছ। ি এর িতিট edge এর weight আেছ। িট
নাড u আর v এর মােঝর path এর cost হল- এই path এ যত িল edge আেছ তােদর মােঝ
সবেচেয় কম weight যত তত। তামােক এই ি এর স টার বর করেত হেব। আমরা সই নাডেক
স টার বলব যই নাড থেক অ সকল নােডর path এর cost এর যাগফল সেবা হয়। এই
সেবা cost এর যাগফল আমােদর ি ট করেত হেব।
সমাধান: বশ জিটল সম া। বুঝা যায় কীভােব সমাধান করেত হেব িক কােনা কারেন সমাধানটা
সহেজ ধরা দয় না। িবিভ ভােব িচ া করেত পার। একটা উপায় হেত পাের DP এর মত কের িচ া
কর। আেরকটা উপায় হেত পাের edge েলােক তােদর weight অ সাের সট কের (িকছুটা kruskal
এর মত)। সট করার পর আমরা edge িলেক এেক এেক add করেত হেব। এই ে সাধারনত
union find ও ব বহার করা হেয় থােক এটা বুঝােত য যসকল edge নওয়া হেয়েছ তারা িক িক
connected component গঠন কের। িক এেতা সেবর পরও কােনা কারেন সমাধানটা ধরা দয়
না। তামরা চাইেল পেরর অংশটু পড়ার আেগ িনেজরা িচ া কের দখেত পার।
মেন কর আমােদর সবেচেয় কম weight এর edge হল u − v যার weight w. ধরা যাক u এর
িদেক আেছ c(u) সংখ ক নাড আর v এর িদেক আেছ c(v) সংখ ক নাড। আমরা যিদ আমােদর
center u এর িদেক বানাই তাহেল এই edge এর মারফেত আমােদর cost হেব c(v) ∗ w. আর
যিদ স টারটা হয় v এর িদেক তাহেল এই edge এর জ আমােদর cost হেব c(u) ∗ w. কন
বুঝেত পারছ তা? কারণ মেন কর তামরা v এর িদেক center বানােল। আর w হল সবেথেক
কম cost এর edge. তাহেল u এর িদেকর যত নাড তােদর সবাইেক এই w cost এর edge
পার হেয় আসেত হেব। আর যেহতু এর cost সবেচেয় কম তরাং অ কােনা edge এই সকল
নােডর cost ক ভািবত করেত পারেব না। সবই তা বুঝলাম, িক এর পর? এরপেরর টু িচ া
করেত গেলই কােনা কারেন সব বেলট পাকােয় যায়। একটু িচ া কর। আমরা এখন চাইেল u এর
িদক আর v এর িদক িক independently িচ া করেত পাির। u এর িদেক যই center হাক না
কন তার cost এর সােথ c(v) ∗ w যাগ হেব আর ওিদেক v এর িদেক যই center হাক না কন
তার cost এর সােথ c(u) ∗ w যাগ হেব। তরাং এভােব িচ া করেত পার য আমােদরেক এখন
এই িট (ছাট )ি এর জ সমাধান করেত হেব। যিদ আমােদর নােডর সংখ া কম হত তাহেল (নাহয়)
আমরা O n2 এ সমাধান কের ফলতাম। িক আমােদর n তা অেনক বড়। আমােদরেক O n2
এ সমাধান করেল হেব না। তাহেল িক করা যায়?
এই পযােয় এেস যই িজিনসটা খয়াল করেত হেব তাহল, যিদ আমােদর ি এর নাড সংখ া 1
হয় তাহেল আমরা তার উ র জািন। মেন কর আমােদর টা ি আেছ আর এেদর জেনর উ রও
আমরা জািন। এখন এেদর মােঝ একিট edge জাড়া লাগাি । তাহেল এই বড় ি এর উ র িক
আমরা জািন? জািন। িঠক আেগর মত কের িচ া কর। মেন কর থম ি এর u এর সােথ ি তীয়
ি এর v ক w weight এর একিট edge িদেয় জাড়া লাগাি , যখােন w এর weight মেন কর
সবেচেয় কম। u এর িদেকর ি এর উ র মেন কর ans[u] আর v এর িদেকর ি এর উ র মেন কর
ans[v]. তাহেল এই বড় ি এর উ র কত হেব? ই রকম হেত পাের। আমােদর স টারটা u এর
িদেক, সইেখে আমােদের উ র হেব ans[u] + c(v) ∗ w তাই না (c(u) এর মােন হল u এর tree
এর সাইজ)? কারণ u এর িদেক কাথায় স টার িকছুই যায় আেস না, এই নতুন w weight এর
edge লাগােনার ফেল v এর িদেকর c(v) সংখ ক নাড িলেক w পার হেয় u এর িদেক যেত হেব।
u এর িদেক কান স টাের তােদর যেত হেব সটা িক কােনা ব াপার না। একই ভােব ওিদেক যিদ
u এর িদেকর নাড িল v এর িদেক আসত তাহেল আমােদর উ র হত ans[v] + c(u) ∗ w. তাহেল
তুিমই বল আমােদর বড় ি এর জ cost কত হেব? এই িটর মােঝ যিট বড় সিট তাই না (কারণ
আমােদর ল cost এর যাগফল বিশ করা)? এর মােন আমােদরেক আসেল edge েলা বড়
হেত ছাট অ সাের সট কের েসস করেত হেব। এই edge িল এেক এেক িনেব। এেদর জাড়া
লাগােব। জাড়া লাগানর ফেল যই বড় ি হল তার উ র বর করেব। এরকম কের চলেত থাকেব।

১৪৬
আর এই িজিনস union find িদেয় খুব সহেজই করা স ব।

৯.১ অ শীলনী
৯.১.১ সম া
Simple
ˆ UVa 1151 Buy or Build ˆ UVa 247 Calling Circles
ˆ UVa 1658 Admiral ˆ UVa 821 Page Hopping
ˆ UVa 820 Internet Bandwidth ˆ UVa 10305 Ordering Tasks

ˆ UVa 208 Firetruck ˆ UVa 439 Knight Moves

ˆ UVa 506 System Dependencies ˆ UVa 572 Oil Deposits

Easy
ˆ UVa 1600 Patrol Robot ˆ UVa 658 Its not a Bug, its a feature!
ˆ UVa 10651 Pebble Solitaire ˆ UVa 12661 Funny Car Racing
ˆ UVa 1001 Say Cheese ˆ UVa 1660 Cable TV Network

ˆ UVa 10801 Lift Hopping ˆ UVa 1663 Purifying Machine

ˆ UVa 12264 Risk ˆ UVa 12219 Common Subexpression Elimination

ˆ Uva 1025 A spy in the metro ˆ UVa 1601 The Morning after Halloween

ˆ UVa 1103 Ancient Message ˆ UVa 804 Petri Net Simulation

ˆ UVa 810 A Dicey Problem ˆ UVa 816 Abbott's Revenge

ˆ UVa 1665 Islands ˆ UVa 10653 Bombs! No they are mines!!

Medium
ˆ UVa 1279 Asteroid Rangers ˆ UVa 12549 Sentry Robots

ˆ UVa 1667 Network Mess ˆ UVa 1668 Let's Go Green

ˆ UVa 1669 Holiday's Accommodation ˆ UVa 1670 Kingdom Roadmap

ˆ UVa 1518 Train Delays

ˆ LOJ 1208 Dangerous Bull! Who wants to Pull?

১৪৭
১৪৮
অধ ায় ১০

Adhoc

UVa 120 Stacks of Flapjacks

সমস া: একিট প ানেকক এর াক দওয়া আেছ। ােকর িতিট প ানেকেকর সাইজ দওয়া
আেছ। িট কেকর সাইজ এক হেব না। তুিম এক অপােরশেন ােকর উপেরর িকছু কক িনেয়
তােদর উলিটেয় আবার ােকর উপের রাখেত পারেব। তামার ল হল সবার িনেচ যন সবেচেয়
বড় কক, তার উপর তার থেক ছাট এভােব সবার উপের যন সবেচেয় ছাট কক থােক। তামােক
য সবেচেয় কম অপােরশেন এই কাজ করেত হেব তা না। যেকােনা valid sequence ি ট করেলই
হেব। এই সম ায় সেবা 30 িট কক থাকেত পাের।

সমাধান: খুব সহজ সম া তাই না? থেম দখ সবেচেয় বড় কক কাথায় আেছ? এটা িক সবার
িনেচ আেছ? তাহেল তা এর জ িকছুই করেত হেব না। যিদ সবার উপের থােক তাহেল তােক আমরা
এক অপােরশেন িনেচ আনেত পাির তাই না? আর যিদ মাঝা মািঝ কাথাও থােক? তাহেলও সহজ
তােক এক অপােরশেন আমরা উপের আনেত পাির আর আেরক অপােরশেন একদম িনেচ আনেত
পাির। এভােব আমরা সবেচেয় বড় কক ক িনেচ আনেত পাির। এটা হেয় গেল আমরা এই কেকর
কথা ভুেল যেত পাির। যেহতু কেকর সংখ া খুব কম সেহতু আমােদর এই সমাধােনর complexity
িনেয় ভা ার দরকার নই।

UVa 1605 Building for UN

সমস া: n দল আেছ (n ≤ 50). তামােক একিট যেকােনা সাইেজর একিট 3d grid িনেত হেব।
এই ি েডর িতিট সল তামােক কােনা না কােনা দলেক িদেত হেব। শত ইটা। এক- যেকােনা
িট দল অব ই কাথাও না কাথাও পাশাপািশ িট সেল থাকেব। ই- িতিট দেলর সল িল
িনেজেদর ভতের connected হেত হেব। ি েডর সাইজ কত হেব তা তামার ই া। ি েড সেবা
106 িট সল থাকেত পারেব।

সমাধান: এধরেনর সম ার িনিদ কােনা টকিনক নাই। Puzzle এর মত। একিট সমাধান হেত
পাের ই লয়ােরর ি ড বানােনা। িনেচর লয়াের েত ক রােত একিট কের দল থাকেব। আর উপ-
রর লয়াের িতিট কলােম একিট কের দল থাকেব। িনেজেদর লয়াের তা িতিট দল connected.
আবার িতিট দেলর ই লয়াের যই connected জায়গা আেছ তােদর মােঝ connection থা-
কেবই। আবার িত িট দেলর মােঝও connection আেছ। তরাং এই সমাধান একিট সিঠক
সমাধান।

১৪৯
UVa 1152 4 Values whose Sum is 0
সমস া: আমােদর কােছ 4 িট িল আেছ। িতিট িলে n িট কের সংখ া আেছ। n এর মান সেবা
4000 হেত পারেব। বলেত হেব তুিম কত ভােব এই 4 িল হেত 4 িট সংখ া িনবাচন করেত পারেব
( িতিট িল হেত একিট) যন তােদর যাগফল 0 হয়।
সমাধান: খুব একটা কিঠন না। তুিম িচ া কর যিদ 4 টা িল না থেক 2 িট িল থাকত তাহেল
কীভােব সমাধান হত? তুিম থম িল scan করেত। মেন কর x থম িলে র একিট সংখ া।
তাহেল তুিম দখেত য ি তীয় িলে −x আেছ িকনা। তুিম চাইেল map, set, hash ইত ািদ
ব বহার করেত পার। আবার চাইেল তুিম িট(িল েক sort
) কের two pointer মথড খাটােত
( ) পার।
যাই হাক, এেদর যেকােনা িটর সমাধান O n log n এর মত (hash করেল অব O n ).
আমােদর সম ায় চারিট িল আেছ িক তারা খুব ছাট সাইেজর, মা 4000. তাহেল আমরা
( )
থম িট িল হেত একিট িল বানােয় ফলেত পাির O n2 সমেয়। এই িলে থাকেব ঐ িট
( )
িলে র যেকােনা িট element এর যাগফল। অথাৎ এই নতুন িলে র সাইজ হেব O n2 . একই
ভােব শষ িট িল িনেয় আমরা আেরকটা িল বানােত পাির। এরপর তা সহজ। িকছু ণ আেগ
বলা ই িলে র সমাধান আমরা এই ই িলে খাটােত পাির।

UVa 11134 Fabled Rooks


সমস া: একিট n×n সাইেজর দাবার বাড আেছ যখােন n এর সেবা মান হেত পাের 5000. তুিম
এই বােড n িট নৗকা বসােত পারেব। তেব তুিম যখােন সখােন বসােত পারেব না। িতিট নৗকার
জ তামােক একিট rectangle দওয়া আেছ। তামােক ঐ নৗকা ঐ rectangle এর ভতেরই
বসােত হেব। শত হল, কােনা িট নৗকা যন একই রা বা একই কলােম না থােক। বলেত হেব
এভােব নৗকা িল বসান স ব িকনা, স ব হেল বসােয় দখােত হেব।
সমাধান: আমার অ তম পছে র একিট সম া। আিম এখােন িট সমাধান বলব। তেব এর ি তীয়
সমাধােনর জ ই এই সম া আমার বিশ ি য়।
থম সমাধান হল- া। তামরা যারা বশ িকছু া এর সম া সমাধান কেরছ তারা হয়েতা দ-
খছ য এরকম সম া ায়ই flow বা bipartite matching িদেয় সমাধান হয়। সই experience
থেকই এই সম া া এর মত কের িচ া করা। আমােদর experience অ সাের আমােদর বােম
থাকেব রা আর ডােন থাকেব কলাম। সাস হেত বােমর নাড িলেত 1 capacity এর edge থা-
কেব। একই ভােব ডােনর নাড িল হেত িস এ 1 capacity এর edge থাকেব। এখন কথা হল
এই ডান আর বােমর ভতের কীভােব edge দেব। এখােন যিদ কােনা rectangle এর বাউ ড না
থাকত তাহেল তা খুব সহজ, বােমর িতিট হেত ডােনর িতিট নােড আমরা edge িদতাম, মােন
যেকােনা রা এর যেকােনা কলােম নৗকা বসেত পারেব। িক এই ে তা তা হেব না। আমােদর
বাউ ড আেছ। আমার সমাধান হল এই বাম আর ডােনর মােঝ িতিট নৗকার জ 2 িট কের নাড
দব এবং তােদর মােঝ একিট edge থাকেব যার capacity হেব 1. এই িট নাড এবং তােদর
মােঝর capacity এটা িনি ত করেব য- কােনা একিট আয়েতর জ যন একিটই নৗকা থােক।
এবার এই আয়ত যই যই রা আর যই যই কলাম জুেড় থােক তােদর মােঝ 1 capacity এর
edge িদেয় দাও তাহেলই হেব। িচ া কের দখ আমােদর সম ার সকল constraint এই ােফ
আেছ িকনা? িতিট রা ত একিট কের নৗকা থাকেত হেব, িতিট কলােম একিট কের নৗকা থাকেত
হেব, িতিট আয়েতর মােঝ অ ত একিট নৗকা থাকেত হেব ইত ািদ। তরাং এই flow চািলেয় যিদ
দখ maxflow এর মান n তার মােন সমাধান আেছ। নাহেল সমাধান নাই।
এখন ি তীয় সমাধান দখা যাক। এই সম ােত খুব বড় powerful একটা observation হল
আমরা িট axis ক independently সমাধান করেত পাির। অথাৎ আমরা আয়েতর জ সমাধান
করব না। বরং মেন করব িতিট নৗকার জ স কান রা ত বসেত পারেব তার র দওয়া
আেছ। একই ভােব স কান কলােম বসেত পারেব তারও র দওয়া আেছ। তুিম দখ য িতিট
রােত নৗকা বসােত পারবা িকনা। একই ভােব দখ িতিট নৗকার জ কলাম বর করেত পার

১৫০
িকনা। যিদ এ িট কাজই পার তাহেল তা সমাধান হেয় গল। খয়াল কের দখ আমােদর সম া কত
সহজ হেয় গল! 2d একিট সম া 1d ত পিরবতন হেয় িগেয়েছ। আমরা যিদ রা এর জ সমাধান
করেত পাির তাহেল একই সমাধান আমরা কলােমর জ খাটােবা। আর আমার মেন হয় রা এর জ
সমাধান কমন হেব তা তামরা জান, তাই না? Greedy. িকছুটা line sweep এর মতও বলেত
পার। তুিম এেক এেক রা িলেত যােব। থেম থম রা, এরপর ি তীয় রা এরকম কের সকল
রা ত যাবা। মেন কর তুিম এখন একিট রােত আছ। এখন দখ এই রা হেত কান কান নৗকার
র হয়। সসকল রে র শষ মাথা একটা data structure এ রােখা। তরাং বতমােন data
structure এ সই সকল নৗকা আেছ (মােন নৗকার রে র শষ মাথা) যােদরেক তুিম বতমান রা
ত বসােত পার। িক কান নৗকােক বসাবা? যার শষ মাথা সবেচেয় ছাট, অথাৎ যার ভিব েত
বসােত সম া হেত পাের, এরকম নৗকােক তুিম বসাবা। অথাৎ Data structure ক বলবা তামার
কােছ সবেচেয় ছাট সংখ া কত আেছ তােক দাও। এই নৗকােক এই ােন বসাবা। তেব বসােনার
আেগ একবার দেখ নাও এর রে র শষ মাথা ইেতামেধ ই পার কের এেসছ িকনা। তাহেল িক
আর তুিম এই নৗকােক বসােত পারবা না, তার মােন সমাধানও নই। তুিম এখােন data strcture
িহসােব map বা multiset ব বহার করেত পার।

UVa 11054 Wine trading in Gergovia


সমস া: এক লাইেন অেনক িল সল। িতিট সেল তামার ব ু আেছ। িতিট ব ু একিট িজিনেসর
িকছু ইউিনট কের চায় বা তার কােছ সই িজিনেসর িকছু ইউিনট অিতির আেছ। যসব ব ু দর
কােছ অিতির িজিনস আেছ তামােক তােদর কাছ থেক িজিনস িনেয় যারা চায় তােদরেক িদেত
হেব। এক ইউিনট িজিনস তুিম যিদ i তম ােন থাকা ব ুর কাছ থেক িনেয় j তম ােনর ব ুর ক
দাও তাহেল এর জ cost হেব abs(j − i). তামােক সবিন cost এ সবার চািহদা িমটােত হেব।
তামার মাট ব ুর সংখ া সেবা 100,000 হেত পাের। আর বলা আেছ মাট চািহদার পিরমান মাট
অিতির থাকার পিরমােনর সমান।

সমাধান: যেহতু চািহদার পিরমান অিতির থাকার পিরমােনর সমান সজ এই কাজ greedy
ভােব করেলই তুিম optimal সমাধান পােব। Greedy মােন হল- তুিম মেন কর বাম থেক ডান
িদেক যা । যিদ দখ থম জন এর িকছু চািহদা আেছ এর মােন এই পিরমান ডান িদক থেক
আসেব। আর যিদ দখ এর িকছু অিতির আেছ এর মােন এই পিরমান ডান িদেক যােব। তাহেল
িক পিরমান ডােন বা বােম যােব তার উপর িভি কের তুিম তামার উ রেক আপেডট করবা। এরপর
ি তীয় জেনর কােছ যাবা। এবার একটু িহসাব িনকাশ কের দখ থম ই জন আর বাদ বািক সবার
মােঝ িক পিরমান আদান দান হেব। সই মাতােবক উ র আপেডট কর। এভােব চলেত থাকেব।
অথাৎ, এখােন ক কােক িদল সটা িচ া না কের আমােদরেক িচ া করেত হেব থম i জন আর বাদ
বািক জেনর মােঝ িক পিরমান আদান দান হেব। অথাৎ িতিট edge এ িক পিরমান আদান দান
হেব।
যমন মেন কর আমােদর চািহদা (ঋণা ক) আর অিতির (ধনা ক) এর পিরমান িল হল:
3, 1, −5, 1. এখােন থম জেনর আেছ 3. এর মােন বাম িদেক থেক 3 িট িজিনস ডােন যােব।
এরপর দখ থম ই জেনর আেছ 4 িট। এর মােন থম ই জন হেত পেরর জেনর কােছ যােব 4 িট
িজিনস। থম িতন জেনর কােছ আেছ −1 িট িজিনস, অথাৎ থম িতন জেনর 1 িট িজিনেসর চািহদা
আেছ যা আসেব ডান িদক থেক। আর থম চারজেনর চািহদা/অিতির আেছ 0 িট। তরাং আর
িকছু না। তাই এখােন মাট 3 + 4 + 1 = 8 cost হেয়েছ। এিটই সবিন ।

UVa 11572 Unique Snowflakes


সমস া: একিট সংখ ার অ াের দওয়া আেছ যার লংথ সেবা 100,000. তামােক এই অ ােরর
সবেচেয় বড় সাবঅ াের খুঁেজ বর করেত হেব যন তােত কােনা সংখ া ইবার না থােক।

১৫১
সমাধান: বশ ি িক সম া। থেমই আমরা last নােমর একিট অ াের বর করব। last[i] এর মান
হেব অ ােরর i তম ােন যই সংখ া আেছ সিট i index এর আেগ কান index এ আেছ। যিদ এর
আেগ কাথাও না থােক তাহেল আমরা এর মান 0 দব। last এর অ াের বর করা িক খুব একটা
কিঠন না। আমরা একিট map রেখ আমােদর ইনপুেটর অ ােরেক বাম হেত ডােন scan করেলই
last অ ােরর মান িল পাব। মেন কর আমরা অ ােরর বাম হেত ডােন যাি । িতিট ােন এেস এই
ােন থাকা সংখ ােক আমরা map এ খুঁজব। যিদ না পাই তার মােন এর last এর মান 0. আর যিদ
পাই তাহেল map এ সই সংখ ার জ যই মান আেছ তাই হেব last এর মান। অতঃপর আমরা
map এ এই সংখ ার মান িহসােব বতমান index িলেখ রাখব। অথাৎ যেকােনা মুহূেত map এ
থাকেব এর আেগ অমুক সংখ া কান index এ আেছ। তরাং এভােব আমরা last এর মান বর
করেত পাির।
এখন িচ া করা যাক last এর অ ােরেক ব বহার কের আমােদর সম া কীভােব সমাধান করেত
পাির। িট variable নয়া যাক l আর r যােদর initial মান 1. l মােন হল সাবঅ ােরর বাম া , আর
r হল ডান া । এখন আমরা r এর মান এক কের বাড়ােবা। বাড়ােনার পর বতমান r এর জ দখব
last[r] এর মান িক বতমান l এর থেক বড়? যিদ বড় হয় তাহেল l = last[r] কের দব। মােন
আমরা আমােদর সাবঅ ােরেক ছাট কের ফলিছ। এরকম কের r ক আমরা এেক এেক 1 হেত n
পয (আমরা ধের িনি অ ােরিটর index 1 হেত n) নব এবং l এর মান েয়াজেন আপেডট করব।
এই আপেডট করা শেষ আমরা দখব সই l আর r এর মান িক optimal িকনা (অথাৎ আমােদর
দরকার সবেচেয় বড় r − l + 1 এর মান)।

UVa 1606 Amphiphilic Carbon Molecules


সমস া: 2d ত সেবা 1000 িট িব আেছ। িতিট িব হয় সাদা নাহয় কােলা। তামােক এই 2d
plane এর উপর িদেয় একিট লাইন টানেত হেব। তুিম চাইেল তামার লাইনেক দ িব র উপর
িদেয়ও টানেত পার। এরপর তুিম িঠক করেব এই লাইেনর কান পাশ সাদা আর কান পাশ কােলা।
তামার পেয় ট হেব সাদা পােশ যকয়িট সাদা িব আেছ যাগ কােলা পােশ কয়িট কােলা িব আেছ
যাগ তামার রখার উপর কয়িট িব আেছ। তামার ল তামার পেয় ট সেবা করা।

সমাধান: থম কথা, এই ধরেনর সম া angle sweep কের করেত হয়। কীভােব িচ া করবা?
মেন কর তামার optimal line কাথাও না কাথাও আেছ। এখন তামােক চ া করেত হেব এই
লাইনেক একটু িসে েম কীভােব আনা যায়। থেম এই লাইনেক একটু ডােন বা বােম সরােল িক
তামার উ র পিরবতন হেব না। তুিম চাইেল তত ণ পয কােনা এক িদেক সরােত পার যত ণ
না স একটা িব েক শ কের। তরাং আমরা বলেত পাির আমরা এমন একিট অি মাল লাইন
অব ই পাব যা দ িব িলর কােনা একিটর উপর িদেয় যােব। এবার এই লাইন যই িব র
উপর িদেয় যায়, তােত ি র রেখ তুিম লাইনেক চাইেল ঘুরােত পার। আেগর মতই একটু ডান বা
বােম ঘুরােল িক উ র পিরবতন হেব না। তরাং তুিম চাইেল এই লাইনেক ঘুরােত থাকেত পার
যত ণ না স আরও একিট িব েক শ কের। অথাৎ এমন একিট অি মাল লাইন আমরা পাবই যা
দ িব িলর কােনা িটর উপর িদেয় যােবই। এই ব াপারটা আসেল আমােদর সমাধানেক অেনক
সহজ কের দয়। আমােদর এখন আর অসীম সংখ ক লাইন candidate িহসােব নই। মা n2 টা
candidate লাইন। এই লাইেনর একিদেক ভাববা কােলা আেরকিদেক সাদা, এরপর েন দখবা ( )
তামার পেয় ট কত। তরাং িত candidate এর জ আমােদর পেয় ট িহসাব( 3)করেত আরও O n
সময় লাগেব। তরাং এভােব করেল আমােদর time complexity হেব O n . আমােদরেক time
complexity কমােত হেব।
এখােনই আসেব angle sweep. খয়াল কর আমরা যিদ আমােদর লাইনেক একটা িব েত fix
কির, তাহেল এেক যিদ আমরা ডােন বা বােম ঘুরাই তাহেল িক আমােদর উ র ওত বিশ পিরবতন
হয় না। এই আইিডয়াটাই আমােদর কােজ লাগােত
( ) হেব। আমরা থেম একিট একিট কের িব fix
করব। এেত কের আমােদর সময় লাগেব O n . এবার বাদ বািক িব িলেক আমরা এই fixed
িব সােপে সট কের ফিল। মেন কর আমােদর fixed িব হে 0 আর বাদ বািক িব িল হল

১৫২
1 . . . n − 1 এবং মেন কির আমােদর এই িব িল angle অ সাের counter clockwise সট
করা। েত মেন কর তামার লাইন হে 0 আর 1 িদেয় য লাইন যায়- সই লাইন। তুিম সবসময়
মেন করবা তামার ডান পাশ সাদা, আর বাম পাশ কােলা। এখন তুিম েন দখ তামার ডান পােশ
কয়টা সাদা আর বাম পােশ কয়টা কােলা িব আেছ। এই কাজ থমবার তুিম লুপ(চািলেয় ) করবা।
িক এর পর থেক আর লুপ চালাবা না। কারণ িতবার লুপ চালােল তা আবার O n হেয় যােব
3

তাই না (fixed point এর একিট লুপ, 0 − i রখা িনবাচেনর একিট লুপ, আর ই পােশ সাদা কােলা
দখার জ আেরকিট লুপ)? তাহেল আমরা িক করেত পাির? মেন কর আমরা 0 − 1 এর জ
উ র জািন। এখন আমরা 0 − 2 এর জ উ র বর করব। এেত কের িক আমােদর উ র খুব
একটা পিরবতন হেব না তাই না? আমরা 0 − 1 থেক 0 − 2 যাবার ফেল 1 িব িট এখন আমােদর
ডান িদেক এেস গেছ, আর 2 িব িট আমােদর রখার উপর এেস গেছ। তরাং আমরা আমােদর
িদেকর সাদা কােলা িব র সংখ া adjust কের িনেত পাির। ওিদেক 0 এর পছন িদেকও িকছু িব
এিদক ওিদক হেয় িগেয়েছ। মােন, তুিম যিদ 1 হেত 0 হেয় পছন িদেক লাইন টান, আর 2 হেত 0
হেয় পছন িদেক লাইন টান তাহেল এেদর মােঝ িকছু িব আেছ এবং তারা তােদর সাইড পিরবতন
কেরেছ। তরাং সটাও আমােদর িহসাব রাখেত হেব। এটা আসেল খুব কিঠন না, তুিম একিট index
রাখেব য 1 হেত 0 হেয় পছেন লাইন টানেল সবার শষ ডান পােশর িব কানটা। এবার যখন তুিম
2 ত আসেব, তখন দখেব এবার সই শষ িব ক, িঠক line sweep এর মত। Line sweep
এ আমরা হয়েতা আমােদর ডান মাথা এক বাড়াতাম, আর তার উপর িভি কের বাম মাথা হয়েতা
অেনক কয়ঘর বাড়ােত হত। এখােনও িঠক তাই। এভােব আমরা i এর(মান) 1 . . . n − 1 িনব এবং
পােশর সাদা কােলা িব র সংখ া নেত থাকব। তাহেলই আমরা O n2 সমেয় উ র বর কের
( )
ফলেত পারব। আসেল এই time complexity হেব O n2 log n কারণ আমােদর থম লুেপর
ভতের একিট সট আেছ। এছাড়া বািক angle sweep এর অংশটু linear.
যারা বশ অিভ কাডার তারা এই সমাধানেক আরও simplify কের! খুবই িবষয়। খয়াল
কর- আমরা চাইেল কােলা িব িলেক fixed point এর সােপে reflect করেত পাির। এর ফেল
আমােদর সম া আর সাদা কােলা থাকেব না। আমরা বলেত পাির- এই fixed point সােপে লাইন
টানেল এর এক পােশ সবেচেয় বিশ সংখ ক িব থাকেত হেব। এেত কের আমােদর সম া অেনক
simplify হেয় যায়। আমােদর এখন আর সাদা কালর সংখ া মেন রাখেত হেব না। এখন আমােদর
কাডেক আরও সহজ করা যােব।
এই সমাধানেক আরও আরও সহজ করা যায়! এটা হয়েতা িলেখ বুঝান একটু কিঠন হেব। তাও
বিল, তামােদর যােদর আ হ আেছ তারা িচ া কের দখেত পার। আমরা চাইেল fixed পেয় ট এর
সাপে িতিট িব র জ বর করেত পাির য আমােদর লাইন কত হেত কত angle এর ভতের
থাকেল আমােদর িব িট ডান িদেক থােক। অথাৎ িতিট িব র একিট entry angle থাকেব আর
exit angle থাকেব। এবার আমরা এই entry আর exit ক event িহসােব ক না কের সট করেত
পাির এবং line sweep এর মত কের বর করেত পাির য কােনা এক মুহূেত সেবা কত িল িব
active িছল।

UVa 1471 Defense Lines


সমস া: তামােক সেবা 200,000 দেঘ র একিট অ াের দওয়া আেছ। তুিম চাইেল এর একিট
সাবঅ াের মুেছ ফলেত পার। তামার ল হল এই মুেছ ফলার পর সবেচেয় বড় সাব অ াের বর
করা- যা increasing হয়।
সমাধান: মেন কর আমরা এখন i index এ দািড়েয়। মেন কর আমরা জািন এখান থেক কের
(অথাৎ i তম ান সহ) এর ডান িদেক কত র পয strictly increasing sequence পাওয়া যায়।
তাহেল আমরা আর িক জানেত চাই? জানেত চাই য, i এর বাম িদেক কাথাও শষ হওয়া সবেচেয়
বড় strictly increasing sequence এর লংথ কত এবং এই sequence এর শষ স াটা a[i]
এর থেক ছাট হেত হেব যখােন a হে আমােদর ইনপুেটর অ াের। এটু যিদ আমরা করেত পাির
তাহেল িতটা i এর জ আমরা এই কাজ করেলই আমােদর উ র বিরেয় আসেব।

১৫৩
থেম আমরা দিখ i index এর জ i তম ান সহ এর ডান িদেক strictly increasing
sequence এর লংথ কীভােব বর করা যায়। এটা সহজ এবং কমন। আমরা ডান িদক থেক
আসব। েত length1[n] = 1 অথাৎ n তম ােনর জ উ র 1. এর পর i তম ােনর জ
আমরা দখব এই ােনর সংখ া i + 1 তম ােনর সংখ ার থেক ছাট িকনা। যিদ ছাট হয়, তাহেল
আমােদর i তম ােনর উ র i + 1 তম ােনর উ েরর থেক এক বিশ হেব। আর যিদ ছাট না
হয়? তাহেল তা সহজ, উ র 1. এভােব আমরা i তম ােনর জ i তম ান সহ এর ডােন strictly
increasing sequence এর মান বর করেত পারব।
এবার কিঠন অংশ। কীভােব i তম ােন দািড়েয় আমরা বর করেত পারব i এর বাম িদেক
কাথাও a[i] হেত ছাট কােনা সংখ ায় শষ হওয়া সবেচেয় বড় strictly increasing sequence
এর লংথ কত। থমত িকছু ণ আেগই আমরা িতিট ােনর জ সই ান সহ তার ডান িদেক
strictly increasing sequence এর সেবা লংথ বর কেরিছ। একই ভােব আমরা খুব সহেজই
বর করেত পারব i এ শষ হওয়া (i তম ান সহ) strictly increasing sequence এর লংথ কত,
ধরা যাক এটা আমরা length2 নােমর এক অ ােরেত রেখিছ। যিদ এটু হেয় যায় তাহেল আমােদর
কাজ হেব হেব- িতিট i এ িগেয় সব িল j < i দখা যােত কের a[j] < a[i] হয় এবং length2[j]
সেবা হয়। এই কাজ নানা উপােয় করা যায়।
একিট উপায় হেত পাের আমরা i এর লুপ বাম থেক ডােন যাব। আর একিট segment tree
রাখব। আমরা segment tree ত িজ াসা করব- "আ া a[i] থেক ছাট index এ সবেচেয় বড়
কত সংখ া আেছ?"। আর আমােদর i এ কাজ শষ হেয় গেল এেক আমরা segment tree ত
রেখ দব। আমােদর আপেডট অপােরশন হেব- "a[i] এ length2[i] রেখ দবার চ া কর তা!"।
চ া বললাম এ কারেন য, হয়েতা a[i] এ ইেতামেধ ই length2[i]
( এর) থেকও বড় সংখ া আেছ।
তাহেল এভােব segment tree রেখ আমরা খুব সহেজই O n log n এ এই সম ার সমাধান
করেত পাির।
আমরা চাইেল binary search বা set ব বহার কেরও করেত পাির। মেন কর আমােদর set এ
(a[j], length2[j]) সমুহ আেছ। আমরা i তম index এ আসব। এেস সটেক িজ াসা করব য a[i]
এর থেক immediate ছাট কান a[j] আেছ? এই কাজ আমরা lower bound ব বহার কের সহ-
জই করেত পাির। সই a[j] বর কের তার length2[j] নব। িক এমনও তা হেত পাের য কােনা
immediate ছাট a[j] না িনেয় তার থেকও ছাট কােনা a[j] এর জ length2[j] ভাল। হেত পাের,
তেব এখােনই মজা। আমরা যখন (a[j], length2[j]) ঢুকাব তখনই দখব য এর থেক ছাট a[k]
কত? তার length2[k] কত? সটা িক length2[j] এর থেক বড়? তাহেল তা (a[j], length2[j])
ঢুকানর কােনা দরকার নই। অথাৎ আমােদর সট টােত সবসময় a িল increasing আকাের থাক-
ব ( সেটর property অ সাের) আর length2 ও থাকেব increasing অডাের (আমরা এটা িনি ত
করব)। একই ভােব সেট (a[i], length2[i]) ঢুকােনার পর যিদ দিখ এর পেরর length2[k] এর
মান আমােদর length2[i] এর থেক ছাট, তাহেল তা সই (a[k], length2[k]) রাখার আর দর-
কার নই। এভােব আমরা সট ক সবসময় িঠক ভােব maintain কের রাখব।

UVa 10954 Add All


সমস া: তামােক n িট সংখ া দওয়া আেছ (n ≤ 5000). তামােক এসকল সংখ া যাগ করেত
হেব। িট সংখ া a আর b ক যাগ করার cost হল a + b. সবিন কত cost এ সকল সংখ ােক
তুিম যাগ করেত পারেব।
সমাধান: এটা একটা ািসক াল সম া। এর সমাধান huffman coding. Huffman coding
এর সম া মেন হয় আমরা greedy section এ দেখ এেসিছ। এই বই এ না থাকেলও া ািমং
কে ট বই এ অব ই আেছ। ে মটা িছল এরকম- আমােদরেক বলা আেছ কান অ র কতবার
ব ব ত হয়। এখন আমােদরেক িতিট অ েরর জ একিট বাইনাির কাড বর করেত হেব যন
কাড িলর কানিট অ কানিটর prefix না হয়। তামােক সবেচেয় কম খরেচ এই কাজ করেত
হেব। এখােন খরচ মােন হল- ধর কােনা একিট অ র 5 বার ব ব ত হয়। আর তার কােডর দঘ
3. এর মােন এে ে খরচ হল 15. এই সম ার সমাধান হল huffman coding. এখােন আমরা
এই কািডং এর িব ািরত বলব না। এই সমাধােনর একটা মুখ অংশ িছল একটা বাইনাির ি বানােনা।

১৫৪
খয়াল কর, এই বাইনাির ি ত থেমই weight িল ই ভাগ হত, এর পর িতিট নােড আরও
ই ভাগ হত। এরকম কের যত ণ না একিট সংখ া থােক তত ণ ভাগ হেতই থােক তাই না? বা
অ ভােব িচ া কর, িতিট নােড ই প সংখ া যাগ হয়। এরকম করেত করেত root এ িগেয়
সব সংখ া একে যাগ হয়। এটাই তা আমােদর বতমান সম ােতও হে তাই না? Huffman
coding এর সম ােত আমােদরেক মাট কােডর লংথেক সবিন করেত হত। মাট কােডর লংথ
মােন হল িতিট কােডর লংথ আর তার weight (ঐ অ র কত বার আেছ) এর নফল। আমােদর
সংখ ােতও weight দওয়া আেছ ( িতিট সংখ া কত)। আমােদরেক বর করেত হেব িতিট সংখ া
কতবার কের যাগ হয়, মােন huffman coding এ িতিট অ েরর length যত, ততবারই তা ঐ
সংখ া যাগ অপােরশেন অংশ নয় তাই না? আর কােনা একিট সংখ া যাগ অপােরশেন অংশ িনেল
আমােদর cost িদেত হয়, আর আমােদর সম ার মূল ল ই হল এই cost কমােনা। এটাই তা
huffman coding এর কাজ তাই না?

UVa 12627 Erratic Expansion


সমস া: েত একিট লাল বলুন থাকেব। এরপর িত stage এ এরকম পিরবতন হেব- নীল বলুন
পিরবতন হেয় 2 × 2 সাইেজর চারটা নীল বলুেন পিরবতন হেব আর লাল বলুন পিরবতন হেয় 2 × 2
সাইেজর চারিট বলুেন পিরবতন হেব যার িনেচর ডান কাণার নতুন বলুেনর রঙ হেব নীল আর বািক
িতনিটর রঙ হেব লাল। এরকম কের K stage এই অপােরশন করেল (K ≤ 30) বলেত হেব এই
শষ বােড A হেত B রা পয মাট কত িল লাল বলুন আেছ।
সমাধান: তামােদরেক এর আেগই বেলিছ যিদ কখনও A হেত B পয িকছু নেত বেল বা সমাধান
করেত বেল তাহেল চ া করেব 1 হেত B পয উ র বর কের তা হেত 1 হেত A − 1 এর উ র
িবেয়াগ কের সমাধান করেত। এই ে এটা স ব। অথাৎ আমরা যিদ সমাধান করেত পাির য- 1
হেত A পয রা িলেত কত িল লাল বলুন আেছ- তাহেলই মূল সম া সমাধান হেয় যােব।
এখন িকছু observation এর বলা। থেম খয়াল কর K stage পের বােডর সাইজ কত? 1
stage পের এর সাইজ হয় 2 × 2, 2 stage পর 4 × 4, 3 stage পর 8 × 8 এরকম। তরাং K
stage পর সাইজ হেব 2K × 2K . আরও খয়াল কর, একিট বলুন এক stage পর চারিট বলুেন
পিরবরিতত হয়। এই চারিট বলুেনর উপেরর িট বলুন, মূল বলুেনর K stage পর যই বাড হেব
তার উপেরর অেধক বানােব, আর চারিট বলুেনর িনেচর িট বলুন K stage পেরর বােডর িনেচর
অেধক দেব। এখন আমরা A এর সােথ compare করব। A কাথায় আেছ? িনেচর অেধেক নািক
উপেরর অেধেক? যিদ িনেচর অেধেক হয় তাহেল উপেরর িট বলুন K − 1 stage পর য কয়িট
লাল বলুন দেব সব িল আমােদর যাগ করেত হেব। সই সােথ আমরা A = A − 2K /2 করব
আর িনেচর িট বলুেনর জ recursively িজ াসা করব য K − 1 stage পর এই নতুন A এর
জ কয়িট লাল বলুন পাওয়া যােব। আর যিদ A উপেরর অেধেক পরত তাহেল উপেরর বলুন িলর
জ পুরাতন A িনেয় ফাংশন কল করেলই হয়।
তার মােন আমােদর একটা ফাংশন রাখেত হেব যিট বতমান বলুেনর রঙ, stage এর সংখ া
আর কয়টা রা এর জ িহসাব করেত হেব তা parameter িহসােব নেব। এই ফাংশন recursively
িনেজেক কল করেব এক stage কেমর জ , এবং দরকাের কয়টা রা (A) তার মান পিরবতন হেব।
বলুেনর রঙও পিরবতন হেত পাের। িকছু ণ আেগই আমরা ইটা case দেখিছ। যিদ A উপেরর
অেধেক পের তাহেল এই ফাংশন ইবার কল হেব, আর যিদ িনেচ পের তাহেলও ইবার কল হেব
িনেচর িট বলুেনর সােথ। আর আমরা এই ি তীয় case এ উপেরর িট বলুেনর পুেরাপুির নব
(অথাৎ আরও K − 1 stage পর যই অব া হেব তার সব বলুন) তাই না? আমরা িক আেগ থেক
বর করেত পাির লাল বলুনেক i stage পয expand করেল তােত কয়টা লাল বলুন থাকেব। আর
নীল বলুনেক expand করেল তা কােনা লাল বলুন পােব না। তরাং এখােন আমরা আমােদর
ফাংশনেক ইবার কল করব।
এবার দখ, আমােদর িক ইবার কল করার দরকার নই। এই িট কেলর একিট যিদ নীল
বলুন িনেয় হয় তাহেল তা expand কের লাভ নই। আর যিদ িটই লাল হয় তাহেল তা আসেল
ইবার কল করার দরকার নই। একবার কল কের তােক ই িদেয় ন কের িদেলই হল।

১৫৫
UVa 1451 Average
সমস া: তামােক সেবা 100,000 লংেথর একিট অ াের দওয়া আেছ যার িতিট element হয়
0 নাহয় 1. তামােক একিট সাব অ াের িনবাচন করেত হেব যার লংথ কমপে L হয় এবং এেত
এক এর সংখ া গেড় সবেচেয় বিশ হয়। মােন যিদ এই সাব অ াের এর লংথ হয় s আর এেত 1 এর
সংখ া হয় a তাহেল আমােদর ল হল a/s ক সেবা করা যখােন s ≥ L. L এর মান সেবা
1000 হেত পারেব।
সমাধান: অথাৎ আমােদরেক i আর j িট index বর করেত হেব যন j − i + 1 ≥ L হয় আর
i হেত j পয 1 এর সংখ া যিদ S হয় তাহেল আমােদর ল j−i+1
S
এর মান যন সবেচেয় বিশ
হয়। কথা হল S এর মান কীভােব বর করেব? বশ কমন একটা টকিনক ব বহার করেত হেব।
Cumulative sum. আমরা যিদ 1 এর cumulative sum যিদ p নােমর একিট অ াের ত রািখ
তাহেল S = p[j] − p[i − 1]. তাহেল আমােদর average 1 এর ফমুলা হেব p[j]−p[i−1]
j−i+1 . এই
ফমুলা দখেত বশ জিটল লাগেছ। আমরা যিদ i = i − 1 বসাই তাহেল বশ র ফমুলা হেব
p[j]−p[i]
j−i . একটু িচ া কের দখ তা এই ফমুলা পিরিচত লােগ িকনা? এটা slope এর ফমুলার মত।
তুিম যিদ i, j এ লেক x িহসােব ভাব আর p িলেক y িহসােব ভাব তাহেল এটা হল slope. তাহেল
আমােদর ে ম modify করেল দাঁড়ায়, তামার কােছ n িট িব দওয়া আেছ। তামােক i < j
choose করেত হেব যন j − i ≥ L − 1 হয় এবং slope সবেচেয় বড় হয়।
মেন কর তামার কােছ অেনক েলা িব আেছ। এখন তামােক বলল এেদর ভতর থেক
এমন একিট িব িনবাচন করেত যটা আেরকটা িব q এর সােথ সবেচেয় বড় slope তির করেব,
যখােন q এই িব িল থেক বােম অবি ত। একটু িচ া কের দখ তা q কীভােব বর করবা?
সহজ। তুিম যিদ এই িব িলর convex hull তির কর তাহেল q হেত tangent টানেলই তুিম
সবেচেয় বড় slope তির করেত পারবা। আসেল convex hull এর দরকার নাই। ধু upper left
hull তির করেলই হেব।
তাহেল িক দাঁড়াল? আমরা ডান থেক বােম আসব। যখন আমরা i এ আিছ তখন i + L ক
upper left hull এ insert করব। এরপর আমরা i তম িব হেত tangent টানব। এখন ইটা -
কীভােব upper left hull বানাবা আর কীভােব tangent টানবা।
Upper left hull বানােনা িক খুব একটা কিঠন না। মেন কর এই hull এর িব িল হল-
u[1], u[2] . . . u[m] ডান থেক বােম এই অডাের। এখন যখন নতুন একিট িব p আসেব, তুিম
দখেব p, u[m], u[m − 1] এরা িক counter clockwise এ আেছ িকনা, থাকেল u[m] ক ধের
ফেল িদেত পার এবং আবার ঐ turn চক করেত হেব যত ণ না turn টা clockwise এ থােক
(অথবা 2 এর কম element থােক)। সবেশেষ p ক u অ ােরেত insert করেত হেব। এভােব আমরা
upper left hull ক maintain করেত পাির।
এখন ি তীয় , কীভােব tangent টানেব? বশ সহজ, আমরা আমােদর u এর অ াের ত
ternary search করেত পাির সবেচেয় বড় slope কান িব েত হয় তা বর করার জ । আমার
িব াস এটা সমাধােনর জ যেথ । তেব ই া করেল অিতির log n factor না এেনও সমাধান
করা যায়। ছা একটা িহ ট দই। যিদ q হেত tanget টানেল হােলর িব িট যিদ হয় u[k] তাহেল
িক u[1] . . . u[k − 1] এই িব িল কখনও optimal slope এর অংশ হেব না। এই property
ব বহার কের তুিম ternary search ব বহার না কের amortized linear সমেয় সমাধান করেত
পার।

UVa 714 Copying Books


সমস া: সেবা 500 লংেথর একিট অ াের আেছ। তামােক এই আেরেক k ভােগ ভাগ করেত হেব
(অথাৎ k িট সাবঅ াের ত ভাগ করেত হেব)। িতিট ভােগর সংখ া িল যাগ কর। ল হল সবেচেয়
বড় যাগফল যন সবেচেয় ছাট হয়। আমােদর দ অ ােরর সকল সংখ া ধনা ক।

১৫৬
সমাধান: মােঝ মােঝ িচ া করেত হয়- যিদ আমার উ র জানা থাকত তাহেল িক আমরা বর করেত
পারতাম য আমরা আমােদর ইনপুেটর অ ােরেক k বা তার কম ভােগ ভাগ করেত পারব িকনা?
এে ে ব াপারটা সহজ তাই না? মেন কর আমরা জািন আমােদর সবেচেয় বড় যাগফল হল S.
তাহেল আমরা অ ােরর থম থেক সংখ ােক থম ভােগ রাখেত থাকব যত ণ যাগফল S অিত ম
না কের। এর পর ি তীয় ভাগ িনেত থাকব। এভােব চলেত থাকেব। এভােব সব সংখ া নয়া হেয়
গেল দখব কয়টা ভাগ হেয়েছ।
িক সম া হল আমরা তা আমােদর উ র জািন না তাই না? িক উপায়? Binary search.
খয়াল কর আমরা মেন কর ই রকম guess করলাম, একটা হল S1 আেরকটা S2 যখােন S1 <
S2 . S1 এর জ মেন কর ভাগ হয় K1 আর S2 এর জ K2 . আমরা বলেত পাির K1 ≥ K2 .
কারণ যিদ আমােদর S কম হয় তাহেল তা ভােগর সংখ া বেড় যােব তাই না? তরাং আমরা binary
search কের সিঠক S এর মান বর কের ফলেত পারব। যিদ কােনা একিট guess এর জ দিখ
K এর মান আমােদর কাি ত মােনর থেক বিশ হেয়েছ এর মােন হেব আমােদর S বাড়ােত হেব।
কারণ এই S এর ফেল আমােদর ভাগ সংখ া বিশ হেয় িগেয়েছ (K এর মান বিশ), তরাং আমােদর
S এর মান বািড়েয় K এর মান কমােত হেব। একই ভােব যিদ কােনা একিট guess এর জ যিদ
দিখ K এর মান আমােদর কাি ত মােনর থেক হেয়েছ তাহেল S কমােত হেব। এভােব আমরা
optimal S এর মান বর করেত পারব।

UVa 11093 Just Finish it up


সমস া: একিট বৃ াকার রা ায় N িট গ াস শন আেছ। িতিট গ াস শেন িক পিরমান গ াস
আেছ তা বলা আেছ। আবার িতিট গ াস শন হেত তার পেরর শেনর র ও বলা আেছ।
বলেত হেব কান শন থেক তুিম কােনা গ াস ছাড়া গািড় িনেয় যা া করেল কােনা সম া
ছাড়া আবার সই শেন ফরত আসেত পারেব (পুেরা রা া গাল কের ঘুের)। N এর মান 100000
হেত পাের। এক ইউিনট র যেত এক ইউিনট গ াস লােগ।

সমাধান: এটা একটা পােজল জাতীয় সম া। আমরা কােনা একিট রা ায় যেত য পিরমান গ াস
খরচ হয় সই পিরমান গ াস আমরা তার আেগর গ াস সন থেক িবেয়াগ করব। তাহেল আমােদর
বেলম পিরবতন হেয় দাঁড়ায়- একিট N দেঘ র circular অ াের আেছ। আমােদরেক বলেত হেব
অ ােরর কান জায়গা থেক করেল পুেরা অ ােরর সংখ া িল যাগ করেত করেত ঘুের আসেলও
কাথাও আমােদর যাগফল ঋণা ক হেব না।
আমরা আমােদর কাজ সহজ করার জ এই অ ােরেক তার িনেজর মত এক অ ােরর (আেগরটার
কিপ) সােথ জাড়া লাগােয় 2N লংেথর বানাব। অথাৎ i তম index এ য সংখ া আেছ i + N তম
index এও একই সংখ া আেছ (1 ≤ i ≤ N আর ধের িনি অ ােরিট 1 indexed). এবার এই
অ ােরর থম ান থেক িতিট ান পয cumulative sum বর করব। এই cumulative sum
এর অ াের মেন কর S. মেন কর আমরা যা া করব i এর িঠক পের থেক তাহেল j ত পৗঁছােত
গ ােসর পিরমান হেব S[j] − S[i]. আমােদর ল এমন একিট i িনবাচন করা যন সকল j > i
এর জ S[j] − S[i] ≥ 0 হয়। এখােন তামরা ভাবেত পার আিম কন হঠাত 2N দেঘ র অ াের
িনলাম। এটা আসেল circular ে মেক িলিনয়াের কনভাট করার একিট র টকিনক। তুিম যিদ
েত ক [i, i + N − 1] রে র জ সমাধান করেত পার (1 ≤ i ≤ N ) তাহেল পুেরা সাইেকল
এর জ সমাধান হেয় যােব (সব সম ার ে ই য স ব তা না, িক বশ অেনক সম ার জ
স ব)। যমন এই সম ার ে আমােদর কাজ হল 1 ≤ i ≤ N মেন এমন একিট i িনবাচন
করেত হেব যন [i + 1, i + N ] এই রে র ভতের যেকােনা j এর জ S[j] − S[i] ≥ 0 হয়
(আসেল j ≤ i + N এর জ সত হেল আমােদর সম ার ে সকল j ≤ 2N এর জ ও সত
হেব)। এখােন S[j] − S[i] এর মােন হল i + 1 থেক j পয সংখ ার যাগফল। আর আমরা চাই
এই যাগফল যন ঋণা ক না হয়। এখন তামরাই িচ া কের দখ কান i িনবাচন করবা? আসেল
যেকােনা j এর জ S[j] তা fixed. আমরা যিদ S[i] ক কমােত পাির তাহেল S[j] − S[i]
সবেচেয় বড় হেব। আর আমােদরেক িক i ≤ N িনবাচন করেত হেব তা না হেল তা i + N তা
2N এর থেক বিশ হেয় যােব। তাহেল আমরা 1 ≤ i ≤ N এর জ সবেচেয় ছাট S[i] িনবাচন

১৫৭
করব। এরপর আমরা েত ক j এর জ চক কের দখব য S[j] − S[i] ≥ 0 হয় িকনা।

UVa 1607 Gates


সমস া: অেনক িল NAND গট আেছ। গট িল একিট আেরকিটর সােথ িবিভ ভােব জাড়া
লাগােনা আেছ। তেব তােদর মােঝ সাইেকল নই অথাৎ কােনা একিট গেটর আউটপুট িগেয় আবার
তার িনেজর ইনপুেট (সরাসির হাক বা অ আরও গেটর মাঝ িদেয় হাক) লাগেব না। এই িসে েম
মূল ইনপুট একটাই x. এই একই x ই িবিভ গেটর ইনপুট িহসােব কাজ করেব বা অ কােনা
গেটর আউটপুট আেরকটা গেটর ইনপুট িহসােব কাজ করেব। তামােক এই base ইনপুট লর
সবেচেয় কম সংখ ক x এ রাখেত হেব আর বািক িল 0 বা 1 কের িদেত হেব যন আমােদর circuit
ফাংশন িঠক থােক। অথাৎ x এর 0 বা 1 িদেল আেগ যা আসত এখনও যন তাই আেস। ইনপুেট
গেটর সংখ া 200,000 হেত পাের। আর base ইনপুেটর সংখ া সেবা 100,000 হেত পাের।

সমাধান: চ ি িক একটা সম া। থেম দখ য x এর মান যিদ 0 হয় তাহেল আউটপুট কত


আর 1 হেলই বা আউটপুট কত। যিদ তারা সমান হয় তার মােন আসেল কােনা x ইনপুট না িনেয়
সব কয়টা 0 বা 1 িদেলই হয়। সম া হল যখন x এর মান 0 এর জ শষ আউটপুট আর x এর
মান 1 এর জ শষ আউটপুেটর মান সমান হয় না। থম কথা আমােদর ইনপুেট কমপে একিট x
লাগেবই তাই না? কারণ যিদ ইনপুেট কােনা x না থােক তাহেল তা ইনপুট vary করেব না। ইনপুট
vary না করেল তা x এর মান যাই হাক না কন আউটপুট একই থাকেব। িক আমরা তা জািন x
এর মান vary করেল আমােদর আউটপুটও vary করেব। উপায় িক?
এখােনই ে ম সে ভর মজা। খয়াল কর তামরা জান য 00 . . . 0 এর জ এক আউটপুট আর
11 . . . 1 এর জ আেরক ইনপুট। আমােদরেক এমন একিট ইনপুট বর করেত হেব যােত কমপে
একিট x থােক এবং x = 0 বসােল 00 . . . 0 এর জ যই আউটপুট (ধরলাম A) আেস সিট দেব
আর x = 1 বসােল 11 . . . 1 এর জ যই আউটপুট (ধরলাম B) আেস সিট দেব। কীভােব সমাধান
করবা?
আমরা আপাতত মেন কির আমােদর ইনপুট 5 টা। তাহেল আমরা এই 6 টা ইনপুট চ া করব
00000, 00001, 00011, 00111, 01111, 11111. আমােদর একদম বােম আেছ A, একদম ডােন
আেছ B আর মােঝর িল A বা B যেকােনািটই হেত পাের। আমরা এই ছয়িট ইনপুট sequence
এর মােঝ অব ই পাশাপািশ ইটা পাবই যার বােমরটা A আর ডােনরটা B. ধরা যাক 00011 এ A
আর 00111 এ B. তাহেল আমরা যিদ 00x11 ইনপুট িহসােব দই তাহেলই িক আমােদর সম া
সমাধান হেয় যােব। কারণ আমরা জািন আমােদর কমপে একটা x লাগেবই আর এখােন একিট
x ব বহার করা হেয়েছ। x এর মান 0 হেল আমােদর আউটপুট A আেস আর x এর মান 1 হেল B
আেস, আর সটাই তা আমােদর দরকার তাই না? তরাং আমরা যিদ N ইনপুেটর জ এই রকম
N + 1 িট ইনপুট sequence চ া কির তাহেলই তা হেয় যােব। সম া হল এেত TLE হেব কারণ
আমােদরেক ায় 200, 000 বার এই কাজ করেত হে । আর িতবার আমােদরেক 100, 000 িট
গট েসস করেত হে । উপায় িক?
Binary search. আমরা বাইনাির সাচ কের এমন জায়গা বর করব যখােন পাশাপািশ A আর B
আেছ। একটা িজিনস, এখােন আমােদর ইনপুট sequence য সবসময় AAA . . . AAABBB . . . B
এর মত হেব তা িক না। এমনও হেত পাের AABBABBABBABB. এটা িনি ত য আমােদর
সবার বােম A আেছ আর সবার ডােন B আেছ। আমােদর কাজ এমন পাশাপািশ টা বর করা যখােন
A আর B পর পর থােক। কীভােব করব? আমরা যটা িনি ত করব সটা হল- সবসময় আমােদর
sequence এর একদম বােম A আর একদম ডােন B আেছ। মেন কর বাইনাির সােচর সময় আমা-
দর মধ খান test করিছ। সখােন আমরা A পলাম। তাহেল আমরা কান ভাগ নব? বাম না ডান?
সহজ, ডান। কারণ আমরা চাই আমােদর sequence এর বােম যন A আর ডােন B থােক। আমরা
যিদ বাম ভাগ িনতাম তাহেল তা ডান াে A থাকত তাই না? তরাং আমােদর ডান ভাগ িনেত
হেব। একইভােব আমােদর মধ খােন যিদ B পাওয়া যায় তাহেল আমােদর ক বাম ভাগ িনেত হেব।
এভােব binary search করেত থাকেল একসময় আমােদর sequence মা ই লংেথর হেয় যােব
যার বােম A আর ডােন B. তরাং আমােদর সম া সমাধান হেয় যােব।

১৫৮
UVa 12174 Shuffle
সমস া: তামার গােনর িলে s (সেবা 100,000) িট গান আেছ। গান িল 1 হেত s ারা কাশ
করা হেব। তুিম shuffle িফচার ব বহার কর। অথাৎ একদম েত তামার সফটওয় ার গান িলর
একিট random permutation করেব এরপর সসব শষ হেয় গেল আবার নতুন একিট random
permutation করেব এরকম কের চলেত থাকেব। তামােক গােনর partial history দওয়া আেছ
(সবেশষ বাজা n িট গান, n ≤ 100, 000)। অথাৎ শষ এতটা গান িক িক িছল। বলেত হেব কয়টা
গান পর তামার সফটওয় ার আবার গােনর িল shuffle করেব। তামােক আসেল কয়টা গান পর
বলেত হেব না, বলেত হেব "কয়টা গান পর" এর কয়টা উ র আেছ। অথাৎ যিদ এরকম হয় য, 2 টা
গান পরও শাফল হেত পাের, 4 টা গান পরও হেত পাের, আর কােনা অপশন নাই। এর মােন এরকম
2 টা উ র আেছ। এমনও হেত পাের য দ history টা ভুল, সে ে 0 আউটপুট করেত হেব।
সমাধান: মেন কর গােনর অ ােরিট হল 1-indexed. এর মােন হল গােনর একিট অ ােরেত 1 হেত n
index এ সবেশষ n িট গান দওয়া আেছ। আমরা যটা করব তাহল িতিট i এ যাব আর মেন করব i
এর আেগ িদেয় শাফল হেয়িছল, ফেল i হেত i + s − 1 পয গান িলর index আলাদা আলাদা হেব।
বা অ ভােব বলেল দাঁড়ায় তুিম যিদ দখ য i হেত i + s − 1 এর মােঝ যিদ কােনা duplicate
সংখ া থােক তার মােন হেব i থেক কােনা শাফল হেত পারেব না। এরকম কের আমরা সকল i
এ বর করব য সখান থেক কােনা শাফল হেত পাের িকনা। কান কান i আমােদর চক করা
উিচত? যসকল i এর জ [i, i + s − 1] এই র িট আমােদর ইনপুট এর সােথ intersect কের।
তার মােন [2 − s, n] এই রে র মােঝর সকল মানেক i িনেয় িনেয় চ া করেত হেব। কােনা একিট
i এর জ (এই ) s লংেথর অ াের sequence চক করা তা সহজ। িক িতিট i এর জ তা আর
আমরা O s এ এই কাজ করেত পাির না তাই না? এখােন আমরা sliding window টকিনক এর
সাহায নব। আমরা থেম দখব য [2 − s, 1] এর মােঝ কােনা duplicate আেছ িকনা, এরপর
দখব [1 − s, 2] এর মােঝ আেছ িকনা এরকম কের আমরা window ক এক ঘর কের সরােত থাকব
যত ণ না আমরা সব window এর িহসাব কের ফলিছ। কীভােব িহসাব করবা তােতা সহজ। আমরা
একিট অ াের িনব যােত িলখা থাকেব বতমান segment এ কান সংখ া কয়বার কের আেছ। আর
আেরকটা variable রাখব য এই অ ােরেত এখন কয়টা 2 বা 2 এর বিশ আেছ। যেহতু আমরা
িত window আপেডেট মা একিট সংখ া মুেছ যায় বা নতুন যাগ হয় সেহতু আমরা এই অ াের
আপেডট আর এই অিতির ভ ািরেয়বল আপেডট এর কাজ খুব সহেজই করেত পারব।
এই কাজ শষ হেয় গেল এখন দখেত হেব কান কান জায়গা থেক shuffle হেত পাের।
মেন কর i তম ান থেক shuffle হেত পাের। এর মােন হল i ± s, i ± 2s . . . এর িতটা হেতই
shuffle হয়। এর মােন আমােদরেক 0 হেত s − 1 পয িতিট mod এর জ চক করেত
হেব য সই mod এর সকল index থেকই shuffle হেত পাের িকনা। যা খুবই সহজ কাজ।

UVa 1608 Non boring sequence


সমস া: একিট n দেঘ র সংখ ার অ াের দওয়া আেছ (n ≤ 200, 000). অ ােরিট non-boring
হেব যিদ এর িতিট সাবঅ ােরেত একিট unique সংখ া থােক। বলেত হেব দ অ ােরিট boring
না non-boring.
সমাধান: যিদ তুিম এমন একিট সাবঅ াের খুঁেজ বর করেত পার যােত কােনা ইউিনক element
নই তাহেলই তামার কাজ শষ। এখন হল কীভােব খুব ত এরকম একিট সাবঅ াের খুঁেজ
বর করেত পারেব। মেন কর তুিম থেম পুেরা অ াের িনেল [1, n]. এেত একিট ইউিনক element
i এ খুঁেজ পেল। এর মােন যেকােনা [a, b] যখােন a < i < b এর জ একিট ইউিনক element
আেছই। এরপর আমরা দখব [1, i − 1] অংশটু িক boring িকনা, আর অ িদেকর [i + 1, n]
অংশটু boring িকনা। একই ভােব এই ছাট সাবঅ ােরেত আমরা দখব কােনা unique element
আেছ িকনা। থাকেল তার সােপে আমােদরেক এই সাবঅ ােরেক ভাগ করেত হেব এবং এভােব চল-
ত থাকেল আমােদর সম া সমাধান হেয় যােব। িক কােনা একিট সাবঅ ( ) ােরেত ইউিনক element
আেছ িকনা বা থাকেল কানটা এটা কীভােব বর করবা? িতবার O n এ এই ভােগর কাজ করেল

১৫৯
( )
িক আবার হেব না, তাহেল আবার O n2 হেয় যােব কারণ আমরা য সবসময় মাঝামািঝ ভাগ
করেত পারব তার িক িন য়তা? এমনও তা হেত পাের িতবার আমােদর ( ) ভাগ হে এক মাথায়।
তরাং আমােদর থমবার n, এরপর n − 1 এরকম কের মাট O n2 বার কাজ করেত হেব।
উপায়?
মেন কর আমরা [i, j] এই সাব অ াের ত আিছ। আমরা িজ াসা করব i এর সংখ া িক unique?
নাহেল j এর সংখ া িক unique? না হেল i + 1 এর স ািক unique না হেল j − 1 এর সংখ ািক
ইউিনক? এরকম কের zigzag ভােব িজ াসা করব। তাহেল লাভটা িক? লাভ হল মেন কর এই
েসস শেষ আমরা আমােদর সাবঅ ােরেক a আর b এই ই সাইেজ ভাগ কেরিছ। আর এই ভােগর
জ আমােদর খরচ হয় min(a, b) তাই না? কারণ দখ a = n − 1 আর b = 1 হেল আমরা ি তীয়
ধােপই বর করেত পারব য আমােদর সবেশেষ ইউিনক সংখ া আেছ। যেহতু a + b = j − i + 1
সেহতু আসেল a আর b এর সবিন মান (j − i + 1)/2 এর বিশ হেব না। ( )তুিম একটু যিদ
কাগেজ কলেম িহসাব কের দখ দখবা এ কােজর জ তামার খরচ হেব O n . তেব এখনও
একটা িজিনস বািক আেছ সটা হল কােনা একিট সাবঅ ােরেত কােনা একিট element ইউিনক
িকনা তা কীভােব বর করেব? সিট সহজ, আমরা দখব য এর সমান বাম িদেক সবেশষ কাথায়
আেছ, আর ডানিদেক সবার আেগ কাথায় আেছ। যিদ এ িটর কানিটই [i, j] সীমানার মােঝ না
থােক তার মােন এিট ইউিনক। কােনা একিট সংখ ার সমান সংখ া এর আেগ কাথায় আেছ বা এর
পের কাথায় আেছ তা আমরা খুব সহেজই map ব বহার কের precalculate কের রাখেত পাির।

UVa 1609 Foul Play


সমস া: n িট ফুটবল িটম আেছ (n এর মান 2 এর পাওয়ার হেব এবং সেবা 1024 হেব)। িতিট
িটম অ যেকােনা িটেমর সােথ খলেল খলার ফলাফল িক হেব তা তুিম জান। এই িটম িলর মােঝ
তামার একিট িটম আেছ। তুিম জান য তামার িটম অ ত বািক িটম িলর অেধকেক হারােত পাের।
আর যােদর হারােত পার না, তােদর হারােত পাের এরকম কােনা িটমেক তামার িটম আবার হারােত
পাের। টুনােমে টর থম রাউে ড n/2 িট খলা হেব এবং খলায় যারা িজতেব তারা ি তীয় রাউে ড
যােব। একই ভােব ি তীয় রাউে ড n/4 িট খলা হেব। এরকম কের একজন চ াি য়ন হেব। তামার
কাজ হল- এমন ভােব টুনােম ট িডজাইন করা যােত তামার দল চ াি য়ন হয়।

সমাধান: তুিম যিদ থেমই ক কার সােথ খলেব সটা িঠক কর অথাৎ ি এর leaf এ ক কাথায়
আেছ সটা যিদ থেমই িঠক করেত যাও তাহেল নানা রকেমর সম ায় পরবা। যমন মেন কর
তামার িটম যােদর হারােত পাের না তারা হল B আর যােদরেক তামার িটম হারােত পাের তারা হল
A. তাহেল এরকম িকছু scenario িচ া করেত পার- A এর একটা িটম B এর সব িটম ক হারােত
পাের, িক স আবার A এর বািক িটম এর কােছ হাের। A এর অ রা B এর কােনা িটমেক হারােত
পাের না। এর মােন সই special দল যন অ কােনা A এর দেলর কােছ যন না হাের সটা
িনি ত কের planning করেত হেব। এছাড়াও আরও অেনক িকছু খয়াল রাখেত হেব। মেন কর B
ত একটা িটম আেছ য কারও কােছ হাের না ধু মা A এর একটা িটম এর কােছ হাের। তরাং
আমােদর খয়াল রাখেত হেব A এর সই িটম যন আবার অ কারও কােছ হের না বেস। এরকম
নানা িজিনস খয়াল রেখ একবাের যিদ তুিম দেলর schedule িঠক করেত চাও তাহেল সমাধান
করা বশ কিঠন হেয় যায়।
এই ে অেনক সময় যটা কােজ লােগ তাহল তামার ে ম ক িত রাউে ড ছাট কের
ফলা। যমন মেন কর- এই সম ার ে বলা আেছ য, মাট দল n টা ( যটা একটা 2 এর
power, 2k ). এর মােঝ তামার একটা দল, িকছু A দল যােদর সংখ া মেন কির a, আর িকছু B
দল যােদর সংখ া মেন কির b. তুিম A এর সবাইেক হারােত পার। B এর সবাই তামােক হারােত
পাের। B এর িতিট দল A ত আেছ এমন কােনা একিট দেলর কােছ হাের। a ≥ n/2 = 2k−1
আর b < n/2 = 2k−1 . আমােদর বলা আেছ য এরকম ে কােনা না কােনা ভােব schedule
করা স ব য তামার দল শেষ িজতেব।
আমরা যিদ এক রাউ ড খলা করাই তাহেল বািক থােক n/2 = 2k−1 দল। আমরা িক থম
রাউ ড এমন ভােব schedule করেত পাির যন, এই ি তীয় রাউে ড তামার দল থােক, িকছু A দল

১৬০
থােক যন তােদর সংখ া a′ ≥ n/4 = 2k−2 হয় আর B দেলর সংখ া b′ < n/4 = 2k−2 হয় আর
যসকল B দল এখনও বািক আেছ তােদরেক হারােত পাের এরকম কােনা এক দল যন এখনও A
ত বািক থােক। যিদ আমরা এভােব থম রাউ ড schedule করেত পাির তাহেল তা এটা আবার
আমােদর কােছ নতুন িক ছাট একই রকম ে ম দাঁড়ােব তাই না? তরাং আমরা যিদ এরকম
কের একিট কের রাউ ড schedule করেত পাির তাহেল সব রাউ ড শেষ আমােদর দল িজতেব।
এখন হেল কীভােব এই schedule করবা? একটু িচ া করেলই মেন হয় তা বর কের
ফলেত পারবা। আমরা A আর B িনেয় কাজ করব। B থেক একটা িটম িনব আর দখব A এর
কউ তােক হারােত পাের িকনা। পারেল এেদর জনেক একে schedule কের দব আর তােদর
জনেক A আর B থেক বাদ দব। িক এমন তা হেত পাের য B এর যই দলেক আিম এখন
schedule করেত চাি তােক A এর যারা হারােত পারত তােদর ইেতামেধ ই B এর অ দেলর
সােথ schedule কের ফেলিছ। কােনা সম া নাই। সই ে আমরা এেক অ যেকােনা B
দেলর সােথ schedule করােয় দব। আর যিদ স একাই বািক থােক B দেলর ভতর থেক তাহেল
তােক যেকােনা একটা A দেলর সােথ schedule কের দব। যেহতু B দেলর সংখ া A দেলর
সংখ ার থেক কম সেহতু আমােদর এই েসেস B এর সট আেগ ফাঁকা হেয় যােব। তখন আমরা
আমােদর দলেক A এর যেকােনা দেলর সােথ schedule করব আর বািক A দলেক িনেজেদর মােঝ
যেকােনা ভােব schedule করব। হল এভােব schedule করেল আমােদর পেরর রাউ ড এ
সব শত মেন দল িল থােক িকনা।
আমােদর কােছ িক িক শত িছল?

ˆ তামার দলেক পেরর রাউে ড উঠেত হেব।


ˆ b < n/2 িছল b′ < n/4 হেত হেব।
ˆ a ≥ n/2 িছল a ≥ n/4 হেত হেব।
ˆ িতিট B' দেলর জ A' সেট এমন এক দলেক থাকেত হেব য তােক হারােত পাের।

আমরা আেগই দেখিছ য যেহতু B দেলর সংখ া A দেলর সংখ ার থেক কম সেহতু B দেলর
সকেলর scheduling এর পর A দেল কউ না কউ বািক থাকেব। তরাং আমরা আমােদর দলেক
A দেলর কারও না কারও সােথ schedule করিছ। তরাং আমােদর দল পেরর রাউে ড যােবই।
মেন কর আমােদর েসেস b দেলর মােঝ t দল A এর সােথ schedule হয়। এর মােন বািক
b − t দল িনেজেদর মােঝ অথবা শষ জন A দেলর কারও সােথ schedule হয়। এর মােন ঐ t
দেলর কউ পেরর রাউে ডর মুখ দখেব না। বািক b − t দল িনেজেদর মােঝ খলেব আর তার ফেল
এেদর অেধক জন পেরর রাউে ড যােব। যিদ b − t িবেজাড় হয় তাহেল শষ িবেজাড় দল A এর
কাউেক হািরেয় পেরর রাউে ড যােব। ওিদেক a − t িট A এর দল বািক থাকেব (বা a − t − 1 যিদ b
িবেজাড় হয়)। তাহেল িক a′ > b′ হেব? খয়াল কর যিদ আমরা a′ > b′ মাণ করেত পাির তাহেল
ই আর িতন না ার শত িক একবােরই পুরন হেয় যােব। কারণ a′ + b′ = n/2 − 1 আর a′ > b′
হেল 2b′ < n/2 − 1 বা b′ < n/4. একই ভােব আমরা অ শত মাণ করেত পাির। তাহেল
আমােদর এখন দখােত হেব য a′ > b′ . যেহতু েতই a > b িছল, তরাং আমরা যিদ ঐ t
িলেক যিদ schedule কের ফিল তাহেলও a − t > b − t থাকেব। এবং এই t দল িল খলার
পর সখােন A দল িলই িজতেব, B দল িল সসব খলায় আর পেরর রাউে ড যােব না। খয়াল
কর এখােন t এর সংখ া িক কমপে 1 হেবই (যিদ না হয় এর মােন B ত কউ নাই, সে ে
তুিম কার সােথ কােক schedule করলা তা িক ব াপার না, তামার দল িজতেবই কারণ এখন আর
কােনা B নই)। এখন b িবেজাড় হেল একটা B ক A এর সােথ খলােত হেব এবং স ে B
এর দল পেরর রাউে ড যােব। যেহতু t থেক একটা না একটা A এর দল পাবই আর এখােন একটা
B এর দল পাি তরাং এখন পয B এর দল সংখ া িক A এর দল সংখ া থেক বিশ হয় নায়।
এখন এই িবেজাড় দল খলার পরও a − t − 1 > b − t − 1. তার মােন আমরা যিদ এখন A আর
B ক িনেজেদর মােঝ খলাই তাহেল িক A এর দেলর সংখ া B এর দেলর সংখ ার থেক কম হেব
না বরং বিশ হেত পাের। আমরা এখােন মাণ করলাম a′ ≥ b′ . িক তুিম এখন যিদ িচ া কর কখন
a′ = b′ হেত পাের তখন একটু যিদ case analysis কর তাহেল বুঝেব য a′ = b′ হেত পাের না।
কন? দখ, a′ = b′ তখনই হেব যিদ t = 1 হত আর b − t ত িবেজাড় সংখ ক দল থাকত। শষ

১৬১
িবেজাড় দলেকও মেন কর schedule করলা। বািক থাকল b − t − 1 সংখ ক জাড় দল। ওিদেক
তামার দল আর a − t − 1 সংখ ক িবেজাড় দল বািক থাকেব। কারণ B এর প আর তুিম িমেল
িবেজাড়। যেহতু জাড়ায় জাড়ায় খলা হেব সেহতু A দেলর বািক দর সংখ া তা িবেজাড় হেবই।
মেন কর তুিম A এর কারও সােথ খলেল। তাহেল A এর বািক দর সংখ া B দর বািক দর সংখ ার
খুব জাড় সমান হেব। িক আসেলই িক সমান হেত পারেব? সমান হেল তা পেরর রাউে ড তামার
দেলর সােথ খলার আর কাউেক পাওয়া যােব না। এর মােন আসেল A ত B এর থেক আরও ই
জন বিশ আেছ। এর মােন (a − t − 1)/2 > (b − t − 1). মাণটা একটু জিটল হেয় গল।
হয়েতা আরও সহজ মাণ আেছ। িক আসেল এেতা details এ মাণ করার দরকার নাই। তুিম
যিদ convince হউ য এটা কাজ করেছ তাহেলই হল। আর তুিম যিদ চাও তাহেল ক কের মাণ
করেতই পার। সিত কথা বলেত এই মাণ আিম করার জ কেরিছ। এবং এই মাণ আিম িনেজ
পের বুঝেত বশ ক হে । করার িকছু নই। এধরেনর মাণ এরকম জিটলই হয় সাধারণত। এজ
সবেচেয় ভাল হয় িনেজরাই এরকম case analysis কের কের মাণ করা। আর যিদ কউ একা ই
মাণ দখেত চাও তাহেল ঠা া মাথায় এখােন িলখা মাণ কেয়ক িদন ধের কেয়ক বার কের পড়,
আশা কির বুঝবা।

UVa 1442 Cave


সমস া: একিট হা আেছ। হাটােক n unit ল া িহসােব ক না করেত পার (n ≤ 1, 000, 000)।
িতিট unit এ িকছু পিরমান ছাদ আর িকছু পিরমান মািট আেছ। িতিট ােন সমু পৃ হেত কত
উপের মািট আর কত উপের ছাদ আেছ তা বলা আেছ। এখন তুিম এই হােত িকছু পিরমান তরল
সংর ন করেত পার। খয়াল রাখেত হেব তামার তরল যন ছাদ অিত ম না কের। আর যেহতু তুিম
তরল রাখবা- তরল িক চতুিদেক গিড়েয় যায়। তরাং খয়াল রাখেত হেব য তুিম এক জায়গায় তরল
রাখেল আর তা গিড়েয় পােশর কােনা ছাদ অিত ম করল- এটা যন না হয়। বলেত হেব সেবা িক
পিরমান তরল তুিম এই হােত সংর ন করেত পারেব। আর এটা বলা আেছ য তরল গিড়েয় হার
সীমানা অিত ম করেত পারেব না। অথাৎ িদেক অেনক উচু মািট আেছ বেল মেন করেত পার।
(ভাল হয় তামরা যিদ original problem টা পড়)।
সমাধান: নানা ভােবই এই সম া সমাধান করা যায়। এর মােঝ একিট উপায় হল িতিট ােনর জ
এটা বর করা য এই ােন কত উচু পয তরল রাখা যােব যন এিট আমােদর বােমর বা ডােনর
কােনা ছাদেক অিত ম না কের। আমরা ইভােগ এটা করব। থম ভােগ আমরা বর করব আমরা
যিদ বােমর কােনা ছাদেক অিত ম করেত না চাই তাহেল আমােদর তরেলর উ তা কত হেব। এর
পেরর ভােগ আমরা বর করব আমরা যিদ ডােনর কােনা ছাদেক অিত ম করেত না চাই তাহেল
আমােদর তরেলর উ তা কত হেব। এই ইিট সংখ া বর হেয় গেল তা আমােদর সম া সমাধান
হেয় যােব।
তাহেল আমরা এখন বর করেত চাই আমােদর তরেলর উ তা কত হেলও বােমর কােনা ছাদেক
অিত ম করেব না। এজ আমরা বাম হেত ডােন আসব, িকছুটা linear scan এর মত। মেন কর
আমরা এখন i তম ােন আিছ আর জািন য বােম কােনা ছাদেক অিত ম না করেত হেল সেবা
তরেলর height কত হেত পাের। এখন আমরা i তম ােন আসলাম। এই তরেলর height limit ক
আমােদরেক আপেডট করেত হেব। কেয়কটা কস হেত পাের। মেন কর বতমান ােনর ছােদর উ তা
h, মেঝর উ তা f আর আমােদর বতমান limit L. িতন ধরেনর কস হেত পাের।

ˆ L ≥ h > f . এখন এই i তম ােনর তরেলর উ তা L অিত ম তা করেত পারেবই না,


উপর h ও অিত ম করেত পারেব না। সজ L এখন পিরবতন হেয় h হেয় যােব।
ˆ h > L > f . এটা সবেচেয় সহজ কস। এে ে আমােদর তরেলর উ তার িলিমট L ই
থাকেব।
ˆ h > f ≥ L. এটা বশ ি িক কস। এে ে আমােদর মেঝ আেগর িলিমট L এর থেকও
উচুেত আেছ। এর মােন হল এই ােন কােনা তরল থাকেত পারেব না। কারণ থাকেলই তা
বাম িদেক চেল যােব, আর বাম িদেক যাওয়ার মােনই L ক violate করা। িক একটা িজিনস

১৬২
খয়াল কর, এই ােনর ডান িদেক যারা আেছ তারা িক এখন f উ তা পয তরল রাখেত
পারেব। কারণ এই ান হেত ডান িদেকর তরেলর উ তা যত ণ না f অিত ম করেব তত ণ
তারা i এর বােম যেত পারেব না আর L কও violate করেত পারেব না। তাহেল এই কেস
যা করেত হেব তাহল L = f .

তরাং আমরা যিদ উপেরর এই েসস বাম আর ডান ই িদক থেক কির তাহেল েত ক ােনর
জ আমরা L পাব। আর L পেল তা আমরা তা থেক মেঝর উ তা বাদ িদেলই ঐ ােন িক
পিরমান তরল থাকেত পারেব তা পেয় যাব।

UVa 12265 Selling Land

সমস া: একিট R × C ি ড আেছ (R, C ≤ 1, 000)। ি েডর িবিভ সেল পািন আেছ। তুিম
এক বা একািধক সাবি ড মাক করেত পার যন তার ভতের কােনা সেল পািন না থােক। তেব
খয়াল রাখেত হেব য একািধক সাবি েডর িনেচর-ডান কাণা যন একই না হয়। তামার ল
এসব সাবি েডর পিরিধর যাগফল যন সেবা হয়। বলেত হেব সাবি ড সমুেহর পিরিধ কত কত।

( )
সমাধান: এরকম সম ার ে আমােদরেক maximum 0 area subrectangle এর O n2
সমাধােনর টকিনক খাটােত হয়। এই টকিনক না জানেল আেগ তা পেড় আেসা। ওখােন আমরা
িক কেরিছলাম? আমরা থেম subrectangle এর base িঠক কেরিছলাম। এরপর িতিট কলাম
এেকর পর িগেয়িছলাম এবং তা stack এ রেখ েসস কেরিছলাম। মেন কর আমরা একিট base িঠক
করলাম, অথাৎ একিট রা িঠক করলাম য যসকল rectangle এর base এই রা ত আেছ তােদর
উ র আমরা এখন বর করব। এবার আমরা বাম হেত ডােন যাই। িতিট কলােম িগেয় আমােদর
জানেত হেব এই কলােম আমােদর(িঠক) করা base এর থেক কত উচু পয পািন ছাড়া সল আেছ।
এই সংখ া আমরা খুব সহেজই O n2 এ precompute কের রাখেত পাির। এখন আমরা stack
এ এই height িল রেখ েসস করব। যিদ stack ফাঁকা হয় তাহেল আমরা stack এ ঢুিকেয়
রাখব বতমান কলাম আর তার height. যিদ ইেতামেধ ই stack এ কউ থােক তাহেল দখব stack
এর উপের য আেছ তার height িক আমার বতমান কলােমর height থেক বড় িকনা। যিদ বড়
হয় তাহেল তা লাভ নাই তাই না? কারণ ওত বড় height এর rectangle বতমান কলাম থেক
বানােনা স ব না। সজ তােক ধের ফেল দব। এরকম কের stack এর উপের যত জন আমার
বতমান কলােমর থেক বিশ height এর আেছ তােদর ধের ফেল িদেত হেব। এই কাজ করার পর
আমােদরেক stack এ বতমান height েবশ করােত হেব। তেব এই height হেব কই থেক?
সবেশষ যােক তুেল ফেলছ স যখান থেক হেয়িছল সখান থেক। এভােব আমােদরেক stack
েসস করেত হেব। আর বতমান কলােমর েসস করা হেয় গেল তুিম আসেল বতমান কলােমর জ
সবেচেয় বড় perimeter এর rectangle কত সটাও বর কের ফলেত পারেব। দখ বতমান base
আর কলাম িক fixed. সেহতু তামােক চ া করেত হেব তামার stack এ থাকা কান কলােমর
r − c সবেচেয় বিশ (c মােন stack এর কােনা একিট element কান কলাম থেক হেয়িছল
তা, আর r মােন তার উ তা)। কারণ আমােদর perimeter এর ফমুলা তা c′ − c + r এর মত (মত
বললাম কারণ এর সােথ হয়েতা 1-2 যাগ িহসােব আেছ বা িকছু সংখ া ন িহসােব থাকেত পাের)।
এই কাজ stack এ যখন কােনা একিট কলাম েবশ করােব তার সােথ সােথ বতমান সেবা r − c
ও রাখেলই হেয় যােব। অথাৎ stack এর িত element এ িলখা থাকেব য stack এ তার িনেচ
যারা আেছ ( স সহ) তােদর সবার মােঝ সেবা r − c এর মান কত।

১৬৩
১০.১ অ শীলনী
১০.১.১ সম া
Simple
ˆ UVa 1149 Bin Packing ˆ UVa 1610 Party Games
ˆ UVa 12545 Bits Equalizer ˆ UVa 11491 Erasing and Winning
ˆ UVa 1611 Crane ˆ UVa 1616 Caravan Robbers

ˆ UVa 1617 Laptop ˆ UVa 1618 Weak Key

ˆ UVa 11536 Smallest Sub-Array

Easy
ˆ UVa 177 Paper Folding ˆ UVa 11925 Generating Permutations
ˆ UVa 1612 Guess ˆ UVa 1153 Keep the Customer Satisfied
ˆ UVa 1615 Highway ˆ UVa 10570 Meeting with Aliens

ˆ UVa 1619 Feel Good ˆ UVa 1312 Cricket FieldCircles

Medium
ˆ UVa 1613 K-Graph Oddity ˆ UVa 1614 Hell on the Markets
ˆ UVa 1620 Lazy Susan ˆ UVa 1621 Jumping Around
ˆ UVa 1622 Robot ˆ UVa 1623 Enter The Dragon

ˆ UVa 10366 Faucet Flow ˆ UVa 11175 From D to E and back

ˆ UVa 1580 Pirate Chest ˆ UVa 1624 Knots

১৬৪
অধ ায় ১১

Geometry

UVa 190 Circle Through Three Points


সমস া: 2d ত িতনিট িব দওয়া আেছ যারা একই সরল রখার উপর অবি ত না। তামােক
এই িতনিট িব িদেয় যায় এরকম একিট বৃে র সমীকরণ ি ট করেত হেব। এই সম ার ে
বৃ েক ইভােব ি ট করেত হেব। এক- (x − h)2 + (y − k)2 = r2 এর ফেম, আেরকটা হল-
x2 + y 2 + cx + dy − e = 0 এই ফেম।

সমাধান: নানা উপােয় এই সম া সমাধান করা যায়। একটা িজিনস খয়াল কর- তুিম যিদ কােনা
একিট ফেম বৃে র সমীকরণ বর করেত পার তাহেল তােক অ ফেম পিরনত করা আসেল কােনা
ব াপারই না। তাই আমরা চ া করব যেকােনা একিট ফেম সমীকরণ বর করেত।
থম সমাধান- আমরা x2 + y 2 + cx + dy − e = 0 এই সমীকরেণ c, d, e এর মান বর
করেত চ া করব। আমােদর কােছ িতনিট িব আেছ। সই িতনিট িব র x আর y এর মান িল
যিদ আমরা এই সমীকরেণ বসাই তাহেল আমরা িতনিট equation পাব যখােন িতনিট unknown
মান থাকেব (c, d, e). আমরা খুব সহেজই এই িতনিট equation সমাধান কের িতনিট variable
এর মান বর কের ফলেত পাির। এজ তামরা determinate এর প িত ব বহার করেত পার,
gaussian elemination ব বহার করেত পার, হােত হােত সমাধান বর করেত পার।
ি তীয় সমাধান- আমরা (x − h)2 + (y − k)2 = r2 এই সমীকরেণ h, k, r এর মান সমাধােনর
চ া করব। থেমই আমরা িতনিট িব র x আর y এর মান বিসেয় িতনিট আলাদা সমীকরণ বর
কের ফিল। এই িতনিট সমীকরেণর format হেব h2 + ah + k 2 + bk + c − r2 = 0 যখােন
a, b, c হল িতনিট constant (মােন আমরা যিদ x আর y এর মান বসাই তাহেল a, b, c এর জায়গায়
িকছু constant মান ওয়ালা সমীকরণ পাব)। আমরা যিদ আমােদর একিট সমীকরণেক বািক ইিট
সমীকরণ হেত িবেয়াগ কির তাহেল আমরা ইিট সমীকরণ পাব যােদর ফরম াট হেব ah+bk+c = 0
টাইেপর। অথাৎ িট সমীকরণ আর িট variable (h, k). খুব সহেজই আমরা h আর k এর মান
বর কের ফলেত পারব। এরপর এেদর মান কােনা একিট সমীকরেণ বিসেয় আমরা r এর মান বর
কের ফলেত পারব। তাহেলই হেব।
তৃতীয় সমাধান- আমরা ি েকাণিমিতর R = abc 4A এই খািটেয় খুব সহেজই দ িতনিট
িব র ি ভুেজর পিরবৃে র ব াসাধ R বর কের ফলেত পারব (এখােন a, b, c হল ি ভুেজর িতনিট
বা র দঘ আর A হল ি ভুেজর ফল)। বৃে র ব াসাধ যখন জেন গিছ তখন আমরা দ িব
িতনিটর যেকােনা িটেত এই R ব াসােধর বৃ আঁকেত পাির যারা সেবা ইিট িব েত পর রেক
ছদ করেব। এই িট িব র কােনা একিটই হেব আমােদর সমাধান বৃে র ক । তরাং আমরা যিদ
িট বৃে র ছদ িব বর করেত পাির তাহেলই এই সম া সমাধান হেয় যায়। িট বৃে র ছদ িব
কীভােব বর করেত হয় তা আমরা া ািমং কে ট বইএ দেখ এেসিছ।

১৬৫
UVa 378 Intersecting Lines
সমস া: িট সরলেরখা দওয়া আেছ। ইনপুেট িতিট সরলেরখার জ তােদর উপর অবি ত িট
আলাদা িব দওয়া থাকেব। খয়াল কর, এখােন ইনপুট িক সরল রখা, সরল রখাংশ না। তা-
মােক বলেত হেব এই িট রখা কীভােব পর রেক ছদ কের। িতন রকম কািহনী হেত পাের- তারা
পর রেক ছদ কের না (যখন তারা parallel হয়), তারা জন একই সরল রখা িনেদশ কের, অথবা
তারা পর রেক একিট িব েত ছদ কের। বলেত হেব এই িতন ঘটনার কানটা ঘেট দ ইনপুেটর
ে । যিদ তৃতীয় ঘটনা হেয় থােক, তাহেল ছদ িব র coordinate ও িদেত হেব।
সমাধান: মেন কর থম রখার িব িট A ও B. আর ি তীয় রখার িব িট C ও D. থেম আমরা
থম িট কস াে ডল কির। আমরা ABC আর ABD এই িট ি ভুেজর signed ফল বর
কির। যিদ দিখ এই িট ফলই শূ , এর মােন এিট ি তীয় কেস পেড়। কারণ ABC ি ভুেজর
ফল শূ মােন A, B, C একই সরল রখায়। আবার A, B আর D ও যিদ একই রখায় হয় তার
মােন A, B, C আর D চারিট িব ই আসেল এক রখায়।
যিদ এই িট ি ভুেজর signed ফল শূ না হয়, িক এেদর signed মান যিদ সমান হয়
তার মােন AB আর CD সমা রাল। এখােন signed ফল তুলনা করা জ ির। কারণ এমন তা
হেতই পাের য AB এর ই পােশ C আর D িক তারা AB এর সােথ সমান ফল তির কের।
িক সে ে েতা AB আর CD পর রেক ছদ কের। তরাং আমােদরেক signed ফল তুলনা
করেত হেব। আর ফল সমান হেল য তারা সমা রাল হয় এই উপপাদ তা ুেলর বইএ আেছ
তাই না?
আর যিদ উপেরর কােনা কস না হয় তাহেল তারা পর রেক ছদ কের। িট রখা দওয়া আেছ,
তােদর ছদ িব কীভােব বর করেত হেব তা া ািমং কে ট বইেয় আমরা দেখিছ। তামরা চ া
কর vector বা প ারােমি ক ফেমর মাধ েম এর সমাধান করার।

UVa 460 Overlapping Rectangles


সমস া: িট axis parallel আয়তে দওয়া আেছ (ইনপুেট িতিট আয়তে ে র ই কাণার
coordinate দওয়া থাকেব)। বলেত হেব তােদর intersection (intersection এর ফল
শূ এর থেক বিশ হেত হেব) আেছ িকনা। থাকেল সই intersection আয়তে িটর ই কাণার
coordinate ি ট করেত হেব।
সমাধান: এই সম াটা খুব কিঠন মেন হেত পাের। তুিম যিদ case by case িচ া কর তাহেল
িনঃসে েহ এটা খুব কিঠন সম া। িক এর খুব সহজ একটা সমাধান আেছ। মেন কর থম আয়-
তে ে র িনেচর বাম কাণার coordinate (Ax1 , Ay1 ) আর উপেরর ডান কাণার coordinate
(Ax2 , Ay2 ) (Ax1 < Ax2 আর Ay1 < Ay2 ). একই ভােব ি তীয় আয়তে েক B ারা কাশ
কির। তাহেল intersection আয়তে েক আমরা যিদ C ারা কাশ কির তাহেল আমরা িলখেত
পাির Cx1 = max(Ax1 , Bx1 ), Cy1 = max(Ay1 , By1 ), Cx2 = min(Ax2 , Bx2 ),
Cy2 = min(Ay2 , By2 ). কন? মেন কর A আর B এর ধু বাম বা িচ া কর। ধর A এর বাম
বা B এর বাম বা র বােম আেছ। তাহেল তুিম একটু িচ া কের দখ তা য যিদ A আর B এর
intersection থােক তাহেল সই intersection rectangle এর বাম বা কাথায় থাকেব? সহজ,
A আর B এর বাম বা র মােঝ যটা ডােন আেছ সখােন, মােন B এর বাম বা েত। কন? কারণ A
এর বাম বা হেত B এর বাম বা পয েত তা কােনা intersection থাকেত পাের না, তাই না?
একই ভােব আমরা C এর িনচ, উপর, আর ডান বা বর করেত পাির। িক আমরা কীভােব বুঝব
য আমােদর overlap হেয়েছ িকনা? সহজ, তুিম C এর বাম ডান উপর িনচ সব বা বর কের
ফেলছ। এখন চক কের দখ য, C এর িনেচর বা িক আসেলই C এর উপেরর বা থেক িনেচ
িকনা। যিদ নাহয় এর মােন C বেল আসেল িকছু নাই। একইভােব তামােক দখেত হেব C এর বাম
বা িক আসেলই C এর ডান বা থেক বােম িকনা। খয়াল কর, িকছু ণ আেগ আমরা বর কেরিছ
য C এর যিদ বাম বা থােক তাহেল সটা কাথায়, C এর ডান বা কাথায় এরকম উপর িনচও বর

১৬৬
কেরিছ। এরপর আমােদরেক চক কের দখেত হেব য, আমরা য বর কেরিছ C এর ডান বাম উপর
িনচ কাথায়, তা িক আসেলই হেত পাের? যিদ হেত না পাের তার মােন C বলেত কউ নাই। আর
যিদ হেত পাের তাহেল তা আমরা তার ই কাণার coordinate পেয় গিছ। এখন তামােদর কাজ
হেব কাগজ কলেম িকছু ছিব এঁেক এই েসস য কাজ কের তা িনেজেক convince করা। িবেশষ
কের, যখন কােনা intersection থােক না তখন এই প িত কন কাজ কের তা বুঝাটাই পূণ।

UVa 10175 Sphere


সমস া: িট গালক এর ব াসাধ r1 , r2 এবং তােদর ক েদর মধ বতী র d দওয়া আেছ। বলেত
হেব তােদর িমিলত িজিনেসর আয়তন আর পৃ তেলর ফল কত। বলা আেছ য d > r1 , r2 এবং
d < r1 + r2 হেব। সই সােথ এই ব িটর ভর বলা আেছ। বলেত হেব এই ব িট একিট তরল পদােথ
ডুবেব না ভাসেব। ব িটর এবং তরেলর মেধ র specific gravity দওয়া আেছ।

সমাধান: আমরা যিদ ব িটর আয়তন বর করেত পাির তাহেল তােক যিদ আমরা specific gravity
এর সােথ ন কির তাহেল আমরা একই আয়তেনর তরেলর ভর পাব। আর আমরা এই তরেলর ভর
আর আমােদর ব র ভর তুলনা করেলই বুঝেত পারব য আমােদর ব িট তরেল ভাসেব না ডুবেব।
d এর িলিমেটর িদেক তাকাও। িক বুঝলা? িট গালেকর ক একিট আেরকিটর ভতের থাকেব
না। এখন িট গালক পর রেক ছদ কের যই বৃ তির কের তার ভতর িদেয় একিট তল আঁিক।
এর ফেল এই তেলর ই িদেক িট গালেকর অংশ থাকেব। মেন কর তেলর বাম িদেক আেছ A
গালক আর ডান িদেক B গালক। আসেল তেলর বাম িদেকও B গালেকর িকছু অংশ থাকেব, তেব
তা স ূণ ভােব A গালেকর ভতের থাকেব। এই য তেলর বাম িদেক B গালেকর িকছু অংশ য A
গালেকর ভতের আেছ তােক B গালেকর spherical cap বেল। তামরা চাইেল নেট সাচ িদেলই
এর আয়তন আর পৃ তেলর ফল বর করেত পারবা। অথবা চাইেল আমরা হােত হােত calculus
ব বহার কের এই মান িলর ফমুলা বর করেত পাির। আমরা যিদ এই spherical cap এর আয়তন
বর করেত পাির তাহেল পুেরা গালেকর আয়তন হেত তা িবেয়াগ কের কােনা গালেকর যই অংশ
বাইের আেছ তার আয়তন বর করেত পারব।
আমরা ধের িনেত পাির আমােদর দওয়া িট গালেকর একিট আেছ মূল িব েত আেরকিট আেছ
(d, 0, 0) ত। এবার তুিম XY তল ক না কর। এখােন P, Q ক িবিশ িট বৃ দখেত পােব
যােদর ব াসাধ r1 , r2 আর তােদর মধ বতী র d. মেন কর তারা A আর B িব েত ছদ কের। AB
লাইন টান। এটা তা জানই য AB লাইন বৃে র ক িটর সংেযাগকাির লাইন PQ এর উপর ল ।
মেন কর PQ আর AB এর ছদিব D. আমরা PD আর QD বর করব। আমরা যিদ PD জািন
তাহেল P গালেকর যই অংশ Q গালেকর ভতের আেছ তার আয়তন এবং পৃ তেলর ফল বর
কের ফলেত পারব। একটা িজিনস, তামরা হয়েতা খয়াল কেরছ য আিম P আর Q ক একবার বৃ ,
একবার গালক আর একবার তােদর ক বলিছ। ক বলােত আশা কির আিম কােনা অপরাধ কের
ফিল নাই। তেব অেনেক গালক আর বৃ এই িট ব বহার করায় নােখাশ হেত পার। আমােদরেক
আসেল P আর Q হেত তােদর ছদ তেলর র (বা AB লাইেনর র ) বর করেত হেব।
যাই হাক। তাহেল আমােদর কােছ P A = r1 আেছ, QA = r2 আেছ আর P Q = d আেছ।
আমােদর বর করেত হেব P D এর মান। আমরা যিদ APQ ি ভুেজর উ তা AD (PQ ক ভুিম
ধের) বর করেত পাির তাহেলই িক হেয় যায় কারণ P D2 = P A2 − AD2 . যেহতু APQ
ি ভুেজর িতনিট বা জানা আেছ সেহতু তামরা হরেনর ফমুলা ব বহার কের সহেজই ি ভুেজর
ফল বর করেত পারবা। আবার ি ভুেজর ভুিম উ তা এর ফমুলা ব বহার কের উ তা AD এর
মান বর করেত পারবা যেহতু আমােদর ভুিম PQ জানা। অথবা চাইেল PAD আর QAD ি ভুজ
িটর িপথােগারােসর ফমুলা যিদ িলখ সখান থেকও PD এর মান বর করেত পারবা। মাট কথা
আমরা PD এর মান বর করেত পারব। খয়াল কর PD হল ক হেত cap এর তেলর র ।
তাহেল আমরা আমােদর সম ােক িট গালক হেত একিট গালেক পিরবতন করেত পাির।
আমােদর নতুন সম া হেব- আমােদর একিট গালক দওয়া আেছ যার ব াসাধ r, এবং ক হেত

১৬৭
এর cap এর তেলর র h দওয়া আেছ। বলেত হেব এই cap এর আয়তন কত আর পৃ তেলর
ফল কত।
এবার ক াল লাস এর পালা। আমরা আমােদর কাজ সহজ করার জ ধের নব গালকিট মূল
িব েত আেছ এবং আমরা x = h হেত x = r এই অংশটু র আয়তন এবং পৃ তেলর ফল বর
করেত চাই। এখােন পৃ তল বলেত আমরা ধু গালেকর বাইেরর অংশটু র কথা বলিছ।
যেহতু আমরা x = h হেত x = r পয অংেশর আয়তন জানেত চাই সেহতু আমােদর
integration এর িলিমট হেব h থেক r. আমরা এই h থেক r অংশেক ছাট ছাট dx অংেশ
ভাগ কির। এই ছাট ছাট অংশেক আমরা cylinder িহসােব ক না করেত পাির। কন? আমােদর
গালেকর ক মূল িব েত আেছ। এখন তুিম x = 0 আর x = 1 ইিট plane আঁক। এরপর এই
ই plane ক খুব কােছ আেনা। Plane এর ভতেরর এই অংশটু দখেত cylinder এর মত তাই
না? কারণ এর বাম পােশর অংশ একিট বৃ , ডান পােশর অংশ একিট বৃ । যিদ এই ই plane
খুব কােছ থােক তাহেল আমরা বলেত পাির এই বৃ িটর ব াসাধ ায় সমান, আর সমান হেলই
তা এিট একিট cylinder হয় তাই না? যাই হাক √তাহেল একিট িসিল ডােরর উ তা হেব dx আর
ব াসাধ হেব ∫y. কােনা একিট x এ y এর মান হেব r2 − x2 . তাহেল আমােদর integration এর
r
ফমুলা হেব h f (x) যখােন f (x) = π(r2 − x2 ) dx হেব যিদ আমরা আয়তন বর করেত চাই

আর f (x) = 2π r2 − x2 dx হেব যিদ আমরা পৃ তেলর ফল বর করেত চাই। আশা কির
এরকম integration কীভােব করেত হয় তা তামােদর জানা আেছ? ভুেল িগেয় থাকেল বা না জানা
থাকেল calculus বই পড়েত হেব!

UVa 10522 Height to Area


সমস া: একিট ি ভুেজর িতন কাণা হেত তােদর িবপরীত বা র উপর আঁকা লে র উ তা দওয়া
আেছ। তামােক ি ভুেজর ফল বলেত হেব। যিদ এমন কােনা ি ভুজ স ব না হয় যার এই
িতনিট উ তা আেছ, তাহেল বল য ইনপুেট ভুল আেছ।
সমাধান: এরকম জ ািমিত সম ার ে কােনা বাধা ধরা িনয়ম থােক না। য যভােব পাের সমাধান
করেত পাের। হয়েতা ি ভুেজর উ তা দওয়া আেছ, ি ভুেজর ফল বর করেত হেব- এরকম
ফমুলা আেছ িক কে ট সমেয় তুিম তা আর ই টারেনট পাবা না। তরাং িনেজেক সমাধান করেত
হেব।
মেন কর Ha , Hb আর Hc হল যথা েম A, B, আর C হেত িবপরীত বা র উপর আঁকা লে র
উ তা। আরও মেন করা যাক a, b, c হল যথা েম A, B আর C িব র িবপরীত বা র দঘ । আমরা
বলেত পাির a × Ha , b × Hb আর c × Hc সমান, কারণ এরা েত েক ি ভুেজর খ ফেলর ি ন।
এখান থেক আমরা বলেত পাির a : b : c এর মান 1/Ha : 1/Hb : 1/Hc এর সমান বা অ
ভােব এমন একিট k আেছ যন a = k/Ha , b = k/Hb , c = k/Hc . এখন আমরা হরেনর ফমুলা
ব বহার কের ি ভুেজর ফল বর করেত পাির। এর পর a×H2
a
এর সােথ সই ফলেক একে
equation এ বসােল আমরা k এর মান বর করেত পারব। আর k এর মান বর করেল হরেনর
ফমুলায় সই মান বিসেয় আমরা ি ভুেজর ফল বর করেত পারব! আর কখন ইনপুট ভুল?
হরেনর ফমুলায় তা একটা square root আেছ। তুিম যিদ দখ এই square root এর ভতের
negative সংখ া চেল আসেছ তার মােন হেব ইনপুট ভুল। অেনক সময় দখা যায় square root
এর ভতের একািধক টাম negative চেল আেস আর তারা ন কের positive হেয় যায়। সসব
ে তামরা উ র বর কের দখেব য এই উ েরর ি ভুেজর জ িক আসেলই ইনপুেটর height
িল পাওয়া স ব িকনা।

UVa 10709 Intersection is not that Easy


সমস া: িট সরলেরখা বা িট সরল রখাংশ বা একিট সরল রখা আর আেরকিট সরল রখাংশ
দওয়া আেছ। বলেত হেব তােদর মেধ সবেচেয় কম র কত।

১৬৮
সমাধান: Vector বা প ারােমি ক ফেমর মাধ েম িট রখা ছদ কের িকনা বা ছদ করেল সই ছদ
িব িক তা জানার যই প িত সই প িত খািটেয় আমরা সহেজই বর করেত পাির দ রখা বা
রখাংশ দর মােঝ intersection হয় িকনা বা হেল intersection িব িট কানিট।
এখন আরও িকছু কস বািক থােক। একিট কস হল দ চারিট িব ই একই সরল রখার উপর
অবি ত। এই ে যিদ ইনপুেটর কউ সরল রখা হয় তার মােন তােদর মােঝ র 0. আর যিদ
তা না হয়, তার মােন আমােদর ইনপুট িট সরল রখাংশ। সে ে দখেত হেব কােনা রখাংেশর
কােনা একিট া িব অ িটর ভতের আেছ িকনা, থাকেল 0. না থাকেল আমরা জািন এক
রখাংেশর এক া আর আেরক রখাংেশর আেরক াে র মােঝ সবেচেয় কম র পাওয়া যােব।
িক কান া িট? এটা ক কের খুঁেজ বর করার থেক আমরা িতিট pair ( মাট চার ভােব)
চ া কের তােদর মােঝ সবেচেয় কমটা িনেলই পাির।
আেরকিট কস হল যখন দ রখা/ রখাংশ িট সমা রাল হয়। একই ভােব আমরা দিখ জেনর
মােঝ কউ রখা আেছ িকনা। থাকেল আমরা অপর রখা/ রখাংেশর যেকােনা া হেত অপর রখার
উপর ল টানব। সটাই আমােদর optimal র হেব। আর যিদ িটই রখাংশ হয়? তাহেল একটু
ঝােমলার। থমত আমরা া িব র িবিভ ভােব pair িনেয় চ া করব। এরপর আমরা িতিট া
িব হেত অপর রখাংেশর উপর ল টেন দখব য লে র া িব অপর রখাংেশর উপর আেছ
িকনা। থাকেল সই ল র একিট candidate হেব। এরকম সকল candidate এর মােঝ থেক
আমােদর সচেবেয় কম মান িনেত হেব।
আসেল আমােদর বািক যই কস আেছ- দ ইনপুট এর রখা/ রখাংশ পর রেক ছদ কের
না আবার parallel ও না- সে ে ও উপেরর ি তীয় কস খাটেব। অথাৎ আমরা া িব েদর pair
িনেয় তােদর র দখব আর িতিট া হেত ওপর রখাংেশ ল টানব এবং দখব সই লে র
পাদ িব ওপর রখাংশ/ রখার উপর আেছ িকনা।
এেতা গল case analysis. বািক থাকল কােনা একিট িব হেত কােনা একিট রখার উপর
ল টানা। কীভােব করবা? খুব একটা কিঠন না যিদ তুিম parametric equation বা vector
ব বহার কর। মেন কর তুিম C হেত AB রখার উপর ল টানবা। মেন কর AB এর উপর যেকােনা
একিট িব P. আমরা parametric form ব বহার কের P ক িলখেত পাির A + (B − A)t. এখন
যিদ CP আর AB ল হয় তাহেল আমরা িলখেত পাির CP.AB = 0. এখান থেক আমরা t এর
মান সমাধান করেত পাির। একটা উদাহরন কের দখান যাক। মেন কর আমরা C(0, 2) হেত AB
এর উপর ল টানেত চাই যখােন A(−5, 0) আর B(1, 0). তাহেল আমরা AB এর উপর যেকােনা
িব P এর parametric form িলখেত পাির A + (B − A)t বা (−5, 0) + [(1, 0) − (−5, 0)]t
বা (−5, 0) + (6, 0)t বা (1, 0)t বা (t, 0). এখন যিদ CP আর AB ল হয় তাহেল আমরা িলখেত
পাির CP.AB = 0 বা [P − C].[B − A] = 0 বা [(t, 0) − (0, 2)].[(1, 0) − (−5, 0)] = 0 বা
(t, −2).(6, 0) = 0 বা 6t = 0 বা t = 0. তাহেল P এর মান পেত আমরা P এর parametric
form (t, 0) ত t এর মান বসাই। তাহেল P হেব (0, 0). এখােন অব ই অেনক বিশ শূ নওয়ােত
আমােদর িহসাব িনকাশ অেনক সহজ হেয় িগেয়েছ িক আশা কির এেত উদাহরন বুঝেত িবধা হেব।
তুিম এই িহসাব িল যেকােনা A, B, C এর জ করেত পার। তাহেল C হেত AB এর উপর লে র
পাদ িব পেয় যােব।

UVa 10979 How many triangles?


সমস া: সেবা দশিট সরল রখাংশ থাকেব। বলেত হেব িচে কয়িট ি ভুজ আেছ। িতনিট িব
সমৈরিখক হেল তারা ি ভুজ তির কের না।
সমাধান: জ ািমিতর সম া য সবসময় জ ািমিতক ফমুলা িদেয় সমাধান করেত হেব তা না। মােঝ
মােঝ াফ এর মত কেরও সমাধান হেত পাের। আমরা থেমই িতিট রখাংশেক অ সকল র-
খাংশেদর সােথ ছদ করাব। এরকম কের সকল ছদ িব আর রখাংশেদর া িব িমেল তির
হেব আমােদর vertex এর সট। এরপর আমরা দখব িতিট রখাংেশর উপর আমােদর কান কান
vertex আেছ। তােদর মােঝ আমরা edge দব। আসেল আমােদর ছদ িব িক বিশ হেব না।

১৬৯
তাই আমরা িতনিট কের vertex িনেয় চক কের দখেত পাির তারা সমৈরিখক িকনা। যিদ না হয়
তাহেল তােদর িত িটর মােঝ edge আেছ িকনা। ধু এখােন একটা িজিনস খয়াল করবা য একই
িব েক তুিম যন একািধক বার vertex িহসােব ক না কের না বস। কারণ দখা যােব িট রখার
ছদ িব আর অ িট রখার ছদ িব একই হেত পাের। তরাং তুিম যখন vertex এর সট বর
কেরছ তখন সকল duplicate ধের ফেল দেব।

UVa 10674 Tangents

সমস া: িট বৃ দওয়া আেছ। তামােক এই িট বৃে র মােঝ যত িল শক টানা স ব টানেত


হেব। িতিট শক এর জ বলেত হেব সই শক এর দঘ কত আর সই শক বৃ িটেক
যই িট িব েত শ কের তােদর coordinate ি ট করেত হেব। যিদ বৃ িটর মােঝ অসংখ
শক থােক তাহেল -1 ি ট করেত হেব।

সমাধান: অেনক কস িচ া করেত হেব। এেক এেক আসা যাক।


থেম কখন অসংখ শক থাকেব তা িচ া কর। যখন িট বৃ একই তখন। তরাং থেমই
এই কস ক িবদায় কের িদেত হেব।
এরপেরর কস, যখন একিট বৃ স ূণ ভােব আেরকিট বৃে র ভতের থাকেব (এমনিক শও
করেব না) তখন তােদর মােঝ কােনা শক থাকেব না।
এরকম আেরকটা কস আেছ। যখন বৃ িট ভতর থেক শ করেব তখন তােদর মা একিট
শক থাকেব। শক এর দঘ হেব 0 আর সই coordinate বর করাও খুব একটা কিঠন না।
কারণ শ িব বৃে র ক েয়র সংেযাগ রখার উপের থােক।
এছাড়া বাদ বািক সব কেস উপের িনেচ িট শক থাকেবই। কীভােব এই শেকর সব তথ
বর করা যায় তা পের দখব। আপাতত বাদ বািক কস িল বর কের ফিল।
এর পেরর কসিট হেব যখন বৃ িট বাইের থেক শ কের আেছ। তখন তােদর আরও একিট
শক আেছ। আর এর তথ বর করা খুব একটা কিঠন না।
আর একিট মা কস, আর তাহল একিট বৃ আেরকিট বৃে র স ূণ বাইের। সে ে তােদর
মােঝ আরও ইিট শক থাকেব যটা দখেত িকছুটা X এর মত মেন করেত পার।
এখন শক িল বর করা যাক। আিম ধু উপেরর আর িনেচর শেকর তথ বর করব। X
এর মত শেকর তথ আশা কির তামরা একই ভােব িনেজরা বর করেত পারেব।
মেন কর আমােদর বৃ িটর ক হল O1 , O2 , তােদর ব াসাধ r1 , r2 . আমরা আমােদর িবধার
জ মেন করব r1 ≤ r2 . আরও মেন কর উপেরর য শক তা এই বৃ িটেক P1 , P2 ত ছদ
কের। আমােদর কাজ P1 P2 এই দঘ বর করা আর P1 , P2 এই িব িটর coordinate বর
করা। এই কাজ করেত পারেল তুিম িনেচর শেকর জ ও একই কাজ করেত পারেব। এখন O1
থেক O2 P2 এর উপর ল টান, মেন কর এেদর ছদ িব M . এখন O1 O2 M এই ি ভুেজর িদেক
তাকাও। এিট একিট সমেকাণী ি ভুজ, যার িট বা তুিম জান, O1 O2 এই র তুিম জান কারণ তুিম
এই িট িব র coordinate জান। আবার তুিম O2 M = r2 − r1 জান। তরাং তুিম খুব সহেজই
̸ O1 O2 M কােণর মান বর করেত পারবা। একটু খয়াল রখ যন তামার ফমুলা O2 M = 0
হেলও যন কাজ কের। তুিম যিদ ̸ O1 O2 M = ̸ O1 O2 P2 এর মান জান তাহেল ̸ O2 O1 P1 এর
মানও জান কারণ O1 P1 আর O2 P2 সমা রাল। এর মােন P1 িব িট O1 সােপে কত angle
তির কের আেছ তা তুিম জান, আর সই তথ থেক তুিম (r cos θ + xcenter , r sin θ + ycenter )
ফমুলা(polar coordinate এর ফমুলা) ব বহার কের P1 এর coordinate খুব সহেজই বর কের
ফলেত পারেব। একই ভােব P2 ও বর করেত পারেব। আর ই াে র coordinate বর করেত
পারেল তা তােদর র ও বর করেত পারবা।

১৭০
Timus 1697 Sniper Shot
সমস া: একিট 3d coordinate িসে েম একজন sniper বেস আেছ। Sniper এর পিজশন
coordinate দওয়া আেছ, ধরা যাক S. একটা লাক A িব হেত B িব েত যােব। A এবং B িব-
র coordinate দওয়া আেছ এবং এই িট িব ই XY ন এর উপর অবি ত। এছাড়াও এখােন
n িট িবি ং (n ≤ 100) আেছ। িতিট িবি ং আয়তাকার ঘনক (rectangular parallelepiped).
এেদর িনেচর তল XY েনর সােথ আেছ। ইনপুট িহসােব XY েন তার িবপরীত ই া এবং
এই িবি ং এর উ তা দওয়া আেছ। Sniper এর িলর বগ infinity. তরাং স লাকেক দখেত
পাওয়া মা ই িল করেত পারেব। লাকিট A হেত B ত যায়। বলেত হেব কান িব েত সবার আেগ
তােক মারা যােব। খয়াল রাখেত হেব তামার িল যন কােনা িব ীং এর ভতর িদেয় না যায়,
চাইেল শ করেত পারেব। আরও বলা আেছ AB রখাংশটা কােনা িব ীং এর ভতর িদেয় যায় না
এবং sniper এর পিজশনও কােনা িবি ং এর ভতর হেব না।

সমাধান: বশ কিঠন সম া। এধরেনর সম া সহেজ কউ কাড করেত চাইেব না। িবেশষ কের
কে ট সমেয়। কারণ এসব সম ায় দখা যায় অেনক ধরেনর কস হয় এবং কাডও অেনক বড় হয়।
তরাং দ না হেল এধরেনর সম ায় AC পাওয়া ায় অস ব। সমাধােনর মূল আইিডয়া িক কিঠন
না। িক খয়াল করেল দখবা এই সমাধােন অেনক িল component আেছ, িতিট component
িনেজরা জিটল হওয়ায় দখা যায়, ব ধরেনর corner case আমরা overlook করিছ। এরপর আবার
দখা যােব precision error িনেয়ও মাথা ঘামােত হে । এজ ই এই সম ােক বশ কিঠন বেলিছ।
তেব একটা িজিনস ভাল য, এধরেনর সম ার ে আমােদর time complexity িনেয় খুব একটা
ভাবেত হয় না।
থেমই দখ য S িক AB রখাংেশ আেছ িকনা। থাকেল A তই মারা স ব। কারণ আমােদর
বলা আেছ য AB রখার উপর কােনা িবি ং থাকেব না। আেরকটা কস হেত পাের S িব AB
রখার উপের (িক AB এর উপর না)। সে ে দখেত হেব য S আর A বা B এর মােঝ িক কােনা
িবি ং আেছ িকনা।
তা না হেল আমরা SAB িদেয় একিট plane ক না করব। আমরা যিদেক ট করব তা িক এই
েন আেছ। সম া হল আমােদরেক বর করেত হেব কান কান িদেক ট করেল AB লাইনেক টাচ
করার আেগই কােনা একিট িবি ংেক িহট করেব। সজ আমরা িতিট িবি ং এর জ বর করব
সই িবি ং আর SAB েনর ছদ অংশ। যেহতু এই ছদ অংশ AB এর উপের থাকেব না সেহতু
হয় তা SAB েন AB এর যিদেক S আেছ সিদেক আেছ নাহয় িবপরীত িদেক আেছ। আবার
যিদেক S আেছ সিদেক থাকেলও হয়েতা দখা যােব S এর পছন িদেক আেছ। আমরা এইসকল
কস ে ডল কের বর করব িতিট িবি ং এর জ AB রখার কান কান অংশ S দখেত পায়
না। এর পর এই দখেত পায়না অংশ িল আর AB িনেয় একটু িহসাব করেলই আমরা থম কান
িব দখেত পায়, বা আদউ কােনা িব দখেত পায় না তা বর করা যােব।
এখন চল এেককিট অংশ কীভােব সমাধান করা যায় তা দখা যাক।
থম অংশ- িবি ং এর সােথ SAB এর ছদ অংশ কীভােব বর করবা। যেহতু িতিট িবি ং
convex সেহতু যেকােনা একিট েনর সােথ তার ছদ অংশ একিট convex polygon হেব। যিদ
িবি ং concave হত তাহেল িক এই কথা সত হত না। তরাং এই আইিডয়া কােজ লাগােয় আমরা
আমােদর সমাধানেক একটু সহজ করেত পাির। আমরা িতিট িবি ংেক এখন থেক 12 িট 3d লাইন
সগেম ট িহসােব ক না করব (অথাৎ ঘনেকর 12িট বা )। আমরা এই িতিট সগেম টেক SAB
েনর সােথ intersect করাব। এরপর যই intersection িব িল পলাম তােদর িনেয় একিট
convex polygon বানাব। তাহেলই আমরা আমােদর 3d ে মেক 2d ত কনভাট করেত পারব।
এই থম অংেশর আবার িট অংশ। থম অংশ- একিট 3d লাইেনর সােথ েনর intersection
করা। এখােন নানা কস থাকেত পাের, যমন হয়েতা 3d লাইন েনর parallel, তরাং তােদর
কােনা intersection নই। বা দখা যােব, পুেরা লাইন সগেম টই এই 3d েনর উপর আেছ।
এই কস িট তামােক খয়াল রাখেত হেব। আর যিদ এই িট কেসর কােনািটই নাহয় এর মােন
তুিম parametric equation ব বহার কের বশ সহেজই লাইেনর সােথ েনর intersection বর
করেত পারেব। এরপর তামােক দখেত হেব এই intersection িব িক আেদৗ লাইন সগেমে টর
উপর অবি ত িকনা। ি তীয় অংশ হল- যখন তুিম সব intersection িব পেয় যােব তখন তােদর

১৭১
convex hull বানােত হেব।
এবার ি তীয় অংশ- িতিট িবি ং এর জ আমরা কীভােব বর করব AB সগেমে টর কান
কান অংশ সই িবি ং ঢেক রেখেছ। খয়াল কর, এখােন িবি ং মােন 3d না, আমরা এর আেগর
অংেশ এেক 2d বািনেয় ফেলিছ। এখন তুিম S এর সােথ িবি ং এর িতিট শীষিব র সংেযাগকারী
লাইন টান। ধরা যাক আমরা এখন িবি ং এর T িব িনেয় কাজ করিছ। তাহেল তুিম দখ ST এর
বিধত অংশ (T এর িদেকর) AB সগেম টেক ছদ কের িকনা। যিদ কােনা শীেষর জ ই ছদ না
কের তার মােন আমােদর এই িবি ং িনেয় কােনা কাজ নই। এই য ST এর বিধত অংশ, AB
সগেম ট এসব য special condition, তুিম যিদ parametric ফেম বা vector ফেম এই লাইন
লাইন intersection বা line plane intersection এসব সমাধান কর তাহেল খুব সহেজই তুিম
parameter এর মান দেখ বুঝেত পারেব য এটা িক লাইন সগেম ট এর উপর আেছ িকনা, বা
T এর িদেকর বিধত অংেশ আেছ িকনা ইত ািদ। এখােনও একই রকম িকছু সম া আেছ, যমন
হয়েতা ST আর AB সমা রাল ইত ািদ। িক এসব ঝােমলা শেষ আমরা পাব য ST এর বিধত
অংশ এর সােথ AB এর ছদ িব । এখােন একটা িজিনস, তাহল ST আর AB যিদ সমা রাল হয়
তাহেল আসেল সটা কান িদেকর infinity তা বর করেত হেব। A এর িদেকর না B এর িদেকর। এর
জ যা করবা তাহল ST এর সােপে SA এর কান আর SB এর কাণ দখবা, যার জ কােণর
মান কম তার িদেকর infinity ক ছদ িব িহসােব িনবা। এবার িবি ং এর সকল শীেষর জ ছদ
িব পেল তুিম একদম বােমর ছদ িব আর একদম ডােনর ছদ িব িনেয় একিট সগেম ট গঠন
করেব যা AB লাইন এর উপর অবি ত। বা অ ভােব বলা যায়- এই লাইন সগেম ট এর অংশটু
এই িবি ং িদেয় ঢেক থাকেব।
এবার তৃতীয় অংশ- ি তীয় অংশ শেষ আমােদর ে ম এখন 1d ত চেল এেসেছ। িতিট িবি ং
এর জ আমরা এখন AB লাইেনর উপর একিট কের সগেম ট পেয়িছ, যা S থেক দখা যায় না।
হল AB এর কান িব থম S থেক দখা যায়। খয়াল কর, এমন হেত পাের য, একিট
িব [A, C] অংশ ঢেক রেখেছ আেরকিট িবি ং [C, B] অংশ ঢেক রেখেছ (A < C < B).
সে ে িক তুিম আসেল C িব দখেত পাও। কারণ বেলেছ য তামার িল িবি ংেক শ
করেত পাের। িক যিদ এখােন আেরকটা িবি ং থাকত যা [A, B] পুরটা ঢেক রাখত, তাহেল িক
C দখেত পারেব না। িক এই িট ে ই তুিম িক A আর B িট ানই দখেত পােব। তরাং
এইসকল কস মেন রেখ আমােদর সমাধান করেত হেব। আমরা এই সগেম ট িলর া িলেক
event িহসােব ক না কির। A এর িদেকর event হল starting আর B এর িদেকর event হেব
ending. A এর িদেকর event িল আেগ থাকেব এইভােব আমরা সকল event সট করব। যিদ
একই িব েত একািধক event থােক তাহেল আমরা ending ক আেগ রাখব আর starting ক
পের। এভােব সকল event ক সট কির। এরপর এই সট করা event িলেক এেক এেক েসস
কির। আমরা একটা counter রাখব যার মান েত শূ । যখন আমরা starting event পাব তখন
তােক এক বাড়ােবা, আর যখন ending event পাব তখন এক কমাব। এই এক বাড়ােনার আেগ বা
এক কমানর পের আমরা দখব য counter এর মান শূ িকনা। যিদ শূ হয় এর মােন এিট একিট
candidate িব । আমরা দখব এই িব AB সগেম ট এর উপের আেছ িকনা। থাকেল এই িব ই
সমাধান। িক এরকম যিদ কােনা িব না পাও তার মােন কােনা সমাধান নই। এখােন একটাই
িজিনস খয়াল রাখেত হেব, আর তাহল আমােদর এর আেগর অংেশর infinity যন এখােন িঠক মত
া ডল হয়।

UVa 10283 The Kissing Circles


সমস া: একিট বড় বৃ আেছ R ব াসােধর। তােত n িট (n ≤ 100) ছাট ছাট বৃ আেছ যা বড়
বৃ েক শ কের আেছ এবং ছাট বৃ লও পাশাপািশ শ কের আেছ, িঠক পাশাপািশ গাল কের
দাঁড়ানর মত। বলেত হেব এই ছাট বৃে র ব াসাধ কত। ভাল হয় যিদ তামরা মূল statement এর
ছিব দখ।
সমাধান: মুলসম ায় আরও িট আউটপুট চেয়েছ িক তুিম যিদ ছাট বৃে র ব াসাধ বর করেত

১৭২
পার তাহেল বািকটু ডাল ভাত।
এই ধরেনর সম ােক বলা হয় packing সম া। এখােন তামােক ছাট বৃে র ব াসাধ বর কর-
ত হেব যন সব বৃ একে pack হেয় থােক। এধরেনর সম ার ে শ িব আর symmetry
ক খুব ভাল কের খয়াল করেত হয়। আর এধরেনর সম ায় ায়ই দখা যায় binary search ব -
বহার করেল সম া অেনক সহজ হেয় যায়।
যমন এই সম ার ে , আমরা ছাট ছাট বৃে র ক িলেক যাগ কের একিট সম n ভুজ
(n sided regular polygon) বানােত পাির যার ক হেব বৃে র ক । যিদ n < 3 হয় তাহেল
িক িঠক মত সমভুজ তির হেব না। তরাং তুিম ওেদরেক আলাদা কের া ডল কের ফল। তাহেল
আমরা এখন মেন করেত পাির n ≥ 3. এখন আমােদর যা করেত হেব তা হল এই সমভুেজর সােথ
বড় বৃে র স ক বর করেত হেব। একটা খুব সহজ স ক হল এেদর ক িট একই। এখান থেক
আমরা বলেত পাির, ক থেক সমভুেজর কােনা িব র রে র সােথ ছাট বৃে র ব াসাধ যাগ
করেল আমরা বড় বৃে র ব াসাধ পাব। এই সমীকরণ সমাধান করেলই আমরা ছাট বৃে র ব াসাধ
পেয় যাব।
মেন কর আমােদর ছাট বৃে র ব াসাধ r. তাহেল সমভুেজর এক বা র দঘ হেব 2r. এখন এই
বা র দেঘ র সােথ ক হেত সমভুেজর শীেষর রে র স ক িক? আমরা সমভুেজর একিট বা র
িট া েক কে র সােথ যাগ কির। যেহতু সমভুেজ n িট বা িমেল কে 2π কাণ তির কের
সেহতু একিট বা 2πn কাণ তির করেব। আর এই য বা িট কে র সােথ য ি ভুজ তির কের
তা একিট সমি বা ি ভুজ। আমােদর ল এই সমি বা ি ভুেজর অ িট বা র দঘ বর করা
যখােন সমভুেজর বা র দঘ 2r. কীভােব বর করেব? আমরা ক হেত ঐ বা র উপর একিট
ল টািন। তাহেল এই ছাট ি ভুজ একিট সমেকাণী ি ভুজ হেব যার অিতভুজ আমােদর বর করেত
হেব। আমােদর ভুিমর দঘ r, কাণ nπ . তরাং আমােদর অিতভুজ হেব r/ sin nπ . এিটই হল ক
হেত সমভুেজর শীষ িব র র । এর সােথ r যাগ করেল এিট হেব বড় বৃে র ব াসাধ R. অথাৎ
r + r/ sin nπ = R যখােন r unknown. আমরা এই সমীকরণেক খুব সহেজই সমাধান করেত
পাির।

UVa 10286 Trouble with a Pentagon


সমস া: একিট সম প ভুজ দওয়া আেছ। তামােক এর ভতের সবেচেয় বড় বগ প াক করেত হেব
যন বেগর একিট শীষ প ভুেজর একিট শীেষ থােক।

সমাধান: সম ােত দওয়া িচ িট ভাল কের খয়াল কর। িচে র বগিট বাম ডান ব ালা কের আেছ।
এছাড়াও খয়াল কর বেগর ডান আর বােমর শীষ িট প ভুেজর বা র উপর আেছ। এই টু তথ
ব বহার কের আমরা বেগর সাইজ বর কের ফলেত পাির।
বগ আর প ভুেজর যই শীষ একই িব েত তা থেক িবপরীত বা র উপর ল টান। তামার
বেগর ক অব ই এই লে র উপর থাকেব। তুিম এই ক এর উপর binary search করেত পার।
ক বিশ িনেচ ধরেল বগ অেনক বড় হেব ফেল বেগর শীষ প ভুেজর বাইের চেল যােব। আবার
যিদ ক বিশ উপের হেয় যায় তাহেল বগ বিশ ছাট হেব। এবং এর ফেল বেগর শীষ প ভুেজর
ভতের থাকেব। এরকম কের binary search করেল দখেব একসময় বেগর শীষ প ভুেজর উপের
থাকেব। এই বেগর সাইজই হেব আমােদর উ র। আসেল বেগর শীষ প ভুেজর ভতের না বাইের
তা চক করা ওত কিঠন না। তুিম প ভুেজর বা সােপে turn দখেব তাহেলই হেব (point in
a polygon technique). আরও একিট িজিনস খয়াল কর, তামােক এই binary search িক
িত ইনপুেট করেত হেব না। তুিম যিদ 1 দেঘ র প ভুেজর জ উ র বর কর a, তাহেল f দেঘ র
প ভুেজর জ উ র হেব f a.
এছাড়াও তুিম চাইেল বেগর বা র দেঘ র জ ফমুলা বর করেত পার। বাইনাির সাচ না কেরও
এই সম া সমাধান করা স ব।

১৭৩
UVa 10695 Find the Point
সমস া: একিট ি ভুজ ABC এর িতনিট শীষ িব র coordinate দওয়া আেছ। সই সােথ এর
ভতের একিট O এর জ ̸ AOB, ̸ BOC, ̸ AOC দওয়া আেছ। তামােক O এর coordinate
ি ট করেত হেব অথবা বলেত হেব এমন কােনা O নই।
সমাধান: মেন কর একিট বৃ আেছ যার একিট জ া হল AB. এখন তুিম যিদ AB এর যেকােনা এক
িদেকর বৃ চাপ নাও তাহেল সই চােপর যেকােনা িব েত AB একই পিরমান কাণ তির করেব।
উলটা ভােব বলেল বলা যায়- মেন কর AB দওয়া আেছ আর বলা আেছ O িব েত AB ̸ AOB
তির কের। তাহেল আমরা এমন একিট বৃ আঁকেত পাির যার একিট জ া AB এবং সই বৃ চােপর
উপের েত ক িব েত AB জ া ̸ AOB তির করেব।
অথাৎ মেন কর A আর B fixed আর ̸ AOB ও fixed. তাহেল O িব র লাকাস (locas)
হেব একিট বৃ চাপ। আসেল একিট বৃ চাপ বলা িঠক হে না। AB এর এক পােশ O এর লাকাস
একিট বৃে র চাপ আর আেরক পােশ আেরক বৃে র চাপ। আমােদর এই সম ায় আমরা এমন একিট
বৃ চাপ নব যন ̸ AOB এর মান দ মােনর সমান হয় আর এই চাপিট AB এর যিদেক C আেছ
সিদেক থােক। এই কাজ করা িক কিঠন না। আমরা িক চাইেল মেন করেত পাির OA = OB.
এটা মেন করেল OAB হেব সমি বা ি ভুজ। তরাং O এর coordinate বর করা বশ সহজ
হেব। আসেল এরকম িট O এর coordinate পাওয়া যােব। যিট AB এর য পােশ C আেছ তােক
নব। এরপর A, O আর B িদেয় যই বৃ যায় তার সমীকরণ বর করব। একই ভােব আমরা A,
O আর C িদেয় যাওয়া বৃে র সমীকরণ বর করব। এরপর এেদরেক intersect করেলই আমরা O
পেয় যাব। যিদ এই O ি ভুেজর ভতের থােক তার মােন আমােদর সমাধান আেছ, আর না হেল
সমাধান নই।

UVa 10809 Great Circle


সমস া: একিট গালাকার েহ িট িব র longitude আর latitude দওয়া আেছ। তামােক এেদর
এক িব হেত আেরক িব েত গালেকর পৃ িদেয় shortest distance এ যেত হেব। তামােক
shortest path এ থাকা সবেচেয় উ েরর পেয় ট এর latitude িড ী এবং িমিনেট ি ট করেত
হেব। যিদ একািধক উ র থােক তাহেল undefined ি ট করেত হেব।
সমাধান: এই সম া সমাধােনর আেগ দেখ নওয়া যাক latitude আর longitude আসেল িক।
১১.১ দখ। মেন কর গালেকর উপর কােনা একিট িব র সােথ তুিম গালেকর ক যাগ করেল।
এই রখা XY েনর সােথ যই কাণ তির কের সটাই latitude. যিদ িব িট XY েনর উপের
থােক অথাৎ z > 0 হয় তাহেল আমরা কােণর শেষ N লাগাই বা এেক north latitude বলা হয়
আর িনেচ হেল অথাৎ z < 0 হেল আমরা কােণর সােথ S লাগাই বা এেক south latitude বেল।
এই সম ােত িবষুব রখা অথাৎ z = 0 হেল 0N িলখা হেব। আমরা latitude ক θ িদেয় কাশ
করব। আর আমরা আমােদর সম ায় N হেল কাণেক ধনা ক আর S হেল ঋণা ক কের নব। যিদ
গালেকর ব াসাধ 1 হয় তাহেল আমােদর িব িটর z coordinate হেব sinθ.
এবার longitude দখা যাক। আমরা north pole থেক south pole একিট বৃ াকার লাইন
টািন, য বৃে র ক হেব গালেকর ক । এরকম তা আসেল অেনক বৃ পাওয়া স ব। আমরা
যেকােনা একিট আঁকেবা আর তােক বলব 0 longitude. আমােদর যই িব র longitude জানা
দরকার সই িব , north pole, south pole িদেয় বৃ চাপ আঁিক। যিদ এই বৃ চাপ আমােদর 0
এর বােম হয় তাহেল এিট হেব west আর ডােন হেল east. এখন এই বৃ চাপ তা িবষুব রখােক
একিট িব েত ছদ কেরেছ। বৃ চাপিট িবষুব রখায় যখােন ছদ কেরেছ সই িব , 0 এর বৃ চাপ
িবষুব রখােক যই িব েত ছদ কেরেছ সই িব - এই িট িব গালেকর কে যই কাণ তির
কের তাই longitude. আমরা আেগর মত west ক ধরব ঋণা ক আর east ক ধনা ক, কারণ

১৭৪
নকশা ১১.১: Latitude এবং Longitude, wikipedia হেত

এেত কের আমরা longitude ক খুব সহেজই x, y এ পিরনত করেত পারব। মেন কর ϕ হল
longitude. এখন আমােদর িব েথেক সরাসির িনেচ XY েনর উপর ল টান। আমরা এই িব র
x, y িনেয় আ িহ, কারণ এর x, y ই হল আমােদর িব র x, y. গালেকর ক থেক এর র
cos θ. এবার x = cos θ sin ϕ আর y = cos θ cos ϕ.
তরাং এেতা সাধনার পর আমরা latitude longitude হেত আমােদর দ িব িটর x, y, z
বর কের ফলব।
এখন আেসা এর যত special case আেছ সব েলােক আমরা া ডল করব। আমােদরেক
বেলেছ য এক িব হেত অপর িব েত shortest path এ যেত হেব এবং এই shortest path
এর উপেরর সবেচেয় north most িব ি ট করেত হেব। যিদ এই উ র unique নাহয় তাহেল
undefined বলেত হেব।
যিদ দ িট িব একই হয় এর মােন আমােদর shortest path এর দঘ 0. তরাং আমােদর
উ র হেব আমােদর ইনপুট এর িব িটই।
যিদ দ িব িটর একিট north pole এ থােক তার মােন তােদর মােঝর যত shortest path
সব তা north pole িদেয় যােব। তরাং north pole হেব উ র। এছাড়াও যিদ ইনপুেটর কােনা
িব south pole এ হয় তাহেলও ঐ একই কথা, আমােদর যেকােনা shortest path ই north
pole িদেয় যােব।
এসব বােদ যিদ আমােদর ইনপুেটর িব গালেকর কে র সােপে opposite এ থােক (অথাৎ
তারা একিট ব াস গঠন কের) তাহেল তােদর িদেয় অসংখ বৃ তির হয় যার ক গালেকর ক ।
তরাং এে ে unique কােনা উ র নই।
এবার হল আমােদর মূল সম া। আমােদরেক গালেকর ক েক ক কের ইনপুেটর িট িব
িদেয় যায় এরকম একিট বৃ আঁকেত হেব। সিট গালেকর সবেচেয় উপেরর য িব িদেয় যায় তােক
ি ট করেত হেব। বা এেক অ ভােব দখেত পার। মেন কর দ িট িব আর গালেকর ক
িদেয় একিট ন আঁিক। এিট গালেকর সবেচেয় উপেরর য িব িদেয় যােব সিটই উ র, অব
চক করেত হেব য সই িব িট আেদৗ আমােদর ইনপুেটর িট িব র মােঝর shortest path এর
উপর আেছ িকনা।
মেন কর আমরা জািন আমােদর উ েরর িব X, ক O আর ইনপুেটর িট িব A আর B.
তাহেল ̸ AOB বর করব। সই সােথ দখব ̸ AOX + ̸ BOX এর মান ̸ AOB এর থেক বড়
না ছাট না সমান। ছাট তা কখনই হেব না। যিদ বড় হয় এর মােন X িব A আর B এর মােঝর

১৭৫
shortest path এ থাকেব না। সে ে উ র হেব A আর B এর মােঝ য িব িট সবেচেয় উ ের
থােক। অ থা X িব িটই আমােদর উ র।
তরাং হল X কীভােব বর করব। আমরা এখােন একটু vector আর calculus ব বহার
করব। আমরা OA আর OB vector জািন, কারণ A আর B এর coordinate জািন। এই ভ র
িট হল (xA , yA , zA ) আর (xB , yB , zB ). এেদরেক যিদ আমরা cross product কির তাহেল
আিম যই plane এর কথা বলিছলাম তার normal vector পাব। আর normal vector জানা
মােনই ঐ ন জানা। কারণ কােনা একিট নরমাল ভ র তা একিট মা েনরই normal হেত
পাের তাই না? ধরা যাক এই নরমাল ভ র হল N = (xN , yN , zN ) যার সব িল component
এর মান আমােদর জানা। এখন মেন কর আমােদর optimal িব হল (x, y, z). এই িব িট যমন
গালেকর উপর আেছ িঠক তমিন েনর উপেরও আেছ। এখন একটু িচ া কের দখ তা এই িব িট
আমােদর নরমাল ভ র এর সােথ িক স ক তির করেব? সহজ, এেদর মােঝর কাণ সমেকাণ বা
90 িড ী। িট ভ র 90 িড ী এর equation কীভােব িলখবা? এটাও সহজ, এেদর মধ কার
dot product শূ হেব। তরাং আমরা িলখেত পাির xxN + yyN + zzN = 0. আবার যেহতু
(x, y, z) এই িব িট গালেকর উপের আেছ। তরাং আমরা িলখেত পাির x2 + y 2 + z 2 = 1.
আমােদর কাজ হল এই িট equation ক িস কের এরকম সবেচেয় বড় z এর মান বর করা।
আমরা থম equation থেক x এর মান ি তীয় সমীকরেণ বিসেয় z এর একিট equation দাঁড়
করােত পাির এবং এরপর চ া করেত পাির বর করেত য z এর সেবা মান কাথায় হেব। অথবা
চাইেল lagrange multiplier মথড খাটােত পার। এই িট ে ই বশ বড় সর ক া ুেলশন করেত
হেব। একটু ধয ধরেত করেত হেব আর িক।

UVa 10089 Repackaging


সমস া: তামার একিট ফ া িরেত িতন ধরেনর াস উতপ হয়। িতন ধরেনর ােসর সাইজ িক
আলাদা আলাদা। এখন এেদরেক িবিভ ভােব প াক করা হয়। িত প ােক এই িতন ধরেনর াস
িবিভ পিরমােন আেছ। যমন একিট প াক হেত পাের (1, 11, 5) এর মােন এখােন থম ধরেনর
াস আেছ একিট, ি তীয় ধরেনর াস আেছ এগােরািট আর তৃতীয় ধরেনর াস আেছ পাঁচিট। িত
ধরেনর প াক অসংখ পিরমােন আেছ। তামার কাজ হল এসকল প াক থেক যেকােনা সংখ ক প াক
নেব, তুিম চাইেল কােনা এক ধরেনর প াক একািধক িনেত পার আবার সই প াক নাও িনেত পার।
এরপর এসকল প াকেক তুিম খুলেব এবং পুনরায় প াক করেব। শত হল এই নতুন প াক িলেত
িতন ধরেনর াস একই সংখ ায় থাকেব আর তুিম তামার িনবািচত প াক িল থেক যত িল াস
পেয়িছেল সব কিটেকই ব বহার করেত হেব। বলেত হেব তুিম এভােব াস িলেক প াক করেত
পারেব িকনা। তামার ফ া িরেত সেবা 1000 ধরেনর প াক থাকেত পাের।
সমাধান: মেন কর প াক িল হল এেককিট 3d coordinate িব । এেদরেক আমরা pi ারা িনেদশ

করব। এখন মেন কর আমরা i তম প াক নব ai িট। শত হল ∑ ai pi এর coordinate এর x, y
এবং z িতনিটই একই হেব, ai ≥ 0 এবং ai িল পূণ সংখ া হেব। ai pi এর coordinate এর x,
∑ ∑ ∑
y এবং z িতনিটই একই হেব এই শতেক আমরা িলখেত পাির ai pxi = ai pyi = ai pzi
∑ ∑
বা ai (pxi − pzi ) = ai (pyi − pzi ) = 0. অথাৎ আমরা আমােদর 3d ে মেক 2d ত
কনভাট কের ফললাম। আমরা এখন আর p(x, y, z) িনেয় িচ া করবনা ∑ বরং q(x,∑y) িনেয় িচ া
করব যখােন qx = px − pz , qy = py − pz এবং আমােদর শত হল ai qxi = ai qyi = 0.
বলেত হেব এর সমাধান আেছ িকনা।
এখনই হল মজার অংশ। এর সমাধান িক? যিদ িচ া কর তাহেল দখেব আমােদর সকল q িব
িল যিদ ট কর এবং তার convex hull নাও, এরপর যিদ দখ মূল িব সই convex hull এর
ভতের তার মােন সমাধান আেছ। আর না থাকেল বুঝেত হেব সমাধান নই। মূল িব convex hull
এর ভতের না থাকেল য সমাধান নই তা তা বুঝাই যায়। কারণ মূল িব সােপে সকল িব
একই িদেক, তরাং কউ কাউেক cancel কের না। িক মূল িব ভতের থাকেল য সমাধান আেছ
তা বুঝা একটু কিঠন। খয়াল কর আমােদর িক িকছু িকছু ai = 0 হেত পাের, সবাই শূ না হেলই

১৭৬
হল। তরাং আমরা এই convex hull এর উপর থেক আসেল িতনিট িব িনবাচন করেত পাির
যার ভতের মূলিব আেছ ( যেহতু কনেভ হােলর ভতের মূল িব িছল)। বািক লর ai আমরা
শূ কের িদেত পাির। এখন আমরা দিখ য এই বািক িতনিট িব র ai িক বর করা যায় িকনা যন
আমােদর সমীকরণ িস কের। এখন এখােন িট equation, একিট x এর আেরকিট y এর, আর
ভ ািরেয়বল িতনিট। এর মােন এর সমাধান আেছই। তেব ai ≥ 0 হেব িকনা তা একটু িচ ার িবষয়।
আিম িনেজও এর মাণ এই মুহূেত করেত পারিছ না। িক ঐ য, া ািমং কে টে সব িকছু য
মাণ করেত হয় তা কথা নই। তামার যিদ আ হ থােক তাহেল মাণ করেত পার, আর তা নাহেল
intuition এর উপর িভি কের কের ফলেত পার।

১১.১ অ শীলনী

১১.১.১ সম া

Simple

ˆ Timus 1710 Boris, You Are Wrong!


ˆ UVa 476 Points in Figures: Rectangles
ˆ UVa 477 Points in Figures: Rectangles and Circles

ˆ UVa 478 Points in Figures: Rectangles, Circles and Triangles

ˆ UVa 191 Intersection

ˆ UVa 438 The Circumference of the Circle

ˆ UVa 453 Intersecting Circles

ˆ UVa 10573 Geometry Paradox

ˆ UVa 10725 Triangular Square

ˆ UVa 10242 Fourth Point!!

ˆ UVa 10341 Solve It

ˆ UVa 218 Moth Eradication

ˆ UVa 361 Cops and Robbers

ˆ UVa 109 SCUD Busters

ˆ UVa 596 The Incredible Hull

ˆ Uva 10065 Useless Tile Packers

ˆ UVa 10245 UVa The Closest Pair Problem

১৭৭
Easy
ˆ Timus 1703 Robotic Arm
ˆ Timus 3114 Spherical Mirrors
ˆ UVa 10287 Gifts in a Hexagonal Box

ˆ UVa 10289 A Square and Equilateral Triangles

ˆ UVa 10353 Circles in Hexagon

ˆ UVa 10345 Cricket/Football Goes Down

ˆ UVa 10372 Leaps Tall Buildings (in a single bound)

ˆ UVa 10398 The Golden Pentagon

ˆ UVa 10566 Crossed Ladders

ˆ UVa 10668 Expanding Rods

ˆ UVa 10598 Find the Latitude

ˆ UVa 811 The Fortified Forest

ˆ UVa 10078 The Art Gallery

ˆ UVa 10209 Is This Integration?

ˆ UVa 10215 The Largest/Smallest Box

ˆ UVa 11186 Circum Triangle

Medium
ˆ UVa 11580 Finding the Transmitter
ˆ UVa 10402 Triangle Covering
ˆ UVa 11123 Counting Trapezoid

ˆ UVa 11009 Geometry Once Again

ˆ UVa 10322 The Four in One Stadium

ˆ UVa 10386 Circles in Triangle

ˆ UVa 10631 Normals

ˆ UVa 819 GIfts Large and Small

ˆ UVa 10135 Herding Frosh

ˆ UVa 10256 The Great Divide

ˆ UVa 10210 Romeo & Juliet!

ˆ UVa 10251 Min-Max Cake

ˆ UVa 10481 The Gift Wrappers of Hollywood

১৭৮

You might also like