Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 행렬에 홀수 값이 있는 셀

<시간/>

행렬의 차원인 n과 m이 있다고 가정합니다. 이들은 0으로 초기화됩니다. 그리고 지수는 index[i] =[ri, ci]일 때 주어집니다. [ri, ci]의 각 쌍에 대해 ri 행과 ci 열의 모든 셀을 1씩 증가시켜야 합니다. 출력은 모든 인덱스에 증가를 적용한 후 행렬에서 홀수 값을 가진 셀의 수입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 홀수 :=0, x :=행렬의 행 개수 초기화
  • 매트릭스 매트 만들기
  • 0~x
      범위의 i에 대해
    • r =입력[i, 0], c =입력[i, 1],
    • 0 ~ m – 1 범위의 j에 대해
      • 매트[r, j] :=매트[r, j] + 1
    • 0 ~ n – 1 범위의 j에 대해
      • 매트[j, c] :=매트[j, c] + 1
  • 0 ~ n – 1 범위의 i에 대해
    • j의 경우 :=0 ~ m – 1
      • odd :=홀수 + mat[i, j] 비트 또는 1
  • 홀수 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
      int oddCells(int n, int m, vector<vector<int>>& in) {
      int odd = 0;
      int x = in.size();
      vector < vector <int> > mat(n, vector <int>(m));
      for(int i = 0; i < x ;i++){
         int r = in[i][0];
         int c = in[i][1];
         for(int j = 0; j < m; j++){
            mat[r][j]++;
         }
         for(int j = 0; j < n; j++){
            mat[j][c]++;
         }
      }
      for(int i = 0; i < n; i++){
         for(int j = 0; j < m; j++)odd += mat[i][j] & 1;
      }
      return odd;
   }
};
main(){
   Solution ob;
   vector<vector<int>> c = {{0,1},{1,1}};
   cout << ob.oddCells(2,3,c);
}

입력

2
3
{{0,1},{1,1}}

출력

6