UIU: বাঁচতে হলে জানতে হবে


মাই ডিয়ার ভাই ও বোনেরা,
ACM Programming Problems সলভ করতে চাওয়া খুবই উত্তম সিদ্ধান্ত
কিন্তু কিছু ছোটখাটো কনটেস্টের নিয়ম-কানুন না জেনে আচমকা কনটেস্ট করা শুরু করে দিলে
ধুমায়ে wrong answer / runtime error / time limit exceed খাইতে খাইতে মারা যাবেন
সেইজন্যই বলতেছি, বাঁচতে হলে জানতে হবে!

কনটেস্ট শুরু করার জন্য C জানা যথেষ্ট .. তবে আপনাকে C++ ও জানতে হবে পরে
কনটেস্ট করার জন্য C++ সবচাইতে জনপ্রিয় programming language
C++ এ আপনি C-এর সবকিছু ব্যবহার করতে পারবেন, সাথে আরো অনেক সুবিধা পাবেন
আমরা আস্তে আস্তে সেগুলা দেখব

প্রথম কথা হলো, কনটেস্ট কোডিং করার টেম্পলেট .. মানে হলো, কনটেস্ট করার জন্য আপনাকে নিচের ফরমেট ফলো করতে হবে

#include <stdio.h>

int main(int argc, const char ** argv[])
{

    // write your code here

    return 0;
} 

main ফাংশনের প্যারামিটার হিসেবে কিছু ক্যাচাল মার্কা জিনিস দেয়া আছে .. ভয় পাওয়ার কিছু নাই
এইগুলা না দিলেও হবে, আপনাদের সাথে একটু ভাব নিলাম আরকি
এই জিনিসগুলা আপনার কোডে থাকলে সবাই মনে করবে আপনি অনেক কিছু জানেন, ব্যপক জ্ঞানী!
আরেকটু ইনফরমেশন জেনে রাখেন .. যাতে Junior question করলে একেবারে চিপায় না পড়েন
argc = argument counter
argv = argument variable [double pointer constant character array]

যদি আপনি command line / teminal থেকে প্রোগ্রাম রান করেন তখনি এই জিনিসগুলা ব্যবহার হয়
এছাড়াও কোনো কোনো IDE-তে argument পাস করার option থাকে প্রোগ্রাম রান করার সময়
ব্যস, আর কিছু জানার দরকার নাই .. এরপরেও যদি আঁতেল Junior question করে তখন কি করবেন?
ব্যপক vaabz নিয়ে বলবেন, এখন তোমরা এইগুলা বুঝবা না .. আগে বড় হও তখন বুঝবা, ওক্কে? গুড

তাহলে আমাদের বেসিক টেম্পলেট হলো,

#include <stdio.h>

int main()
{

    // write your code here

    return 0;
} 

এইভাবে না করলে হবে না, ঠিক আছে?
বাংলা কথা হলো,

void main () {

}

দেয়া যাবে না
কেন দেয়া যাবে না? .. ভালো question
আমরা যে GCC compiler use করি, এই স্টাইলটা হলো সেটার convention
এই স্টাইল ফলো না করে কোড করলে সে অনেক mind করে 😦
আর সে mind করলে কি হয় জানেন? Runtime error, compile error

২য় কথা হলো,
অতিরিক্ত কোনো কিছু প্রিন্ট করা যাবে না ..
যেভাবে আউটপুট দিতে বলা হইছে, ঠিক সেইভাবে আউটপুট দিতে হবে

মনে করেন, আপনাকে ২টা সংখ্যা যোগ করতে বলা হলো
Sample input
1 2
Sample output
3

আপনি যেটা করবেন, প্রথমে ইনপুট নিবেন

scanf ("%d %d", &a, &b);

তারপর আউটপুট দিবেন

printf ("summation = %d", a + b);    // wrong!!

বা

printf ("ans %d", a + b);    // wrong!!

যেভাবে দিতে হবে:

printf ("%d\n", a + b);    // correct!! 

একটা নাম্বার প্রিন্ট করতে বলা হইছে, জাস্ট নাম্বারটাই প্রিন্ট করবেন ..
অতিরিক্ত কোনো কিছুই প্রিন্ট করা যাবে না ..
একটা অতিরিক্ত space (” “) ও যদি প্রিন্ট করেন তাহলেও হবে না .. বোঝা গেল বিষয়টা?

খেয়াল করেন, প্রিন্ট করার পর আমি একটা নিউলাইন দিয়েছি .. এইটা দিতে হবে ..
প্রোগ্রামের সব প্রিন্ট করার কাজ শেষ হয়ে যাবার পর একটা নিউলাইন দিতে হবে

৩য় কথা হলো,
অনেকগুলা ইনপুট থাকবে .. এবং আপনার প্রোগ্রাম একবার রান করেই সব ইনপুট প্রসেস করে আউটপুট দিতে হবে
তাই এইভাবে করলে হবে না

int main(int argc, const char ** argv[])
{
    int a;
    int b;
    
    scanf ("%d %d", &a, &b);
    
    printf ("%d\n", a + b);

    return 0;
} 

কারণ হলো, এই প্রোগ্রাম একবার ইনপুট নিবে, একবার আউটপুট দিবে, তারপর বন্ধ হয়ে যাবে
কিন্তু Judge-দের ইনপুট অনেকগুলা থাকে (একটা ফাইলের মধ্যে)
তাই আপনাকে যেটা করতে হবে, ইনপুট নিবেন, আউটপুট দিবেন, আবার ইনপুট নিবেন ….
এইভাবে চলতে থাকবে .. যতক্ষণ পর্যন্ত না Judge-দের ইনপুট ফাইল শেষ হয়
আপনাকে করতে হবে এইভাবে

int main(int argc, const char ** argv[])
{
    int a;
    int b;
    
    while ( scanf ("%d %d", &a, &b) != EOF ) {

        printf ("%d\n", a + b);
    }

    return 0;
} 

এইটার মানে হলো,
আপনার প্রোগ্রাম একটার পর একটা ইনপুট নিতেই থাকবে, যতক্ষণ না পর্যন্ত EOF (End Of File) পাওয়া যায়
আপনি যদি Windows OS ব্যবহার করেন তাহলে EOF হলো, ctrl + z

এবার আসি, Judge Response এবং সেগুলার অর্থ কি, সেই বিষয়ে

Compile Error = প্রোগ্রাম কম্পাইল করা যায় নাই।
এই ধরনের Response আসলে, ওই Response-এর লিঙ্কে ক্লিক করলে এররটা জানা যাবে

Presentation Error = প্রোগ্রামের আউটপুট ঠিক আছে, কিন্তু ঠিক ভাবে প্রেজেন্ট করা হয় নাই।
যেমন, আপনি ঠিকভাবে নিউলাইন, স্পেস দেন নাই .. অথবা বেশি নিউলাইন, স্পেস দিছেন

Runtime Error = প্রোগ্রাম রান করতে গিয়ে এরর .. বা, রান করতে করতে এরর
বেশিরভাগ ক্ষেত্রে এই এররটার কারণ হলো, এরে সাইজ কম নেয়া
০ (শূন্য) দিয়ে কোনো সংখ্যা কে ভাগ করলেও এই এরর হবে

Time Limit Exceed = আউটপুট দিতে আপনার প্রোগ্রাম অনেক সময় নিচ্ছে
সময় কি বাংলালিঙ্ক দামে পাইছেন নাকি? এত সময় দেয়া যাবে না
এই এরর-এর কারণ হলো, দুর্বল লজিক .. বা, আপনার প্রোগ্রামের লুপ শেষ হয় না, ঘুরতেই থাকে

Wrong Answer = আউটপুট ভুল

Accepted = আপনার প্রোগ্রামে নাকি কোনো এরর নাই! সবকিছু পারফেক্ট!! .. এইটা কোনো কথা হইলো? আজিব!

5 thoughts on “UIU: বাঁচতে হলে জানতে হবে

  1. Vaia’r presentation ta chorom!!!!!!
    So no Presentation Error here!!!!
    Verdict :WOW!!!! Perfectly Accepted!!!!!!! 🙂 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s