이 튜토리얼에서는 주어진 인덱스를 업데이트하고 범위 내에서 gcd를 찾는 쿼리를 찾는 프로그램에 대해 논의할 것입니다. 이를 위해 정수와 Q 쿼리가 포함된 배열이 제공됩니다. 우리의 임무는 주어진 쿼리의 결과를 찾는 것입니다(주어진 값을 X로 업데이트하고 두 개의 주어진 값 사이에서 gcd를 찾는 것). 예시 #include <bits/stdc++.h> using namespace std; //getting middle index int findMiddle(int s, int e) { return
이 튜토리얼에서는 BIT를 사용하여 유색 나무의 하위 트리에서 고유한 색상의 수를 쿼리하는 프로그램에 대해 설명합니다. 이를 위해 각 노드에 주어진 배열로 표시된 색상이 있는 루트 트리가 제공됩니다. 우리의 임무는 트리에서 주어진 노드 아래에 있는 모든 고유한 색상의 노드를 찾는 것입니다. 예시 #include<bits/stdc++.h> #define MAXIMUM_COLOUR 1000005 #define MAXIMUM_NUMBER 100005 using namespace std; vector<int> tre
이 튜토리얼에서는 L번째 가장 작은 숫자와 R번째로 작은 숫자 사이의 절대 차이를 반환하는 쿼리를 찾는 프로그램에 대해 논의할 것입니다. 이를 위해 정수와 Q 쿼리가 포함된 배열이 제공됩니다. 우리의 임무는 L번째로 작은 값과 R번째로 작은 값의 인덱스 사이의 절대 차이를 찾는 것입니다. 예시 #include <bits/stdc++.h> using namespace std; //returning the result of a query int respondingQuery(pair<int, int> arr[],
이 튜토리얼에서는 LCM이 최대가 되도록 N보다 작거나 같은 3개의 정수를 찾는 프로그램에 대해 논의할 것입니다. 이를 위해 정수 값이 제공됩니다. 우리의 임무는 LCM이 최대가 되도록 주어진 값보다 작은 다른 세 개의 정수를 찾는 것입니다. 예 #include <bits/stdc++.h> using namespace std; //finding three integers less than given value //having maximum LCM void findMaximumLCM(int n) {  
이 튜토리얼에서는 트리에서 조상-후손 관계에 대한 쿼리를 찾는 프로그램에 대해 논의할 것입니다. 이를 위해 루트 트리와 Q 쿼리가 제공됩니다. 우리의 임무는 쿼리에 주어진 두 루트가 다른 루트의 조상인지 아닌지를 찾는 것입니다. 예시 #include <bits/stdc++.h> using namespace std; //using DFS to find the relation between //given nodes void performingDFS(vector<int> g[], int u, int parent,
숫자로 채워진 정사각형 미로가 있다고 가정합니다. 모서리 셀에서 중간 셀까지의 모든 경로를 찾아야 합니다. 여기에서 우리는 셀에서 위, 아래, 오른쪽, 왼쪽의 4방향으로 정확히 n 단계를 진행할 것입니다. 여기서 n은 셀의 값입니다. 따라서 셀 [i,j]에서 셀 [i+n,j]에서 [i-n, j], [i, j+n] 및 [i, j-n]으로 이동할 수 있습니다. 여기서 n은 셀 [ 나, 지]. 따라서 입력이 다음과 같으면 3 4 4 4 7 3 4 6 3 6 7 5 6 6 2 6 6 2 3 3 4 3 2 5 4 7 2 6 5 5 1
k개의 서로 다른 목록이 있다고 가정합니다. 요소가 정렬됩니다. k개의 서로 다른 목록 각각에서 적어도 하나의 숫자를 포함하는 가장 작은 범위를 검색해야 합니다. 여기서 범위 [a,b]는 b-a
하나의 이진 검색 트리(BST)와 다른 대상 값이 있다고 가정합니다. 주어진 BST에서 목표에 가장 가까운 k 값을 찾아야 합니다. 여기서 목표 값은 부동 소수점 숫자입니다. k는 항상 유효하고 k ≤ 총 노드라고 가정할 수 있습니다. 따라서 입력이 다음과 같으면 target =3.714286, k =2이면 출력은 [4,3]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − pushSmaller() 함수를 정의하면 node,stack st 및 target이 사용됩니다. 노드가 없는 동안 수행 -
L과 R만 포함하는 문자열이 있다고 가정하고 이것은 각각 왼쪽 회전과 오른쪽 회전을 나타내며 피벗의 최종 방향을 찾아야 합니다. 여기서 방향은 북쪽(N), 동쪽(E), 남쪽(S), 서쪽(W)입니다. 나침반에서 중심축이 북쪽(N)을 가리키고 있다고 가정합니다. 따라서 입력이 RRRLRLR과 같으면 초기 방향이 N이므로 출력은 E가 될 것입니다. RR은 S를 가리키고 LR은 동일한 N을 다시 가리키고 LL은 이전 위치 N을 가리킬 것입니다. R은 E를 가리킬 것입니다. 따라서 E가 마지막입니다. 이 문제를 해결하기 위해 다음 단계를
N개의 숫자로 구성된 배열이 있다고 가정하고 배열의 각 요소는 하나의 요소를 제외하고 동일한 횟수(m번, 이것도 제공됨)로 나타납니다. 이 요소를 찾아야 합니다. 따라서 입력이 A =[6, 2, 7, 2, 2, 6, 6], m =3인 경우 출력은 7이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − INT_SIZE :=8 * 정수형 변수의 크기 INT_SIZE 크기의 배열 수를 정의합니다. 0으로 채우기 initialize i :=0의 경우, i
배열 A가 있다고 가정합니다. 이 배열에는 두 번 발생하는 다른 숫자가 있습니다. 그러나 한 번 나타나는 숫자는 하나뿐입니다. 해당 배열에서 해당 요소를 찾아야 합니다. A =[1, 1, 5, 3, 2, 5, 2]라고 가정하면 출력은 3이 됩니다. 각 숫자가 두 번 있으므로 XOR을 수행하여 해당 요소를 제거할 수 있습니다. y XOR y =0을 알고 있기 때문에 이 문제를 해결하기 위해 다음 단계를 따릅니다. 하나의 변수로 res =0 배열 A의 각 요소 e에 대해 res :=res XOR e를 수행합니다. 반
2D 행렬 매트와 값 K가 있다고 가정하면 합이 K와 같은 가장 긴 직사각형 부분행렬을 찾아야 합니다. 따라서 입력이 다음과 같으면 2 8 -5 6 -7 7 8 -3 11 -14 4 3 -4 3 1 10 K =9 그러면 출력은 왼쪽 위 지점이 (1, 0)이고 오른쪽 아래 지점이 (3, 2)입니다. -7 7 8 11 -14 4 -4 3 1 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 최대 :=100 sum_k() 함수를 정의하면 하나의 배열 arr, start, end, n, k,가 필요합니다
서로 다른 숫자의 배열이 있다고 가정합니다. 배열의 주어진 숫자 중 일부를 임의의 순서로 연결하여 생성할 수 있는 3의 가장 큰 배수를 찾아야 합니다. 답변이 매우 클 수 있으므로 문자열로 만드십시오. 응답이 없으면 빈 문자열을 반환합니다. 따라서 입력이 [7,2,8]과 같으면 출력은 87이 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 하나의 2D 배열 d를 정의하면 3개의 행이 있습니다. 배열 숫자 정렬 합계 :=0 초기화 i :=0의 경우, i <자릿수 크기일 때 업데이트(i를 1만큼 증
n개의 숫자를 가진 두 개의 배열 A와 B가 있다고 가정하면 (A[i] + B[ i]) % n 재정렬 후 사전순으로 가장 작습니다. 마지막으로 사전순으로 가능한 가장 작은 시퀀스를 반환합니다. 따라서 입력이 A ={1, 2, 3, 2}, B ={4, 3, 2, 2}인 경우 출력은 [0, 0, 1, 2]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − n :=a의 크기 하나의 지도 my_map 정의 한 세트 my_set 정의 initialize i :=0의 경우, i
A 쌍의 배열이 있다고 가정합니다. 최대 K 쌍을 선택하기 위한 최대 비용을 찾아야 합니다. 이 경우 쌍 유형 요소의 배열 비용은 선택한 쌍의 첫 번째 요소와 선택한 쌍의 두 번째 요소 중 가장 작은 요소의 합을 곱한 값입니다. 예를 들어, 이러한 쌍이 (4, 8), (10, 3) 및 (3, 6)으로 선택되면 비용은 K=3인 경우 (4+10+3)*(3) =51이 됩니다. 따라서 입력이 A =[(15, 5), (65, 25), (35, 20), (20, 5), (35, 20), (15, 18), (3, 8)과 같은 경우 ), (1
N개의 다른 직사각형의 너비와 높이가 있다고 가정합니다. 직사각형을 다른 직사각형에 삽입한 후 남은 직사각형의 최소 수를 찾아야 합니다. 따라서 W1 및 W2가 각각 직사각형 R1 및 R2의 너비인 경우. 그리고 H1과 H2는 각각 R1과 R2의 높이이고, W1
숫자 N이 있다고 가정해 보겠습니다. 이것은 숫자 줄에 있는 사람의 초기 위치를 나타냅니다. 왼쪽으로 갈 확률인 L도 있습니다. N 지점에서 N 이동을 완료한 후 숫자 라인의 모든 지점에 도달할 확률을 찾아야 합니다. 각 이동은 왼쪽 또는 오른쪽이 될 수 있습니다. 따라서 입력이 n =2, l =0.5와 같으면 출력은 [0.25, 0, 0.5, 0, 0.25]가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − 높음 :=1 - 낮음 n+1 x 2*n+1 크기의 배열 A를 정의하고 0으로 채움 A[1,
N개의 서로 다른 노드와 M개의 간선이 있는 가중치가 부여된 무방향 그래프가 있다고 가정하고 일부 노드는 좋은 노드입니다. 우리는 두 개의 서로 다른 좋은 노드 쌍 사이의 최단 거리를 찾아야 합니다. 주어진 다이어그램에서 다음 그래프의 노란색은 좋은 노드로 간주됩니다. 따라서 입력이 다음과 같으면 좋은 노드의 쌍과 그들 사이의 거리가 다음과 같기 때문에 출력은 11이 됩니다. (1에서 3) 거리가 11, (3에서 5) 거리가 13, (1에서 5) 거리가 24이고, 그 중 11개가 최소값입니다. 이 문제를 해결하기 위해 다음
문자열 s가 있고 단어가 거의 없는 또 다른 목록이 있다고 가정합니다. 이 단어는 길이가 같습니다. 단어의 각 단어를 중간 문자 없이 정확히 한 번 연결하는 s에서 부분 문자열의 모든 시작 인덱스를 찾아야 합니다. 따라서 입력이 wordgoodgoodgoodword이고 단어가 [word,good]이면 출력은 [0,12]가 됩니다. 인덱스 0과 12로 시작하는 부분 문자열이 wordgood과 goodword이기 때문입니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − ok()라는 메서드를 정의하면 문자열 s, 매핑 w
f(x) =(x^6 + x^2 + 9894845) % 971과 같은 함수를 제공했다고 가정합니다. 이제 x의 주어진 값에 대해 값을 찾아야 합니다. f(x). 따라서 입력이 5와 같으면 출력은 469가 됩니다. 이 문제를 해결하기 위해 다음 단계를 따릅니다. − power_mod() 함수를 정의합니다. 기본, 지수, 계수, base :=기본 모듈러스 결과 :=1 0일 때 − 지수가 홀수이면 - 결과 :=(결과 * 기본) 모듈러스 base :=(base * base) 모듈러스 지수 =지