মান লযভাব একটি লাইব্রেরি সিস্টেম তৈরি করা হচ্ছে যা শেলফ-ভিত্তিক বই ব্যবস্থাপনা করে। তিনটি কমান্ড ইমপ্লিমেন্ট করতে হবে:
- কমান্ড ১: শেলফ
x-এyপৃষ্ঠার বই যোগ করুন। - কমান্ড ২: শেলফ
x-এরy-তম বইয়ের পৃষ্ঠা সংখ্যা প্রিন্ট করুন। - কমান্ড ৩: শেলফ
x-এ মোট কতটি বই আছে তা প্রিন্ট করুন।
কমান্ডগুলো ২ডি অ্যারে হিসেবে দেওয়া থাকে: {command_type, x, y}। y না থাকলে ডিফল্ট ০।
উদাহরণ
ইনপুট: শেলফ সংখ্যা = 4, কোয়েরি = 4, input_arr = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}}
আউটপুট: 23 1
ব্যাখ্যা:
- কমান্ড ১: শেলফ ৩-এ ২৩ পৃষ্ঠার বই যোগ।
- কমান্ড ১: শেলফ ৪-এ ১২৮ পৃষ্ঠার বই যোগ।
- কমান্ড ২: শেলফ ৩-র ০-তম বইয়ের পৃষ্ঠা (২৩) প্রিন্ট।
- কমান্ড ৩: শেলফ ৪-এ মোট বই (১) প্রিন্ট।
অ্যালগরিদম
bঅ্যারে (সাইজs) — প্রতিটি শেলফে বইয়ের সংখ্যা রাখে।pপয়েন্টার অ্যারে (সাইজs) — প্রতিটি শেলফের বইয়ের পৃষ্ঠা সংখ্যা রাখে (ডাইনামিক্যালি alokেটেড)।- প্রতিটি কোয়েরি প্রসেস করুন:
- টাইপ ১:
b[x]++,p[x]রি-অ্যালোকেট করে নতুন বই যোগ। - টাইপ ২:
p[x][y]প্রিন্ট। - টাইপ ৩:
b[x]প্রিন্ট।
- টাইপ ১:
- শেষে মেমরি ফ্রি করুন।
C প্রোগ্রাম
#include <stdio.h>
#include <stdlib.h>
void solve(int s, int q, int q_array[][3]) {
int *b;
int **p;
b = (int*)malloc(sizeof(int) * s);
p = (int**)malloc(sizeof(int*) * s);
for (int i = 0; i < s; i++) {
b[i] = 0;
p[i] = (int*)malloc(sizeof(int));
}
for (int loopCount = 0; loopCount < q; loopCount++) {
int qtype = q_array[loopCount][0];
if (qtype == 1) {
int x = q_array[loopCount][1];
int y = q_array[loopCount][2];
b[x] += 1;
p[x] = realloc(p[x], b[x] * sizeof(int));
p[x][b[x] - 1] = y;
} else if (qtype == 2) {
int x = q_array[loopCount][1];
int y = q_array[loopCount][2];
printf("%d\n", p[x][y]);
} else {
int x = q_array[loopCount][1];
printf("%d\n", b[x]);
}
}
if (b) free(b);
for (int i = 0; i < s; i++)
if (p[i]) free(p[i]);
if (p) free(p);
}
int main() {
int input_arr[][3] = {{1, 3, 23}, {1, 4, 128}, {2, 3, 0}, {3, 4, 0}};
solve(4, 4, input_arr);
return 0;
}
আউটপুট
23 1
মূল পয়েন্ট
- VLA বা ডাইনামিক মেমরি (
malloc/realloc) ব্যবহার করে রানটাইমে অ্যারে সাইজ বাড়ানো যায়। reallocপুরনো ডেটা রক্ষা করে নতুন সাইজ alokেট করে।- প্রোগ্রামের শেষে সব অ্যালোকেটেড মেমরি
free()দিয়ে মুক্ত করতে হয় মেমরি লিক রোধে।