ধরুন, আমাদের একটি n x n ম্যাট্রিক্স আছে। ম্যাট্রিক্সের প্রতিটি উপাদান অনন্য এবং এটি 1 এবং n 2 এর মধ্যে একটি পূর্ণসংখ্যা। . এখন আমরা নিচের কাজগুলো যেকোনো পরিমাণে এবং যেকোনো ক্রমে সম্পাদন করতে পারি।
-
আমরা ম্যাট্রিক্সে যেকোন দুটি পূর্ণসংখ্যা x এবং y বাছাই করি, যেখানে (1 ≤ x
-
আমরা ম্যাট্রিক্সে থাকা যেকোনো দুটি পূর্ণসংখ্যা x এবং y বেছে নিই, যেখানে (1 ≤ x
-
আমাদের মনে রাখতে হবে যে x + y ≤ k এবং মানগুলি অবশ্যই একই সারি এবং কলামে উপস্থিত থাকবে না।
অপারেশন সম্পাদনের মাধ্যমে পাওয়া যায় এমন অনন্য ম্যাট্রিকের সংখ্যা আমাদের খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি n =3, k =15, mat ={{4, 3, 6}, {5, 9, 7}, {1, 2, 8}} এর মত হয়, তাহলে আউটপুট হবে 36।
উদাহরণস্বরূপ, বাছাই করা দুটি মান হল x =3 এবং y =5। কলামগুলি অদলবদল করা হলে ফলাফল ম্যাট্রিক্স হবে −
3 4 69 5 72 1 8
এইভাবে 36টি অনন্য ম্যাট্রিক্স পাওয়া যেতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
একটি ফাংশন dfs() নির্ধারণ করুন ভিজিট করা [k] যদি অ-শূন্য হয়, তাহলে:return visited[k] :=true insert k s তে সূচনা করার জন্য j :=ver[k] এর শুরু, যখন j ver[k] এর শেষ উপাদানের সমান নয় , আপডেট করুন (j 1 দ্বারা বৃদ্ধি করুন), do:dfs(*j, ver, পরিদর্শন করা, s) আকারের একটি অ্যারে f সংজ্ঞায়িত করুন:51.f[0] :=1 শুরু করার জন্য i :=1, যখন i <=50, আপডেট করুন (i 1 দ্বারা বাড়ান), do:f[i] :=(i * f[i - 1]) mod modval আকারের একটি অ্যারে e সংজ্ঞায়িত করুন n শুরু করার জন্য i :=0 আকারের একটি অ্যারে pk সংজ্ঞায়িত করুন, যখন iউদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#includeনেমস্পেস ব্যবহার করে std;#define modval 998244353const int INF =1e9;void dfs(int k, vector ver[], bool visited[], stack &s) {যদি (ভিজিট করা [কে]) ফেরত; পরিদর্শন [k] =সত্য; s.push(k); for(vector ::iterator j =ver[k].begin(); j!=ver[k].end(); j++) dfs(*j, ver, visited, s);}void solve( int n, int k, ভেক্টর<ভেক্টর > ম্যাট) { int f[51]; f[0] =1; for(int i =1; i <=50; i++) { f[i] =(i * f[i-1]) % modval; } ভেক্টর e[n]; ভেক্টর pk[n]; for(int i =0; i k) { chk =1; বিরতি } } if(chk==0) { pk[i].push_back(j); pk[j].push_back(i); } chk =0; for(int l =0;l k){ chk =1; বিরতি } } if(chk ==0) { e[i].push_back(j); e[j]. push_back(i); } } } int resa =1, resb =1; bool v1[n], v2[n]; for(int i =0; i s; if(!v1[i]) { dfs(i, pk, v1, s); if(!s.empty()) { resa *=(f[s.size()]) % modval; resa % =modval; } } } for(int i =0;i s; if(!v2[i]){ dfs(i, e, v2, s); যদি(!s.empty()) { resb *=(f[s.size()]) % modval; resb % =modval; } } } cout<<(resa * resb) % modval;}int main() { int n =3, k =15; ভেক্টর<ভেক্টর > ম্যাট ={{4, 3, 6}, {5, 9, 7}, {1, 2, 8}}; সমাধান (n, k, mat); রিটার্ন 0;
ইনপুট
3, 15, {{4, 3, 6}, {5, 9, 7}, {1, 2, 8}}
আউটপুট
36