UVA 10324 - Zeros and one
প্রব্লেম ঃ প্রবলেমটাতে বলা হয়েছে আমাদের স্ট্রিং অথবা ক্যারেক্টার অ্যারে সাইজটা ১০০০০০০ হতে পারবে । স্ট্রিংটাতে শুধুমাত্র '০' এবং '১' ক্যারেক্টার থাকতে পারবে। মূলত আমাদের ক্যারেক্টার থেকে চেক করতে হবে মিনিমাম নাম্বার i এবং j এর মাজে min(i,j) এবং ম্যাক্সিমাম নাম্বার i এবং j এর মাজে
max (i,j) ।
সল্ভিং টেকনিক ঃ
এই প্রব্লেমটাতে টাইমের কথা চিন্তা করলে আমি ১. ৩১০ সেকেন্ডের আনতে পারি নাই। আরও ভালো সল্যুশন হয়তো সম্ভব । প্রথমে আমরা ধরে নেই সবগুলা ক্যারেক্টার একই অর্থাৎ আমরা একটা ফ্ল্যাগ নিতে পারি এবং ফ্ল্যাগের মান ০ দেই। তারপর আমরা লুপের মাধ্যমে চেক করি i থেকে j পর্যন্ত ক্যরেক্টার গুলো একই কিনা? যদি একই না হয় তাহলে আমরা ফ্ল্যাগের মান ১ করে দেই। এখন ফ্ল্যাগের মান যদি ১ হয় তাহলে প্রিন্ট করি No আর যদি ফ্ল্যাগের মান ০ ই থাকে তাহলে প্রিন্ট করি Yes ।
ওকে তাহলে কোডিং শুরু করে দেন সল্ভ করার জন্য ।
আমার কোড নিচে দেওয়া আছে। আমি সি++ এ প্রব্লেমটা সল্ভ করছি। একান্ত চেষ্টা করার পরই কোডটা দেখতে পারেন।
কোড ঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
int cnt=1;
while(cin>>s)
{
if(s.size()==0)
break;
int a,b,c,flag;
cin>>a;
cout<<"Case "<<cnt<<":"<<endl;
while(a--)
{
flag=0;
cin>>b>>c;
if(b>c)
swap(b,c);
for(int j=b+1;j<=c;j++)
{
if(s[b]!=s[j])
flag=1;
}
if(flag==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
cnt++;
}
return 0;
}
Tuesday, 14 November 2017
Tuesday, 17 October 2017
Sunday, 6 August 2017
UVA 492 Solution:
প্রবলেমঃ এই প্রবলেমটা একটা স্ট্রিং রিলেটেট প্রবলেম। প্রব্লমেটাতে ইনপুট হিসেবে একাধিক লাইন নিতে বলা হয়েছে। লাইনের প্রতিটি শব্দকে একটা বিশেষ নিয়মে কনভার্ট করতে হবে।
১। যদি শব্দটা ভাওয়েল ধারা শুরু হয় তাহলে শুধু শব্দের শেষে ay যুক্ত করতে হবে যেমন ঃ is ⇛ isay
২। যদি শব্দটা কনসোনেন্ট ধারা শুরু হয় তাহলে শব্দের প্রথম অ্যালফাবেট টা সবার শেষে থাকবে এবং ay যুক্ত হবে যেমন ঃ they ⇨ heytay
আশা করি প্রব্লেমটা বুজতে কোন সমস্যা হওয়ার কথা না। 😗
সল্ভিং টেকনিক ঃ
প্রথমে আমরা একটা ক্যারাক্টার ইনপুট হিসেবে নিবো তারপর আমারা চেক করবো ক্যারাক্টার টা ভাওয়েল নাকি কনসোনেন্ট এখন এইটা ভাওয়েল অথবা কনসোনেন্ট যাই হোক আমরা ইনপুট নিতে থাকবো যতক্ষণ পর্যন্ত অ্যালফাবেট। যদি ভাওয়েল হয় তাহলে জাস্ট শব্দটার শেষে যুক্ত করে দিবো। আর যদি কনসোনেন্ট হয় তাহলে জাস্ট শব্দটার প্রথম বর্ণ এবং যুক্ত করে দিবো। এইতো এইটুকুই :-p প্রবলেমটা অনেক সহজ না?? সো কোড করা শুরু করে দাও এবং সাবমিট করো।
কী পারতেছো না?? আরে আরো কয়েকবার চেষ্টা করো......
এই এই কি করছো?? সল্যুশন দেখা কিন্ত ঠিক না। আচ্ছা দেখ জাস্ট লজিকটা নেয়ার জন্য কিন্ত পুরো কোডটাই কপি পেস্ট কইরো না। তাহলে নিজের পায়ে নিজেই কুড়াল মারবে।
হ্যাপি কোডিং :(
কোড ঃ
#include<bits/stdc++.h>
using namespace std;
int vowel(char a)
{
if(a=='A'||a=='a'||a=='E'||a=='e'||a=='I'||a=='i'||a=='O'||a=='o'||a=='U'||a=='u')
return 1;
return 0;
}
int main()
{
char first,word;
while(word=getchar())
{
if(word==EOF)
return 0;
if(isalpha(word))
{
if(vowel(word))
{
while(isalpha(word))
{
cout<<word;
word=getchar();
}
cout<<"ay";
}
else
{
first=word;
word=getchar();
while(isalpha(word))
{
cout<<word;
word=getchar();
}
cout<<first<<"ay";
}
}
cout<<word;
}
return 0;
}
প্রবলেমঃ এই প্রবলেমটা একটা স্ট্রিং রিলেটেট প্রবলেম। প্রব্লমেটাতে ইনপুট হিসেবে একাধিক লাইন নিতে বলা হয়েছে। লাইনের প্রতিটি শব্দকে একটা বিশেষ নিয়মে কনভার্ট করতে হবে।
১। যদি শব্দটা ভাওয়েল ধারা শুরু হয় তাহলে শুধু শব্দের শেষে ay যুক্ত করতে হবে যেমন ঃ is ⇛ isay
২। যদি শব্দটা কনসোনেন্ট ধারা শুরু হয় তাহলে শব্দের প্রথম অ্যালফাবেট টা সবার শেষে থাকবে এবং ay যুক্ত হবে যেমন ঃ they ⇨ heytay
আশা করি প্রব্লেমটা বুজতে কোন সমস্যা হওয়ার কথা না। 😗
সল্ভিং টেকনিক ঃ
প্রথমে আমরা একটা ক্যারাক্টার ইনপুট হিসেবে নিবো তারপর আমারা চেক করবো ক্যারাক্টার টা ভাওয়েল নাকি কনসোনেন্ট এখন এইটা ভাওয়েল অথবা কনসোনেন্ট যাই হোক আমরা ইনপুট নিতে থাকবো যতক্ষণ পর্যন্ত অ্যালফাবেট। যদি ভাওয়েল হয় তাহলে জাস্ট শব্দটার শেষে যুক্ত করে দিবো। আর যদি কনসোনেন্ট হয় তাহলে জাস্ট শব্দটার প্রথম বর্ণ এবং যুক্ত করে দিবো। এইতো এইটুকুই :-p প্রবলেমটা অনেক সহজ না?? সো কোড করা শুরু করে দাও এবং সাবমিট করো।
কী পারতেছো না?? আরে আরো কয়েকবার চেষ্টা করো......
এই এই কি করছো?? সল্যুশন দেখা কিন্ত ঠিক না। আচ্ছা দেখ জাস্ট লজিকটা নেয়ার জন্য কিন্ত পুরো কোডটাই কপি পেস্ট কইরো না। তাহলে নিজের পায়ে নিজেই কুড়াল মারবে।
হ্যাপি কোডিং :(
কোড ঃ
#include<bits/stdc++.h>
using namespace std;
int vowel(char a)
{
if(a=='A'||a=='a'||a=='E'||a=='e'||a=='I'||a=='i'||a=='O'||a=='o'||a=='U'||a=='u')
return 1;
return 0;
}
int main()
{
char first,word;
while(word=getchar())
{
if(word==EOF)
return 0;
if(isalpha(word))
{
if(vowel(word))
{
while(isalpha(word))
{
cout<<word;
word=getchar();
}
cout<<"ay";
}
else
{
first=word;
word=getchar();
while(isalpha(word))
{
cout<<word;
word=getchar();
}
cout<<first<<"ay";
}
}
cout<<word;
}
return 0;
}
Sunday, 16 July 2017
UVA 11854 solve :
problem: Egypt
আলোচনা ঃ প্রব্লেমটা UVA এর একদম সহজ একটা প্রব্লেম। প্রব্লেমটা ত্রিভুজ সম্পরকিত একটা প্রবলেম। এইখানে মূলত চাওয়া হইছে যে ত্রিভুজের যেকোন ২ বাহুর বর্গের যোগফল ৩য় বাহুর সমান।
সমাধান ঃ
ইনপুট হিসেবে যেহেতু একাদিক টেস্টকেস নিতে বলা হয়েছে সুতরাং আমরা এইখানে while loop এর মাধ্যমে ইনপুট নিবো। ইনপুট তিনটি বাহুর মান। তারপর আমরা চেক করবো যেকোন দুই বাহুর বর্গের যোগফল এর ৩য় বাহুর বর্গের সমান কিনা। যদি সমান হয় তাহলে "right" প্রিন্ট করবো অন্যথায় "wrong" প্রিন্ট করবো।
কোডঃ
কোড দেখার আগে অবশ্যই নিজে অনেকবার চেষ্টা করতে হবে। আর কোড দেখে জাস্ট লজিকটা নিতে পারেন। হুবহু কখনো কপি পেস্ট করবেন না।
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e;
while(scanf("%d%d%d",&a,&b,&c)==3)
{
if(a==0&&b==0&&c==0)
break;
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b)
{
cout<<"right"<<endl;
}
else
{
cout<<"wrong"<<endl;
}
}
return 0;
}
problem: Egypt
আলোচনা ঃ প্রব্লেমটা UVA এর একদম সহজ একটা প্রব্লেম। প্রব্লেমটা ত্রিভুজ সম্পরকিত একটা প্রবলেম। এইখানে মূলত চাওয়া হইছে যে ত্রিভুজের যেকোন ২ বাহুর বর্গের যোগফল ৩য় বাহুর সমান।
সমাধান ঃ
ইনপুট হিসেবে যেহেতু একাদিক টেস্টকেস নিতে বলা হয়েছে সুতরাং আমরা এইখানে while loop এর মাধ্যমে ইনপুট নিবো। ইনপুট তিনটি বাহুর মান। তারপর আমরা চেক করবো যেকোন দুই বাহুর বর্গের যোগফল এর ৩য় বাহুর বর্গের সমান কিনা। যদি সমান হয় তাহলে "right" প্রিন্ট করবো অন্যথায় "wrong" প্রিন্ট করবো।
কোডঃ
কোড দেখার আগে অবশ্যই নিজে অনেকবার চেষ্টা করতে হবে। আর কোড দেখে জাস্ট লজিকটা নিতে পারেন। হুবহু কখনো কপি পেস্ট করবেন না।
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e;
while(scanf("%d%d%d",&a,&b,&c)==3)
{
if(a==0&&b==0&&c==0)
break;
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b)
{
cout<<"right"<<endl;
}
else
{
cout<<"wrong"<<endl;
}
}
return 0;
}
Monday, 19 June 2017
UVA 10924 solve
প্রব্লমেঃ Prime word
ইনপুট ঃ ইনপুট হিসেবে আমার একটা স্ট্রিং নিবো। ইনপুট নিবো ইন্ড অফ ফাইল পর্যন্ত।
আউটপুটঃ স্ট্রিংটি প্রাইম নাকি নট প্রাইম সেইটা প্রিন্ট করবো ।
সল্ভিং টেকনিক ঃ
আমরা একটি স্ট্রিং নিবো । স্ট্রিংটি প্রাইম কিনা সেটা চেক করার জন্য আমাদের সম্পূর্ণ স্ট্রিং এর আস্কি ভ্যালু দরকার। এইজন্য আমার স্ট্রিং এর প্রতিটা ক্যারাক্টারের আস্কি ভ্যালু যোগ করবো। পরে দেখবো যোগফলটা কি প্রাইম নাকি। যদি প্রাইম হয় তাহলে স্ট্রিংটিও প্রাইম অন্যথায় প্রাইম না।
NB. Don't copy the code and paste in judge. you may just get logic from code.
আমার কোড ঃ
#include<bits/stdc++.h>
using namespace std;
bool isprime(int n)
{
if(n==0)
return false;
else if(n==1)
return true;
else
{
for(int i=2;i<n;i++)
{
if(n%i==0)
return false;
}
return true;
}
}
int main()
{
int sum=0;
string s;
while(getline(cin,s))
{
for(int i=0;i<s.size();i++)
{
if((s[i]>='a'&&s[i]<='z'))
{
sum+=(int)s[i]-96;
}
if((s[i]>='A'&&s[i]<='Z'))
{
sum+=(int)s[i]-38;
}
}
if(isprime(sum)==1)
{
cout<<"It is a prime word."<<endl;
sum=0;
}
else if(isprime(sum)==0)
{
cout<<"It is not a prime word."<<endl;
sum=0;
}
}
return 0;
}
প্রব্লমেঃ Prime word
ইনপুট ঃ ইনপুট হিসেবে আমার একটা স্ট্রিং নিবো। ইনপুট নিবো ইন্ড অফ ফাইল পর্যন্ত।
আউটপুটঃ স্ট্রিংটি প্রাইম নাকি নট প্রাইম সেইটা প্রিন্ট করবো ।
সল্ভিং টেকনিক ঃ
আমরা একটি স্ট্রিং নিবো । স্ট্রিংটি প্রাইম কিনা সেটা চেক করার জন্য আমাদের সম্পূর্ণ স্ট্রিং এর আস্কি ভ্যালু দরকার। এইজন্য আমার স্ট্রিং এর প্রতিটা ক্যারাক্টারের আস্কি ভ্যালু যোগ করবো। পরে দেখবো যোগফলটা কি প্রাইম নাকি। যদি প্রাইম হয় তাহলে স্ট্রিংটিও প্রাইম অন্যথায় প্রাইম না।
NB. Don't copy the code and paste in judge. you may just get logic from code.
আমার কোড ঃ
#include<bits/stdc++.h>
using namespace std;
bool isprime(int n)
{
if(n==0)
return false;
else if(n==1)
return true;
else
{
for(int i=2;i<n;i++)
{
if(n%i==0)
return false;
}
return true;
}
}
int main()
{
int sum=0;
string s;
while(getline(cin,s))
{
for(int i=0;i<s.size();i++)
{
if((s[i]>='a'&&s[i]<='z'))
{
sum+=(int)s[i]-96;
}
if((s[i]>='A'&&s[i]<='Z'))
{
sum+=(int)s[i]-38;
}
}
if(isprime(sum)==1)
{
cout<<"It is a prime word."<<endl;
sum=0;
}
else if(isprime(sum)==0)
{
cout<<"It is not a prime word."<<endl;
sum=0;
}
}
return 0;
}
UVA 11875 solve:
প্রব্লেমঃ Brick games
ইনপুটঃ প্রথমে টেস্টকেস ইনপুট নিতে হবে। টেস্টকেসের সংখ্যা ১০০ এর বেশি হবে না। প্রত্যেকটা টেস্টকেসের জন্য একটা করে বিজোড় সংখ্যা নিবো যেইটা প্লেয়ারদের সংখ্যা নির্দেশ করে। পরে প্রত্যেকটা প্লেয়ারদের বয়স নিবো অ্যাসেন্ডিং অথবা ডিসেন্ডিং অর্ডারে।
উদাহরণঃ
১ //টেস্ট কেস
৫ //প্লেয়ারদের সংখ্যা
১৪,১৫,১৬,১৭,১৯, // ৫জন প্লেয়ারের বয়স
সল্ভিং টেকনিক ঃ
প্রথমে আমারা প্লেয়ারদের বয়সগুলা একটা অ্যারেতে রাখবো। পরে আমরা অ্যারেটাকে সর্ট করে নিবো। সর্টেট অ্যারের মিড ভ্যালু বের করবো এবং এইটাই হবে কেপ্টেনের বয়স।
NB: Don't copy the code and paste in judge. you may just get logic from my code. Try yourself.
আমার কোড ঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int test,num,i=1;
cin>>test;
while(test--)
{
int num,age;
cin>>num;
int player[num];
for(int i=0;i<num;i++)
{
cin>>player[i];
}
int n=sizeof(player)/sizeof(player[0]);
sort(player,player+n);
int mid=player[n/2];
cout<<"Case "<<i<<": "<<mid<<endl;
i++;
}
return 0;
}
প্রব্লেমঃ Brick games
ইনপুটঃ প্রথমে টেস্টকেস ইনপুট নিতে হবে। টেস্টকেসের সংখ্যা ১০০ এর বেশি হবে না। প্রত্যেকটা টেস্টকেসের জন্য একটা করে বিজোড় সংখ্যা নিবো যেইটা প্লেয়ারদের সংখ্যা নির্দেশ করে। পরে প্রত্যেকটা প্লেয়ারদের বয়স নিবো অ্যাসেন্ডিং অথবা ডিসেন্ডিং অর্ডারে।
উদাহরণঃ
১ //টেস্ট কেস
৫ //প্লেয়ারদের সংখ্যা
১৪,১৫,১৬,১৭,১৯, // ৫জন প্লেয়ারের বয়স
সল্ভিং টেকনিক ঃ
প্রথমে আমারা প্লেয়ারদের বয়সগুলা একটা অ্যারেতে রাখবো। পরে আমরা অ্যারেটাকে সর্ট করে নিবো। সর্টেট অ্যারের মিড ভ্যালু বের করবো এবং এইটাই হবে কেপ্টেনের বয়স।
NB: Don't copy the code and paste in judge. you may just get logic from my code. Try yourself.
আমার কোড ঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int test,num,i=1;
cin>>test;
while(test--)
{
int num,age;
cin>>num;
int player[num];
for(int i=0;i<num;i++)
{
cin>>player[i];
}
int n=sizeof(player)/sizeof(player[0]);
sort(player,player+n);
int mid=player[n/2];
cout<<"Case "<<i<<": "<<mid<<endl;
i++;
}
return 0;
}
Wednesday, 14 June 2017
UVA 11192 Solution: Group reverse
Key point: প্রবলেমটাতে বলা হয়েছে একটা স্ট্রিং দেওয়া থাকবে যেইটা সর্বচ্চো ১০১ হবে। একটা ইন্টিজার নাম্বার দেওয়া থাকবে যেইটা স্ট্রিংটাকে একটা কয়েটা গ্রুপে ভাগ করবে। প্রতিটা ভাগকে রিভার্স করে প্রিন্ট করতে হবে।
যেমনঃ Ruhulamin এই স্ট্রিংটার সাইজ ৯। এখন একটা ইন্টিজার নিলাম ৩ তাহলে গ্রুপ সংখ্যা হবে ৯/৩=৩ অর্থাৎ স্ট্রিংটা এই রকম হবে Ruh ula min. আখন এইটাকে রিভার্স করলে হবে hurlaunim.
কোডিংঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)==1)
{
int l,ngroup;
if(n==0)
break;
char s[110];
getchar();
cin>>s;
l=strlen(s);
ngroup=l/n;
for(int i=1;i<=n;i++)
{
int j=i*ngroup;
int t=ngroup;
while(t--)
{
cout<<s[--j];
}
}
cout<<endl;
}
return 0;
}
Key point: প্রবলেমটাতে বলা হয়েছে একটা স্ট্রিং দেওয়া থাকবে যেইটা সর্বচ্চো ১০১ হবে। একটা ইন্টিজার নাম্বার দেওয়া থাকবে যেইটা স্ট্রিংটাকে একটা কয়েটা গ্রুপে ভাগ করবে। প্রতিটা ভাগকে রিভার্স করে প্রিন্ট করতে হবে।
যেমনঃ Ruhulamin এই স্ট্রিংটার সাইজ ৯। এখন একটা ইন্টিজার নিলাম ৩ তাহলে গ্রুপ সংখ্যা হবে ৯/৩=৩ অর্থাৎ স্ট্রিংটা এই রকম হবে Ruh ula min. আখন এইটাকে রিভার্স করলে হবে hurlaunim.
কোডিংঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)==1)
{
int l,ngroup;
if(n==0)
break;
char s[110];
getchar();
cin>>s;
l=strlen(s);
ngroup=l/n;
for(int i=1;i<=n;i++)
{
int j=i*ngroup;
int t=ngroup;
while(t--)
{
cout<<s[--j];
}
}
cout<<endl;
}
return 0;
}
Monday, 5 June 2017
UVA 12503 Solution:
আইডিয়াঃ আমারা প্রথমে একটা ক্যারেক্টার অ্যারে নিবো। রোবটটি বামদিকে গেলে মান হবে -১ এবং ডানদিকে গেলে মান হবে +১। সুতরাং Left অর্থাৎ ক্যারেক্টার অ্যারের ০ ইনডেক্সে যদি L হয় তাহলে মান -১ করে বাড়াবো এবং Right অর্থাৎ ক্যারেক্টার অ্যারের ০ ইনডেক্সে যদি R হয় তাহলে মান +১ করে বাড়াবো. same as ith এর জন্য পূর্ববর্তী ইন্সট্রাকশন অনুযায়ী +১ অথবা -১ যোগ করবো।
কোডঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int test,step,result,e,ar[101];
char c[20];
cin>>test;
while(test--)
{
cin>>step;
result=0;
for(int i=1;i<=step;++i)
{
scanf("%s",c);
if(c[0]=='L')
{
result-=1;
ar[i]=-1;
}
else if(c[0]=='R')
{
result+=1;
ar[i]=1;
}
else
{
scanf("%s%d",c,&e);
result+=ar[e];
ar[i]=ar[e];
}
}
cout<<result<<endl;
}
return 0;
}
আইডিয়াঃ আমারা প্রথমে একটা ক্যারেক্টার অ্যারে নিবো। রোবটটি বামদিকে গেলে মান হবে -১ এবং ডানদিকে গেলে মান হবে +১। সুতরাং Left অর্থাৎ ক্যারেক্টার অ্যারের ০ ইনডেক্সে যদি L হয় তাহলে মান -১ করে বাড়াবো এবং Right অর্থাৎ ক্যারেক্টার অ্যারের ০ ইনডেক্সে যদি R হয় তাহলে মান +১ করে বাড়াবো. same as ith এর জন্য পূর্ববর্তী ইন্সট্রাকশন অনুযায়ী +১ অথবা -১ যোগ করবো।
কোডঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int test,step,result,e,ar[101];
char c[20];
cin>>test;
while(test--)
{
cin>>step;
result=0;
for(int i=1;i<=step;++i)
{
scanf("%s",c);
if(c[0]=='L')
{
result-=1;
ar[i]=-1;
}
else if(c[0]=='R')
{
result+=1;
ar[i]=1;
}
else
{
scanf("%s%d",c,&e);
result+=ar[e];
ar[i]=ar[e];
}
}
cout<<result<<endl;
}
return 0;
}
Sunday, 4 June 2017
UVA 483 Solve:
প্রব্লেমঃ প্রব্লেমটাতে বলা হয়েছে একটা বাক্যের মাজে কয়েকটা শব্দ আছে। আউটপুট হিসেবে প্রতিটা শব্দকে রিভার্স অর্ডারে দেখাতে হবে।
সমাধানঃ সম্পূর্ণ বাক্যকে একটা স্ট্যাকের ভিতরে রাখাবো। যখন আমরা স্পেস অথবা নিউলাইন পাবো তখন স্ট্যাক থেকে বের করবো।
প্রব্লেমটা শলভ করার জন্য স্ট্যাক সম্পর্কে ভালো ধারণা থাকতে হবে। Stack
কোডঃ
#include<cstdio>
#include<stack>
using namespace std;
stack<char>s;
int main()
{
char c;
while((c=getchar())!=EOF)
{
if(c==' '||c=='\n')
{
while(s.size()!=0)
{
putchar(s.top());
s.pop();
}
putchar(c);
}
else
{
s.push(c);
}
}
return 0;
}
প্রব্লেমঃ প্রব্লেমটাতে বলা হয়েছে একটা বাক্যের মাজে কয়েকটা শব্দ আছে। আউটপুট হিসেবে প্রতিটা শব্দকে রিভার্স অর্ডারে দেখাতে হবে।
সমাধানঃ সম্পূর্ণ বাক্যকে একটা স্ট্যাকের ভিতরে রাখাবো। যখন আমরা স্পেস অথবা নিউলাইন পাবো তখন স্ট্যাক থেকে বের করবো।
প্রব্লেমটা শলভ করার জন্য স্ট্যাক সম্পর্কে ভালো ধারণা থাকতে হবে। Stack
কোডঃ
#include<cstdio>
#include<stack>
using namespace std;
stack<char>s;
int main()
{
char c;
while((c=getchar())!=EOF)
{
if(c==' '||c=='\n')
{
while(s.size()!=0)
{
putchar(s.top());
s.pop();
}
putchar(c);
}
else
{
s.push(c);
}
}
return 0;
}
Friday, 26 May 2017
UVA 11461 Solution: Square Number
আলোচনাঃ প্রব্লেমটাতে বলা হয়েছে N সংখ্যক বার দুইটা ইন্টিজার নাম্বার ইনপুট নিতে। ইন্টিজার দুইটার ভ্যালু যখন ০ অ্যান্ড ০ নিব তখন প্রোগ্রাম টারমিনেট করবে। ইন্টিজার দুইটার মধ্যবর্তি কয়টা স্কয়ার রুট নাম্বার আছে তা প্রিন্ট করতে হবে।
উদাহরণঃ ধরাযাক ১ এবং ১০ ইন্টিজার তাহলে এর মধ্যবর্তি স্কয়ার রুট নাম্বার গুলো হলো ১,৪,৯। সুতরাং ৩টা নাম্বার আছে। অর্থাৎ প্রিন্ট হবে ৩।
সল্ভিং টেকনিকঃ ফর লুপের মাধ্যমে আমারা সংখ্যা দুইটার মধ্যবর্তি স্কয়ার রুট নাম্বার বের করব; প্রতিটা স্কয়ার রুট নাম্বারের জন্য কাউন্টারের মান ১ করে বাড়বে।
স্পেশাল কেয়ার ঃ প্রিন্টকরার সময় নিউ লাইন প্রিন্ট করতে হবে। তানাহলে ভুল আন্সার আসবে।
Accepted code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
while(true)
{
int a,c,b,res;
cin>>a>>b;
if(a==0&&b==0)
break;
res=0;
for(int i=a;i<=b;i++)
{
c=sqrt(i);
if(c*c==i)
res++;
}
cout<<res<<endl;
}
return 0;
}
আলোচনাঃ প্রব্লেমটাতে বলা হয়েছে N সংখ্যক বার দুইটা ইন্টিজার নাম্বার ইনপুট নিতে। ইন্টিজার দুইটার ভ্যালু যখন ০ অ্যান্ড ০ নিব তখন প্রোগ্রাম টারমিনেট করবে। ইন্টিজার দুইটার মধ্যবর্তি কয়টা স্কয়ার রুট নাম্বার আছে তা প্রিন্ট করতে হবে।
উদাহরণঃ ধরাযাক ১ এবং ১০ ইন্টিজার তাহলে এর মধ্যবর্তি স্কয়ার রুট নাম্বার গুলো হলো ১,৪,৯। সুতরাং ৩টা নাম্বার আছে। অর্থাৎ প্রিন্ট হবে ৩।
সল্ভিং টেকনিকঃ ফর লুপের মাধ্যমে আমারা সংখ্যা দুইটার মধ্যবর্তি স্কয়ার রুট নাম্বার বের করব; প্রতিটা স্কয়ার রুট নাম্বারের জন্য কাউন্টারের মান ১ করে বাড়বে।
স্পেশাল কেয়ার ঃ প্রিন্টকরার সময় নিউ লাইন প্রিন্ট করতে হবে। তানাহলে ভুল আন্সার আসবে।
Accepted code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
while(true)
{
int a,c,b,res;
cin>>a>>b;
if(a==0&&b==0)
break;
res=0;
for(int i=a;i<=b;i++)
{
c=sqrt(i);
if(c*c==i)
res++;
}
cout<<res<<endl;
}
return 0;
}
Thursday, 25 May 2017
UVA 10018 Solve:
আলোচনাঃ
প্রব্লেমটাতে বলা হয়েছে একটা ইন্টিজার সংখ্যা নিতে হবে। পরে এই সংখ্যাকে রিভার্স করতে হবে। রিভার্স করার পর মেইন সংখ্যার সাথে যোগ করতে হবে। যোগফল যদি মেইন সংখ্যার সাথে পেলিন্ড্রম হয় তাহলে আর প্রিন্ট করবে না। আর যদি পেলিন্ড্রম না হয় তাহলে যোগফলকে মেইন সংখ্যা ধরে একই ভাবে কাজ করতে হবে যতক্ষণ না পেলিন্ড্রম না হয়। পেলিন্ড্রম হয়ে গেলে কতগুলো স্টেপ লাগলো পেলিন্ড্রম হতে সেটা সহ যোগফল প্রিন্ট করতে হবে।
Accepted code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int test,num,a,s,c;
while(scanf("%d",&test)==1)
{
while(test--)
{
cin>>num;
a=num;
c=0;
while(1)
{
s=0;
while(num!=0)
{
s=s*10+num%10;
num/=10;
}
if(s==a)
break;
else
{
num=s+a;
a=s+a;
c++;
}
}
cout<<c<<" "<<a<<endl;
}
}
return 0;
}
আলোচনাঃ
প্রব্লেমটাতে বলা হয়েছে একটা ইন্টিজার সংখ্যা নিতে হবে। পরে এই সংখ্যাকে রিভার্স করতে হবে। রিভার্স করার পর মেইন সংখ্যার সাথে যোগ করতে হবে। যোগফল যদি মেইন সংখ্যার সাথে পেলিন্ড্রম হয় তাহলে আর প্রিন্ট করবে না। আর যদি পেলিন্ড্রম না হয় তাহলে যোগফলকে মেইন সংখ্যা ধরে একই ভাবে কাজ করতে হবে যতক্ষণ না পেলিন্ড্রম না হয়। পেলিন্ড্রম হয়ে গেলে কতগুলো স্টেপ লাগলো পেলিন্ড্রম হতে সেটা সহ যোগফল প্রিন্ট করতে হবে।
Accepted code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int test,num,a,s,c;
while(scanf("%d",&test)==1)
{
while(test--)
{
cin>>num;
a=num;
c=0;
while(1)
{
s=0;
while(num!=0)
{
s=s*10+num%10;
num/=10;
}
if(s==a)
break;
else
{
num=s+a;
a=s+a;
c++;
}
}
cout<<c<<" "<<a<<endl;
}
}
return 0;
}
Monday, 17 April 2017
UVA 10107 Solution
UVA 10107:
এইটা অনেক সহজ একটা প্রব্লেম। প্রথমে ইনপুট গুলাকে একটা অ্যারে অথবা ভেক্টরে রাখতে হবে। (আমি ভেক্টর ব্যাবহার করেছি কারন সাইজ নিয়ে কোন চিন্তা করতে হয়না। ডায়নামিকালি সাইজ বাড়ানো যায়।)
ভেক্টরটাকে সর্ট করতে হবে। তারপর ভেক্টর সাইজ দেখতে হবে। ভেক্টর সাইজ যদি জোর সংখ্যক হয় তাহলে ২দিয়ে ভাগ করে তার সাথে আগের ইনডেক্স টা যোগ করতে হবে। তারপর মোট যে রেজাল্ট টা আসবে তাকে ২দিয়ে ভাগ করে ভেক্টরে রেখে দিলেই হয়ে যাবে।
আর ভেক্টর সাইজ যদি বিজোর সংখ্যক হয় তাহলে ২দিয়ে ভাগ করে ভেক্টরে রেখে দিলেই হবে।
ফেইসবুকে আমি
আমার কোডঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
vector<int>store;
while(cin>>n){
store.push_back(n);
sort(store.begin(),store.end());
if(store.size()%2==0)
{
cout<<(store[store.size()/2]+store[store.size()/2-1])/2<<endl;
}
else
{
cout<<store[store.size()/2]<<endl;
}
}
return 0;
}
এইটা অনেক সহজ একটা প্রব্লেম। প্রথমে ইনপুট গুলাকে একটা অ্যারে অথবা ভেক্টরে রাখতে হবে। (আমি ভেক্টর ব্যাবহার করেছি কারন সাইজ নিয়ে কোন চিন্তা করতে হয়না। ডায়নামিকালি সাইজ বাড়ানো যায়।)
ভেক্টরটাকে সর্ট করতে হবে। তারপর ভেক্টর সাইজ দেখতে হবে। ভেক্টর সাইজ যদি জোর সংখ্যক হয় তাহলে ২দিয়ে ভাগ করে তার সাথে আগের ইনডেক্স টা যোগ করতে হবে। তারপর মোট যে রেজাল্ট টা আসবে তাকে ২দিয়ে ভাগ করে ভেক্টরে রেখে দিলেই হয়ে যাবে।
আর ভেক্টর সাইজ যদি বিজোর সংখ্যক হয় তাহলে ২দিয়ে ভাগ করে ভেক্টরে রেখে দিলেই হবে।
ফেইসবুকে আমি
আমার কোডঃ
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
vector<int>store;
while(cin>>n){
store.push_back(n);
sort(store.begin(),store.end());
if(store.size()%2==0)
{
cout<<(store[store.size()/2]+store[store.size()/2-1])/2<<endl;
}
else
{
cout<<store[store.size()/2]<<endl;
}
}
return 0;
}
UVA 146 Solve
"UVA 146" প্রব্লেমটা একটা পারমুটেশন প্রব্লেম। এটা সল্ভ করার জন্য next_permutation সম্পর্কে ধারণা থাকতে হবে(next_parmutaion). প্রথমে আমরা ডান থেকে বাম দিকে চেক করব, যদি ডান দিকে কোন বড় উপাদান না পাই তাহলে " no successor" প্রিন্ট করব. আর যদি পাই তাহলে ন্যূনতম বড় উপাদানের সাথে এইটা পরিবর্তন করবো এবং বাকী উপাদান গুলো সর্ট করব
।
যেমনঃ ১, ২,৩,৩ এই সিকুয়েন্স টা হবে ১,৩,২,৩
এইটা কিভাবে করা হল???😲
প্রথমে সবচেয়ে বড় উপাদান ৩ এর সাথে ২ এর তুলনা করা হল (২<৩) পরে জাস্ট [২,৩] কে সর্ট করা হইছে।
এখানে আমি সি++ ব্যাবহার করে প্রব্লেমটা সল্ভ করছি।
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[50];
while(1)
{
cin>>s;
if(s[0]=='#')
break;
else{
int l=strlen(s);
if(next_permutation(s,s+l))
{
cout<<s<<endl;
}
else{
cout<<"No Successor"<<endl;
}
}
}
return 0;
}
।
যেমনঃ ১, ২,৩,৩ এই সিকুয়েন্স টা হবে ১,৩,২,৩
এইটা কিভাবে করা হল???😲
প্রথমে সবচেয়ে বড় উপাদান ৩ এর সাথে ২ এর তুলনা করা হল (২<৩) পরে জাস্ট [২,৩] কে সর্ট করা হইছে।
এখানে আমি সি++ ব্যাবহার করে প্রব্লেমটা সল্ভ করছি।
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[50];
while(1)
{
cin>>s;
if(s[0]=='#')
break;
else{
int l=strlen(s);
if(next_permutation(s,s+l))
{
cout<<s<<endl;
}
else{
cout<<"No Successor"<<endl;
}
}
}
return 0;
}
Monday, 10 April 2017
UVA 299 solve
#include<iostream> #include<cstdio> using namespace std; int main() { int A[70],n,m,i,j,s; cin>>n; while(n--) { cin>>m; for(i=s=0;i<m;i++) { cin>>A[i]; } /*sort*/ for(i=0;i<m-1;i++) { for(j=i+1;j<m;j++) { if(A[i]>A[j]) s++; } } printf("Optimal train swapping takes %d swaps.",s); } return 0; }
UVA 12468 solve
#include<iostream> #include<bits/stdc++.h> using namespace std; int main() { int a,b,s; while(1) { scanf("%d %d",&a,&b); if(a==-1&&b==-1) break; if(a==0&&b==99||a==99&&b==0) printf("1\n"); else { s=abs(a-b); if(s>50) s=100-s; printf("%d\n",s); } } return 0; }
UVA 11942 solve
#include<iostream> #include<bits/stdc++.h> using namespace std; int main() { int test,fnum,allnum; bool up,down; cin>>test; cout<<"Lumberjacks:"<<endl; while(test--) { up=down=false; cin>>fnum; for(int i=0;i<9;i++) { cin>>allnum; if(fnum<allnum) up=true; else down=true; fnum=allnum; } if(up&&down) { cout<<"Unordered"<<endl; } else{ cout<<"Ordered"<<endl; } } return 0; }
UVA 10474 solve
#include<iostream> using namespace std; int main() { int marbel,num; int a[10000]; while(cin>>marbel&&cin>>num) { if(marbel==0&&num==0) break; else for(int i=0;i<marbel;i++) { cin>>a[i]; } } return 0; }
UVA 10127 solve
#include<bits/stdc++.h> using namespace std; int calculate(int input) { long int N=1; int one=1,k; while(1) { if(N<input) { N=N*10+1; ++one; } k=N%input; if(k==0) break; else N=k; } return one; } int main() { int N; while(cin>>N) cout<<calculate(N)<<endl; return 0; }
UVA 12372 solve
#include<stdio.h> | |
int main() | |
{ | |
int i,T,L,W,H; | |
int n=1; | |
scanf("%d",&T); | |
for(i=0;i<T;i++) | |
{ | |
scanf("%d%d%d",&L,&W,&H); | |
printf("case %d: ",n++); | |
if(L<=20&W<=20&H<=20) | |
printf("Good\n"); | |
else | |
printf("bad\n"); | |
} | |
return 0; | |
} |
UVA 11728 solution
#include<stdio.h> | |
int main() | |
{ | |
int a,b,c,T,i=1; | |
scanf(“%d”,&T); | |
while(i<=T) | |
{ | |
scanf(“%d %d %d”,&a,&b,&c); | |
if((a>b&&a<c)||(c<a&&a<b)) | |
printf(“Case %d: %d\n”,i,a); | |
if((b>a&&b<c)||(c<b&&b<a)) | |
printf(“Case %d: %d\n”,i,b); | |
if((c>a&&b>c)||(c>b&&a>c)) | |
printf(“Case %d: %d\n”,i,c); | |
i++; | |
} | |
return 0 |
Subscribe to:
Posts (Atom)
-
UVA 10302 solve: 10302 - Summation of Polynomials #include<bits/stdc++.h> using namespace std; int main() { long l...