http://codeforces.com/problemset/problem/832/A
ধরো , আমি একটা ডেস্ক এর উপরে মোট N টা লাঠি রাখবো ।। তারপর , আমি ও তুমি একবার একবার করে প্রতিবারে , K টা লাঠি করে সরিয়ে রাখবো । আর যেহেতু , আমিই এই খেলার প্রস্তাব করছি সুতরাং আমিই সবসময় শুরু করবো ।। এখন ধরো - একটা উদাহরণ দেই , যেমন ------------------
ডেস্ক- এ আমি রাখলাম ১০ টা লাঠি , আর প্রতিবারে আমরা ৪টা করে লাঠি সরিয়ে রাখবো । । ।
তো , প্রথমে আমি ৪ টি সরিয়ে রাখলাম ও তারপর বাকি থাকে ৬ টা ,তার ভেতরে তুমি সরিয়ে রাখবে আরো ৪ টা , তাহলে আর বাকি থাকলো ২ টা , এখন আমার পালা । কিন্তু , সরাতে গিয়ে দেখি -- ৪ টার কম আছে , সুতরাং - খেলা শেষ । । এখন , কে বেশিবার সরিয়ে রাখতে পেরেছে ??? দুইজনেই সমান ,অর্থাৎ আমি জিততে পারি নি । তাহলে, তুমি প্রিন্ট করবে - "NO" | এখন তুমি একটু , ভাবো তো - এখানে
কে কতোবার সরানোর সুযোগ পাবে ??? এটার শর্ট-কার্ট কি করা যায় ??? হুম , N কে K দিয়ে ভাগ করলেই , মোট কতবার সরানোর সুযোগ পাওয়া যাবে , সেটা বোঝাই যাবে । যেমন N=10 & K=4 ।
তাহলে , মোট সরানোর ঘটনা ঘটবে , ১০/৪ = ২ বার , প্রথম বার আমি সরাইছি ও দ্বিতীয় (শেষ) বার তুমি সরাইছো । এখন যে খেলাগুলোতে , আমি বেশিবার সরানোর সূযোগ পাবো , সেটাতেই আমায় প্রিন্ট করতে হবে -- "YES" , এখন ( N \ K) এর মান যদি বিজোড় হয় , তাহলে আমি জিতবো ও আর যদি জোড় হয় , তাহলে আমি কখনোই জিততে পারবো না । একটু মাথা খাটিয়ে লজিকটা চেক করে দেখো ।
চলো কোড দেখি এইবার
IN C++ LANGUAGE.............................
#include <cstdio>
int main()
{
long long n, k;
scanf(“%I64d%I64d”, &n, &k);
puts((n / k) & 1 ? “YES” : “NO”);
return 0;
}
IN C# LANGUAGE........................
ধরো , আমি একটা ডেস্ক এর উপরে মোট N টা লাঠি রাখবো ।। তারপর , আমি ও তুমি একবার একবার করে প্রতিবারে , K টা লাঠি করে সরিয়ে রাখবো । আর যেহেতু , আমিই এই খেলার প্রস্তাব করছি সুতরাং আমিই সবসময় শুরু করবো ।। এখন ধরো - একটা উদাহরণ দেই , যেমন ------------------
ডেস্ক- এ আমি রাখলাম ১০ টা লাঠি , আর প্রতিবারে আমরা ৪টা করে লাঠি সরিয়ে রাখবো । । ।
তো , প্রথমে আমি ৪ টি সরিয়ে রাখলাম ও তারপর বাকি থাকে ৬ টা ,তার ভেতরে তুমি সরিয়ে রাখবে আরো ৪ টা , তাহলে আর বাকি থাকলো ২ টা , এখন আমার পালা । কিন্তু , সরাতে গিয়ে দেখি -- ৪ টার কম আছে , সুতরাং - খেলা শেষ । । এখন , কে বেশিবার সরিয়ে রাখতে পেরেছে ??? দুইজনেই সমান ,অর্থাৎ আমি জিততে পারি নি । তাহলে, তুমি প্রিন্ট করবে - "NO" | এখন তুমি একটু , ভাবো তো - এখানে
কে কতোবার সরানোর সুযোগ পাবে ??? এটার শর্ট-কার্ট কি করা যায় ??? হুম , N কে K দিয়ে ভাগ করলেই , মোট কতবার সরানোর সুযোগ পাওয়া যাবে , সেটা বোঝাই যাবে । যেমন N=10 & K=4 ।
তাহলে , মোট সরানোর ঘটনা ঘটবে , ১০/৪ = ২ বার , প্রথম বার আমি সরাইছি ও দ্বিতীয় (শেষ) বার তুমি সরাইছো । এখন যে খেলাগুলোতে , আমি বেশিবার সরানোর সূযোগ পাবো , সেটাতেই আমায় প্রিন্ট করতে হবে -- "YES" , এখন ( N \ K) এর মান যদি বিজোড় হয় , তাহলে আমি জিতবো ও আর যদি জোড় হয় , তাহলে আমি কখনোই জিততে পারবো না । একটু মাথা খাটিয়ে লজিকটা চেক করে দেখো ।
চলো কোড দেখি এইবার
IN C++ LANGUAGE.............................
#include <cstdio>
int main()
{
long long n, k;
scanf(“%I64d%I64d”, &n, &k);
puts((n / k) & 1 ? “YES” : “NO”);
return 0;
}
IN C# LANGUAGE........................
using System; public class Test { public static void Main() { string str=Console.ReadLine(); string[] values=str.Split(' '); long A=long.Parse(values[0]); long B=long.Parse(values[1]); long C=(A/B); if(C%2==0) { Console.WriteLine("NO"); } else { Console.WriteLine("YES"); } } }
No comments:
Post a Comment