Supposons que nous ayons trois nombres N, M et K. Il y a N lignes horizontales et M lignes verticales. Nous écrirons des entiers compris entre 1 et K dans chaque cellule et définirons les séquences A et B telles que −
pour chaque i compris entre 1 et N, A[i] est la valeur minimale de tous les éléments de la ligne i
Pour chaque j compris entre 1 et M, B[j] est la valeur maximale de tous les éléments de la colonne j
Nous devons trouver la quantité (A, B). Si la réponse est trop grande, le résultat modulo 998244353 est renvoyé.
Donc, si l'entrée est N = 2 ; M = 2 ; K = 2, la sortie sera 7 car (A[1], A[2], B[1], B[2]) peut être ( 1 ,1,1,1), (1,1,1,2), (1,1,2,1), (1,1,2,2), (1,2,2,2), ( 2 ,1,2,2) ou (2,2,2,2).
Pour résoudre ce problème, nous suivrons les étapes suivantes :
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
Voyons l'implémentation ci-dessous pour mieux comprendre - La traduction chinoise de
#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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!