指定された範囲内の数値、つまり偶数か奇数かのパリティの確率を求めます。クエリごとに、p と q を出力する必要があります。たとえば、確率を p / q で表します。
Input : N = 5, arr[] = { 6, 5, 2, 1, 7 } query 1: 0 2 2 query 2: 1 2 5 query 3: 0 1 4 Output : 0 3 4 1 2
この問題では、そのインデックスまでの奇数と偶数の値をそれぞれ含む 2 つの配列を維持します。これにより問題が単純化され、その数と範囲内に存在する要素の数を出力する必要があります。
この方法では、2 つの配列を維持します。これらには、i 番目のインデックスまでに見つかった偶数と奇数の数が含まれており、前置和の問題のように問題を解決します。
#include <bits/stdc++.h> using namespace std; void solve(int arr[], int n, int Q,int query[][3]){ int even[n + 1]; // our array for counting the number of evens find till ith index int odd[n + 1]; // our array for counting the number of odds find till ith index even[0] = 0; odd[0] = 0; // as we are doing 1 based indexing so we just set 0th index of both arrays to 0 for (int i = 0; i < n; i++) { if (arr[i] & 1) { // if we found odd number we increment odd odd[i + 1] = odd[i] + 1; even[i + 1] = even[i]; } else { // else we increment even even[i + 1] = even[i] + 1; odd[i + 1] = odd[i]; } } for (int i = 0; i < Q; i++) { // traversing the queries int r = query[i][2]; // right range int l = query[i][1]; // left range int k = query[i][0]; // type of query int q = r - l + 1; // number of elements in the given range int p; if (k) // k is the type of query and we are finding the //number of elements with same parity in the given range p = odd[r] - odd[l - 1]; else p = even[r] - even[l - 1]; if (!p) // if p is zero we simply print 0 cout << "0\n"; else if (p == q) // if p == q we print 1 cout << "1\n"; else { int g = __gcd(p, q); cout << p / g << " " << q / g << "\n"; // as p and shouldn't have a common gcd so we divide the gcd } } } int main(){ int arr[] = { 6, 5, 2, 1, 7 }; // given array int n = sizeof(arr) / sizeof(int); // size of our array int Q = 2; // number of our queries int query[Q][3] = {{ 0, 2, 2 },{ 1, 2, 5 }}; // given queries solve(arr, n, Q, query); return 0; }
0 3 4
上記のメソッドでは、2つの配列を維持してi番目までの見つかった値を計算します。偶数インデックスと奇数インデックスの数。ここで、指定された範囲内の偶数または奇数の数を見つけて、その数を出力し、要素の出現の合計数を出力する必要があります。
このチュートリアルでは、指定された範囲内の偶数または奇数の確率に関する問題を解決しました。また、この問題に対する C プログラムと、この問題を解決するための完全な方法 (通常の方法) も学びました。同じプログラムを C、Java、Python などの他の言語で書くことができます。このチュートリアルがお役に立てば幸いです。
以上がC++ 指定された範囲内の偶数または奇数の確率をクエリしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。