কম্পিউটার টিউটোরিয়াল

সি++-এ চেসবোর্ডে রূপান্তর (Transform to Chessboard)

মনে করুন, একটি N x N বোর্ড আছে যেটিতে শুধু ০ এবং ১ রয়েছে। প্রতিটি চলে আমরা যেকোনো ২টি সারি অথবা ২টি কলাম 스왪 করতে পারি। বোর্ডটিকে একটি "চেসবোর্ড" এ রূপান্তর করার জন্য ন্যূনতম চলে সংখ্যা বের করতে হবে। যদি সমাধান না থাকে, তবে -1 রিটার্ন করুন।

ইনপুট উদাহরণ:

















আউটপুট হবে ২। প্রথমে দুটি কলাম সোয়াপ করলে, তারপর দ্বিতীয় ও তৃতীয় সারি সোয়াপ করলে চেসবোর্ড পাওয়া যায়।

সমাধানের ধাপসমূহ

  • n := b.size()
  • সকল i, j এর জন্য যদি b[0][0] ^ b[0][j] ^ b[i][0] ^ b[i][j] != 0 হয়, তবে -1 রিটার্ন করুন
  • rowSum, colSum, rowSwap, colSwap := 0
  • i := 0 থেকে n-1 পর্যন্ত
    • rowSum += b[i][0], colSum += b[0][i]
    • rowSwap += (b[i][0] == i%2), colSwap += (b[0][i] == i%2)
  • যদি rowSum != n/2 এবং rowSum != (n+1)/2 হয়, -1 রিটার্ন করুন
  • যদি colSum != n/2 এবং colSum != (n+1)/2 হয়, -1 রিটার্ন করুন
  • যদি n%2 == 1 হয়
    • যদি colSwap%2 হয়, colSwap := n - colSwap
    • যদি rowSwap%2 হয়, rowSwap := n - rowSwap
  • অন্যথায়
    • colSwap := min(colSwap, n - colSwap)
    • rowSwap := min(rowSwap, n - rowSwap)
  • (rowSwap + colSwap) / 2 রিটার্ন করুন

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution { public:    int movesToChessboard(vector<vector<int>>& b) {       int n = b.size();       for(int i = 0; i < n; i++){          for(int j = 0; j < n; j++){             if(b[0][0] ^ b[0][j] ^ b[i][0] ^ b[i][j]) return -1;          }       }       int rowSum = 0;       int colSum = 0;       int rowSwap = 0;       int colSwap = 0;       for(int i = 0; i < n; i++){          rowSum += b[i][0];          colSum += b[0][i];          rowSwap += b[i][0] == i % 2;          colSwap += b[0][i] == i % 2;       }       if(rowSum != n/2 && rowSum != (n + 1)/2)return -1;       if(colSum != n/2 && colSum != (n + 1)/2)return -1;       if(n % 2 == 1){          if(colSwap % 2) colSwap = n - colSwap;          if(rowSwap % 2) rowSwap = n - rowSwap;       }else{          colSwap = min(colSwap, n - colSwap);          rowSwap = min(rowSwap, n - rowSwap);       }       return (rowSwap + colSwap)/2;    } }; main(){    Solution ob;    vector<vector<int>> v = {{0,1,1,0},{0,1,1,0},{1,0,0,1},{1,0,0,1}};    cout << (ob.movesToChessboard(v)); }

ইনপুট

{{0,1,1,0},{0,1,1,0},{1,0,0,1},{1,0,0,1}};

আউটপুট

2
  1. C++-এ N*N চেসবোর্ডে সর্বোচ্চ বিশপ বসানো

  2. C++-এ চেসবোর্ডে ঘোড়ার সম্ভাবনা

  3. C++-এ আইডেন্টিফায়ার (Identifiers)

  4. লিনাক্সে C++-এর জন্য সেরা IDE কী?