C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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


N、M、Kの3つの数値があるとします。N個の水平方向の行とM個の垂直方向の行があります。各セルに1からKまでの整数を書き込み、-

のようにシーケンスAとBを定義します。
  • 1からNの範囲の各iについて、A[i]はi番目の行のすべての要素の最小値です

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

ペアの数(A、B)を見つける必要があります。答えが大きすぎる場合は、結果mod998244353を返します。

したがって、入力がN=2のような場合。 M =2; K =2の場合、(A [1]、A [2]、B [1]、B [2])は(1,1,1,1)、(1,1、)であるため、出力は7になります。 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;
}

入力

2, 2, 2

出力

7

  1. C ++のバイナリツリーで最大(または最小)を見つける

    この問題では、二分木が与えられます。私たちのタスクは、バイナリツリーで最大(または最小)を見つけることです。 問題の説明: 二分木で最大値と最小値を持つ二分木のノードを見つける必要があります。 問題を理解するために例を見てみましょう。 入力: 出力: 最大=9、最小=1 ソリューションアプローチ 二分木の最大ノードを見つける必要があります。これを行うには、リーフノードに到達するまでポインタを移動し、ツリーの最大ノードを見つけます。 ソリューションの動作を説明するプログラム 例 #include <iostream> using namespace s

  2. 配列内の最大要素と最小要素を見つけるC#プログラム

    すべての要素を比較できるように、最小要素と最大要素を最初の要素に設定します。 最大に。 if(arr[i]>max) {    max = arr[i]; } 最低限。 if(arr[i]<min) {    min = arr[i]; } 次のコードを実行して、最大要素と最小要素の位置を見つけることができます。 例 using System; public class Demo {    public static void Main() {       int[] arr = new