https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1724
প্রোবলেম'টি যে কেউ সলভ করতে পারবে , কিন্তু - এখানেও অনেকভাবেই , প্রোবলেম এর উত্তর এফিশিয়েন্ট করা যায় । যেহেতু , এফিসিয়েন্ট করার সুযোগ আছে , সেহেতু - আমি , লুপ খাটিয়ে করার পক্ষপাতি নই । এইসব ছোটখাট প্রোবলেম যদি , এফিসিয়েন্ট করে করা শুরু করি , এখন থেকেই - তাহলে বড় বড় প্রোবলেম এর ক্ষেত্রে সুবিধা হবে ।
যদি কখনো বলে , প্রথম ২/৩/৪ টি বিজোড় সংখ্যার যোগফল বের করো । তাহলে, কি হতে পারে ?? হাতে কলমে দেখি , চলো
১+৩=৪ , ১+৩+৫=৯ , ১+৩+৫+৭=১৬ ,১+৩+৫+৭+৯=২৫
কি? বুঝা যায় ?? হুম, যোগফল গুলো অলটাইম ততগুলো বিজোড় সংখ্যার বর্গ হয় ।
তাহলে , প্রশ্ন অনুযায়ী - আমাকে ২ টি সংখ্যা দিবে --- a & b এদের মাঝে যতগুলো বিজোড়
আছে , তাদের যোগফল বের করতে হবে ।
তাহলে , প্রথমে ১ থেকে b অবদি মোট কয়টা বিজোড় সংখ্যা আছে ?? সেটা -- ২ দিয়ে ভাগ দিলেই পাবো , তারপর যে কয়টা বিজোড় সংখ্যা আছে তাকে বর্গ করলেই
১ থেকে b অবদি সবগুলোর যোগফল বের হয়ে যাবে । এখন ১ থেকে a এর আগ অবদি, বিজোড়্গুলোর
যোগফল বের করবো --
এখন, ১ থেকে b এর যোগফল থেকে , ১ থেকে a এর আগ অবদি, বিজোড়্গুলোর
যোগফল বাদ দিলেই , আমরা ------- a থেকে b অবদি যতগুলি বিজোড় আছে তাদের
যোগফল পাবো । চলো কোড দেখি ,
#include<bits/stdc++.h>
// Nayeem Mollick Joy , Applied Physics & Electronic Engineering , University of Rajshahi.
using namespace std;
int main()
{
int T,a,b,b1;
cin>>T;
for(int i=1;i<=T;i++)
{
cin>>a>>b;
if(b%2!=0)
{
b1=(b>>1)+1;
}
else{
b1=(b>>1);
}
int B=b1*b1;
int A=(a>>1)*(a>>1);
cout<<"Case "<<i<<": "<<B-A<<endl;
}
return 0;
}
প্রোবলেম'টি যে কেউ সলভ করতে পারবে , কিন্তু - এখানেও অনেকভাবেই , প্রোবলেম এর উত্তর এফিশিয়েন্ট করা যায় । যেহেতু , এফিসিয়েন্ট করার সুযোগ আছে , সেহেতু - আমি , লুপ খাটিয়ে করার পক্ষপাতি নই । এইসব ছোটখাট প্রোবলেম যদি , এফিসিয়েন্ট করে করা শুরু করি , এখন থেকেই - তাহলে বড় বড় প্রোবলেম এর ক্ষেত্রে সুবিধা হবে ।
যদি কখনো বলে , প্রথম ২/৩/৪ টি বিজোড় সংখ্যার যোগফল বের করো । তাহলে, কি হতে পারে ?? হাতে কলমে দেখি , চলো
১+৩=৪ , ১+৩+৫=৯ , ১+৩+৫+৭=১৬ ,১+৩+৫+৭+৯=২৫
কি? বুঝা যায় ?? হুম, যোগফল গুলো অলটাইম ততগুলো বিজোড় সংখ্যার বর্গ হয় ।
তাহলে , প্রশ্ন অনুযায়ী - আমাকে ২ টি সংখ্যা দিবে --- a & b এদের মাঝে যতগুলো বিজোড়
আছে , তাদের যোগফল বের করতে হবে ।
তাহলে , প্রথমে ১ থেকে b অবদি মোট কয়টা বিজোড় সংখ্যা আছে ?? সেটা -- ২ দিয়ে ভাগ দিলেই পাবো , তারপর যে কয়টা বিজোড় সংখ্যা আছে তাকে বর্গ করলেই
১ থেকে b অবদি সবগুলোর যোগফল বের হয়ে যাবে । এখন ১ থেকে a এর আগ অবদি, বিজোড়্গুলোর
যোগফল বের করবো --
এখন, ১ থেকে b এর যোগফল থেকে , ১ থেকে a এর আগ অবদি, বিজোড়্গুলোর
যোগফল বাদ দিলেই , আমরা ------- a থেকে b অবদি যতগুলি বিজোড় আছে তাদের
যোগফল পাবো । চলো কোড দেখি ,
#include<bits/stdc++.h>
// Nayeem Mollick Joy , Applied Physics & Electronic Engineering , University of Rajshahi.
using namespace std;
int main()
{
int T,a,b,b1;
cin>>T;
for(int i=1;i<=T;i++)
{
cin>>a>>b;
if(b%2!=0)
{
b1=(b>>1)+1;
}
else{
b1=(b>>1);
}
int B=b1*b1;
int A=(a>>1)*(a>>1);
cout<<"Case "<<i<<": "<<B-A<<endl;
}
return 0;
}
No comments:
Post a Comment