পোস্টটি পড়া হয়েছে 4,100 বার
UVa 10931 Parity Solution in Bengali

অনলাইন জাজ সিরিজ – ৩ (LightOJ 1000)

Post updated on 26th July, 2016 at 02:12 pm

অনলাইন জাজ সিরিজ – ১ পড়ার পর তুমি যদি এখন পর্যন্ত অনলাইন জাজে কোন প্রবলেম সলভ করে না থাক তাহলে আজকের পোস্টটা তোমার জন্য!
আজকে আমরা আলোচনা করব বাংলাদেশে তৈরি হওয়া (আমার জানা মতে) প্রথম অনলাইন জাজ সাইট LightOJ এর প্রথম প্রবলেমটি নিয়ে।

LightOJ 1000 – Greetings from LightOJ

 

তোমার কাজ হচ্ছে প্রথমেই উপরের লিংকে গিয়ে প্রবলেমটির আগা-গোড়া পড়ে শেষ করা। যেহেতু প্রবলেম সলভ করা অনেক জটিল একটা কাজ (!) তাই তোমাকে খুব ভাল ভাবে প্রবলেমটা পড়তে হবে। হুম…!!!

যদি ভাল ভাবে পড়ে থাক তাহলে ঘটনা যেটা পাবা তা হচ্ছে “দুইডা সংখ্যার যোগ করা আবার কুনু প্রবলেম হইল নাকি?” 😀 ঠিক তাই! অনলাইন জাজের প্রবলেমগুলো এরকমই হয় (কিছু কঠিন জিনিস থাকে, কী দরকার সেগুলো নিয়ে এখনি চিন্তা করার?

প্রবলেম ডেস্ক্রিপশনে বলা আছে Now you are given the number of problems in each of the computers, you have to find the total number of problems. অর্থাৎ, দুটি কম্পিউটারে কিছু প্রবলেম রাখা আছে। তোমাকে বলা হবে দুইটি পূর্ণসংখ্যা (int) a ও b। একটা কম্পিউটারে রাখা আছে a-টি প্রবলেম, আরেকটা কম্পিউটারে রাখা আছে b-টি প্রবলেম। তোমাকে বের করতে হবে দুটি কম্পিউটারে মোট কতটি প্রবলেম আছে। জাস্ট সংখ্যা দুটিকে যোগ করে দিলেই হবে।

 

এবার দেখি Input এ কী বলা হয়েছে

প্রথমেই দেখা যাচ্ছে Input starts with an integer T (≤ 125), denoting the number of test cases. এর মানে হচ্ছে তোমার এই কোডটা কিন্তু মাত্র একটা ইনপুট সেটের জন্য কাজ করলে হবে না। ধর তোমার কোডে ইনপুট দিলাম 5 আর 10, কনসোলে রেজাল্ট হিসেবে 15 শো করেই যদি তোমার প্রোগ্রাম বন্ধ হয়ে যায় তাহলে হবে না। তোমার এই কোডে ধর আমি ২০ বার ইনপুট দিতে চাই। তাহলে তো বিশ বার প্রোগ্রামটা রান করতে হবে। এটা ঝামেলা না? এ জন্য এই সিসটেমটা করা যে শুরুতেই বলে দিব তোমার কোডে আমি কতবার ইনপুট দিব। এখানে সেই সংখ্যাটি T বা টেস্ট কেসের সংখ্যা। তাহলে কী দাঁঁড়াচ্ছে? শুরুতেই কোডে দুটি নাম্বার ইনপুট দেয়া হবে না। শুরুতে T ইনপুট দেয়া হবে। তোমার কাজ হল এই T সংখ্যক বার ইনপুট নিয়ে, প্রসেস করে আউটপুট দেখানো। এই কাজটা করতে হবে Loop এর মাধ্যমে।

নতুনরা বরাবরই একটা কাজ করে তা হচ্ছে ইনপুট হওয়া টেস্ট কেসটাকে চেক করে যে ১২৫ এর সমান বা ছোট কিনা। কারণ Input starts with an integer T (≤ 125). এখানে ১২৫ থাকার মানে এই নয় যে তোমার কোডে ১২৫ বা এর চেয়ে ছোট সংখ্যা ইনপুট দিলে কাজ করবে তা না হলে কোড terminate করে দিবে। অনেককেই দেখি একটা IF এর check রাখতে যে সংখ্যাটা ১২৫ এর সমান বা ছোট কিনা। যদি সত্য হয় তাহলে বাকি কোড কাজ করবে তা না হলে কোড কোন কাজ করবে না। এটা করার দরকার নাই। কেননা এই সংখ্যা দিয়ে মূলত বুঝানো হয়েছে যে তোমার কোডে একটা সংখ্যা ইনপুট দেয়া হবে T এবং তা কখনোই ১২৫ এর চেয়ে বড় কোন সংখ্যা দেয়া হবে না। একটা তোমাকে ensure করা হচ্ছে। তুমি যেন নিশ্চিত থাকতে পার। যদি এটা বলা না থাকত তাহলে হয়ত T ডিক্লিয়ার করার সময় তুমি চিন্তা করতে এটাকে int রাখব নাকি long long int রাখব? আবার হয়ত আরেক চিন্তা করবে যে এর মান অনেক বড় হলে অনেকবার লুপ ঘুরবে। ১ সেকেন্ডে মোটামুটি 10^6 টি Loop ঘুরতে পারে। এর চেয়ে বড় সংখ্যা দিলে অবস্থা কী দাঁড়াবে? এতসব দুঃশ্চিন্তা থেকে তোমাকে মুক্তি দেয়ার জন্যেই এখানে উল্লেখ করা হয়েছে যে “বাপ! তুই টেনশন নিস না। তোরে আমি জিন্দেগীতেও ১২৫ এর থিক্কা বড় কোন জিনিস দিমু না!” ক্লিয়ার??? 😉
 
এবার Code টাইপের কিছু একটা দেখিঃ
input: (T); // টেস্ট কেস ইনপুট (T)
for(i=1; i<=T; i++){ //T সংখ্যক বার পুরো কোডের কার্যক্রম চলবে
  input: (a, b); //লুপের ভিতরে প্রতিবার দুটি int ইনপুট হচ্ছে
  answer = a+b; // লুপের ভিতরে প্রতিবার যোগের কাজটা হচ্ছে 
  output: ("Case %d: %d\n", i, answer); // লুপের ভিতরে প্রতিবার result প্রিন্ট হচ্ছে
}

১ নম্বর লাইনে টেস্ট কেস ইনপুট নেয়া হল। লুপ চালানো হল 1 থেকে T পর্যন্ত। অর্থাৎ T এর মান ১০ হলে এই কোড একবার রান করলেই ১০ সেট ইনপুট এর জন্য ১০টা আউটপুট পাওয়া যাবে। ৩ নম্বর লাইনে আসল ইনপুটটা নেয়া হল। মানে দুটি কম্পিউটারে যতগুলো প্রবলেম রাখা আছে তার সংখ্যা। চার নম্বর লাইনে যোগের কাজটা করা হচ্ছে। ৫ নম্বর লাইনে আউটপুট দেখানো হয়েছে। লক্ষ্য করলে দেখবে আউটপুটটা বিশেষ ভাবে দেখানো হয়েছে। Case কথাটা লিখে একটা int (i) প্রিন্ট করা হয়েছে %d দ্বারা এরপর ‘:’ দিয়ে আরেকটি int (answer) প্রিন্ট করা হয়েছে। শেষে প্রিন্ট করা হয়েছে একটা new line (\n). এর কারণ হচ্ছে প্রবলেমের আউটপুট exactly এই ফরমেটেই চাওয়া হয়েছে। আমরা যদি বুদ্ধি করে কিছু লেখা কম বেশি করি তাহলেই verdict আসবে WA (Wrong Answer)! এখানে প্রিন্ট করা প্রথম সংখ্যাটা হচ্ছে এটি কত নম্বর টেস্ট কেসের রেজাল্ট তা, যেটা আমরা loop variable থেকে পেয়েছি। আর স্বাভাবিক ভাবেই দ্বিতীয় সংখ্যাটি হচ্ছে মূল উত্তর বা যোগফল। শেষের new line প্রিন্ট না করলেও করলেও কিন্তু WA খেতে হবে। কারণ আউটপুট সেকশনে বলা আছে For each case, print the case number and the total number of problems. See the samples for exact formatting. আর sample এ দেখানো আছে প্রতিটা আউটপুট এক এক লাইনে। নতুন লাইনে না গেলে আউটপুট সব এক লাইনে শো করবে।

 

আজ এ পর্যন্তই। এই পোস্টে অনেক অনেক সিম্পল কথাবার্তাও বেশ লম্বা করে বলেছি কারণ এটা প্রবলেম সলভিং এর প্রথম পোস্ট। টেস্ট কেস, নিউ লাইন ইত্যাদির বিষয়ে সামনে হয়ত আর তেমন একটা উল্লেখ করা হবে না। আমার এই পোস্ট পড়ে এক জনেরও যদি অনলাইন জাজে হাতেখড়ি হয় তাহলে এই লেখাটা স্বার্থক! তাই কেউ যদি লিখাটা পড়ে উপকৃত হয়ে প্রবলেমটা সলভ করে থাকেন অনুগ্রহ করে কমেন্ট করুন। অভিনন্দন আপনাকে।

ধন্যবাদ সবাইকে… 🙂

14 thoughts on “অনলাইন জাজ সিরিজ – ৩ (LightOJ 1000)

    1. ধন্যবাদ মতামতের জন্য। সাথেই থাকুন। যে কোন পরামর্শ থাকলে জানাতে সংকোচ করবেন না।
      বন্ধুদের সাথে শেয়ার করুন। 😉

      1. #include
        
        main(){
        	int t,answer,a,b,i;
        	scanf("%d",&t);
        	for(i=1;i<=t;i++)
        	{
        		scanf("%d %d",&a,&b);
        		answer=a+b;
        		printf("case %d: %d\n",i,answer);
        	}

        Presentation Error dekhai kn vai?

  1. vai lightoj te register korar somoi to kono password dite bollo na. ekhon login korte gele password cai. ki korte pari?

  2. ভাইয়া,অসখ্য ধন্যবাদ। প্রোগ্রামিং ছেড়েই দিয়েছিলাম হতাশ হয়ে ,আবারও শুরু করলাম দেখা যাক কি হয়। 😀

Leave a Reply

Your email address will not be published. Required fields are marked *