>  기사  >  백엔드 개발  >  시퀀스의 최소 및 최대 요소를 포함하는 시퀀스 쌍을 찾는 C++ 프로그램

시퀀스의 최소 및 최대 요소를 포함하는 시퀀스 쌍을 찾는 C++ 프로그램

WBOY
WBOY앞으로
2023-09-05 23:29:061161검색

시퀀스의 최소 및 최대 요소를 포함하는 시퀀스 쌍을 찾는 C++ 프로그램

N, M, K 세 개의 숫자가 있다고 가정합니다. N개의 가로 행과 M개의 세로 행이 있습니다. 각 셀에 1과 K 사이의 정수를 쓰고 1에서 N 범위의 모든 i에 대해 −

  • , A[i]가 i행에 있는 모든 요소의 최소값이 되도록 시퀀스 A와 B를 정의합니다

  • 1부터 M까지의 범위에 있는 모든 j에 대해 B[j]는 j열에 있는 모든 요소의 최대값입니다

(A, B) 수량을 찾아야 합니다. 대답이 너무 크면 모듈로 998244353 결과가 반환됩니다.

입력이 N = 2; M = 2; K = 2이면 (A[1], A[2], B[1], B[2])가 ( 1이 될 수 있기 때문에 출력은 7이 됩니다. ,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).

Steps

이 문제를 해결하기 위해 다음 단계를 따릅니다.

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

Example

더 나은 이해를 위해 아래 구현을 살펴보겠습니다. -

#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

출력

7

위 내용은 시퀀스의 최소 및 최대 요소를 포함하는 시퀀스 쌍을 찾는 C++ 프로그램의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제