Skip to main content

[ UVa ] 10946 - You want what filled ?

  • আমরা আমাদের আইল্যান্ড থেকে একটা করে পজিশন রিড করবো । যদি ' . ' পাই তবে সেটা স্কিপ করবে । 
  • এখন প্রত্যেক টা গর্তের জন্য সেখানে Flood Fill চালাবো । আমাদের কে  পাশাপাশি ৪ দিকে যেতে হবে এবং  হিসাব করতে হবে  ওই একই ধরনের ক্যারেক্টার আসে পাশে কয়টা আছে ।  
  • ওই ক্যারেক্টার ছাড়া অন্য  কোন ক্যারেক্টার পাই তবে আমাদের কে সেখান থেকে ব্যাক করতে হবে । 
  • একই ধরনের কয়টা ক্যারেক্টার পাওয়া গেলও সেটা আমাদের rank_list এ ওই ক্যারেক্টার সহ জমা করে রাখতে হবে । 
  • পুরা আইল্যান্ড যখন ভ্রমণ করা শেষ তখন আমাদের  rank_list কে সমস্যা তে বর্ণিত শর্ত অনুসারে সর্ট করতে হবে । 
  • rank_list এর সাইজ ৫০ * ৫০ এর একটু বেশি করে রাখা নিরাপদ । 
  •  কারণ আমাদের আইল্যান্ড এর প্রত্যেক টা পজিশন যদি আলাদা আলাদা হোল হয় সেই ক্ষেত্রে যদি rank_list এর সাইজ ছোট হয় তবে রানটাইম এরর খেতে হবে :) 
কোড :
/**
* Problem : 10946 - You want what filled?
* Verdict : Accepted.
* Writer : Mehadi Hasan Menon.
* Date : 25.12.16.
**/
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int mx = 55;
char island[mx][mx];
int x, y;
int dr[] = {-1, 0, 1, 0};
int dc[] = {0, 1, 0, -1};
struct data
{
int rank_size;
char name;
} rank_list[2505];
// max different hole may be 50 x 50
// this will will skip run time ERROR :)
bool compare(const data &a, const data &b)
{
if(a.rank_size == b.rank_size)
{
return a.name < b.name;
}
else
{
return a.rank_size > b.rank_size;
}
}
int dfs(int r, int c, char new_hole)
{
if(r < 0 || r >= x || c < 0 || c >= y || island[r][c] != new_hole)
{
return 0;
}
if(island[r][c] == '.')
{
return 0;
}
island[r][c] = '.';
int ans = 1;
for(int i = 0; i < 4; i++)
{
int new_row = r + dr[i];
int new_col = c + dc[i];
ans += dfs(new_row, new_col, new_hole);
}
return ans;
}
int main()
{
freopen("input.txt", "r+", stdin);
int tc = 1;
while(scanf("%d %d", &x, &y) && x != 0 && y != 0)
{
for(int i = 0; i < x; i++)
{
scanf("%s", island[i]);
}
int index = 0;
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
if(island[i][j] != '.')
{
rank_list[index].name = island[i][j];
rank_list[index].rank_size = dfs(i, j, island[i][j]);
index += 1;
}
}
}
// sort our rank list structure
sort(rank_list, rank_list + 2505, compare);
// finally print result
printf("Problem %d:\n", tc);
for(int i = 0; i < 2505; i++)
{
if(rank_list[i].rank_size == 0)
{
break;
}
printf("%c %d\n", rank_list[i].name, rank_list[i].rank_size);
}
tc += 1;
// reset our rank list
for(int i = 0; i < 2505; i++)
{
rank_list[i].rank_size = 0;
}
}
return 0;
}
view raw 10946.cpp hosted with ❤ by GitHub

হ্যাপি কোডিং :)

Comments

Popular posts from this blog

উবুন্টুতে রুট পাসওয়ার্ড ভুলে তা রিকভার করার উপায় ।

যদি কেউ রুট পাসওয়ার্ড ভুলে যান তাহলে নিচের কাজ গুলো করে নতুন পাসওয়ার্ড সেট করতে পারবেন: প্রথমে পিসি রিস্টার্ট দিন । দিয়ে UP/DOWN করে kernel version সিলেক্ট করে e চাপুন । ব্ল্যাক Screen আসবে এবার একটা Space দিয়ে লিখুন “Single” [ Enter ] এরপর b চাপুন ফলাফল : লিনাক্সের Single user Mood এ চলে আসছেন । এখন লিখুন passwd root [ Enter ] এখন নতুন পাসওয়ার্ড খানা টাইপ করেন [ এন্টার ] আবার টাইপ করেন [ এন্টার ] কাজ শেষ , এবার reboot টাইপ করেন । এখন নতুন পাসওয়ার্ড দিয়ে লগইন করেন। পুনশ্চ : যদি আপনার উইন্ডোজ এর সাথে ডুয়েল বুট করা থাকে তবে এই প্রক্রিয়া কাজ করবে না ।

Fix The BIOS in this system is not fully ACPI compliant in Windows 7

এই সমস্যা সমাধান করার জন্য আপনি নিচের ধাপ গুলো অনুসরণ করুন। ধাপ ১ :  আপানর  কম্পিউটার এ উইন্ডোজ এর ডিস্ক থেকে বুট করুন । নীচের মত উইন্ডো আসলে Shift + F10 চাপুন । এর ফলে কমান্ড প্রম্প্ট ওপেন হবে। ধাপ ২ : এখন CMD তে নিচের কমান্ড গুলি ধারবাহিক ভাবে লিখুন C: bootrec /FixMbr bootrec /FixBoot bootrec /RebuildBcd exit  এখানে  C হলো যে ড্রাইভ এ উইন্ডোজ দেয়া আছে।  আপনার যদি অন্য কোনো ড্রাইভ ( D, E, F, ..... ) এ উইন্ডোজ দেয়া থাকে তবে আপনাকে C এর জায়গায় সেই ড্রাইভ এর নাম লিখতে হবে।  উপরের সব কমান্ড যদি সঠিক ভাবে বিল্ড হয় তবে আপনি আপনার কম্পিউটার রিস্টার্ট দিন।  দেখবেন আপনার সমস্যা সমাধান হয়ে গেছে :D