n×৩ আকারের গ্রিড রঙিন করতে হবে তিনটি রঙ (লাল, হলুদ, সবুজ) দিয়ে। দুটি আডজাসেন্ট সেল একই রঙ পাবে না। মডুলো ১০^৯+৭।
উদাহরণ: n=1 -> ১২ উপায়।
সমাধানের ধাপসমূহ
- প্রতি রোয় দুই ধরণের প্যাটার্ন: ১২৩ (সব রঙ আলাদা) এবং ১২১ (প্রথম ও শেষ একই)।
- প্রথম রোয়: a123=6, a121=6।
- পরবর্তী রোয়ের জন্য রিকারেন্স:
- b121 = 3*a121 + 2*a123
- b123 = 2*a121 + 2*a123
- উত্তর = a121 + a123।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const lli mod = 1e9 + 7;
class Solution {
public:
lli add(lli a, lli b) { return ((a % mod) + (b % mod)) % mod; }
int numOfWays(int n) {
lli a123 = 6, a121 = 6, b123, b121;
for (int i = 2; i <= n; i++) {
b121 = add(3 * a121, 2 * a123);
b123 = add(2 * a121, 2 * a123);
a121 = b121; a123 = b123;
}
return add(a123, a121);
}
};
int main() {
Solution ob;
cout << ob.numOfWays(3);
return 0;
}
ইনপুট
3
আউটপুট
246