다음 제약 조건으로 이진 행렬에서 가능한 최대 1 수를 찾는 작업이 주어집니다.
X<=N인 경우 두 개의 정수 N 및 X가 제공됩니다. 이진 행렬의 크기는 N*N이어야 하고 크기 X*X의 모든 부분행렬은 최소한 하나의 0을 포함해야 합니다.
이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -
입력 - N=4, X=2
출력 − 12
설명 − 결과 행렬은 −
1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1
입력 - N=7, X=3
출력 − 45
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
1의 최대 수를 얻으려면 먼저 주어진 행렬에 필요한 최소 0 수를 찾아야 합니다.
모든 행렬에서 공통 패턴을 관찰하면 필요한 0의 수 =(N / X) 2
따라서 최대 1 수 =행렬의 총 요소 수 – 0 수\
-
MaxOne() 함수에서 int 유형의 변수 Z를 만들고 (N / X) 2 와 같은 필요한 최소 0 수를 저장합니다.
-
그런 다음 int 유형의 다른 변수 total =N*N을 초기화하여 행렬의 전체 크기를 저장합니다.
-
그런 다음 마지막으로 int as =total – Z를 초기화하여 최종 답변을 저장하고 as를 반환합니다.
예
#include <bits/stdc++.h>
using namespace std;
int MaxOne(int N, int X){
// Minimum number of zeroes that are needed
int Z = (N / X);
Z = Z * Z;
/* Totol elements in matrix = square of the size of the matrices*/
int total =N * N;
//Final answer
int ans = total - Z;
return ans;
}
int main(){
int N = 4;
int X = 2;
cout << MaxOne(N, X);
return 0;
} 출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다 -
12