ホームページ >バックエンド開発 >C++ >シーケンス内の最小要素と最大要素を保持するシーケンスのペアを見つけるための C++ プログラム

シーケンス内の最小要素と最大要素を保持するシーケンスのペアを見つけるための C++ プログラム

WBOY
WBOY転載
2023-09-05 23:29:061212ブラウズ

シーケンス内の最小要素と最大要素を保持するシーケンスのペアを見つけるための C++ プログラム

3 つの数字 N、M、K があるとします。横方向に N 行、縦方向に M 行あります。各セルに 1 から K までの整数を書き込み、それぞれ 1 から N i の範囲で -

  • となるようにシーケンス A と B を定義します。A[i] が最小値になります。 i 行目のすべての要素の値

  • 1 ~ M の範囲の各 j について、B[j] は j 列目の最小値 すべての要素の最大値要素

(A, B) の数を見つける必要があります。答えが大きすぎる場合は、998244353 を法とする結果が返されます。

入力が N = 2; M = 2; K = 2 の場合、 (A[1], A[2], B[1], B[2] ) であるため、出力は 7 になります。 (1,1,1,1)、(1,1,1,2)、(1,1,2,1)、(1,1,2,2)、(1,2,2, 2) のいずれかになります)、(2,1,2,2) または (2,2,2,2)。

手順

この問題を解決するには、次の手順に従います。

p := 998244353
Define a function power(), this will take a, b, and return (a^b) mod p
From the main method, do the following:
if n is same as 1, then:
   return power(K, m)
if m is same as 1, then:
   return power(K, n)
ans := 0
for initialize t := 1, when t <= K, update (increase t by 1), do:
   ans := (ans + (power(t, n) - power(t - 1, n) + p) mod p * power(K - t + 1, m)) mod p
return ans

理解を深めるために、以下の実装を見てみましょう。 -

#include <bits/stdc++.h>
using namespace std;

long p = 998244353;

long power(long a, long b, long ret = 1){
   for (; b; b >>= 1, a = a * a % p)
      if (b & 1)
         ret = ret * a % p;
   return ret;
}
long solve(int n, int m, int K){
   if (n == 1)
      return power(K, m);
   if (m == 1)
      return power(K, n);
   long ans = 0;
   for (long t = 1; t <= K; t++){
      ans = (ans + (power(t, n) - power(t - 1, n) + p) % p * power(K - t + 1, m)) % p;
   }
   return ans;
}
int main(){
   int N = 2;
   int M = 2;
   int K = 2;
   cout << solve(N, M, K) << endl;
}

Input

の中国語訳は次のとおりです:

Input

2, 2, 2

Output

7

以上がシーケンス内の最小要素と最大要素を保持するシーケンスのペアを見つけるための C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。