在 C++ 中查詢長度為 L 的成對神奇字串的數量。


假設我們有兩個字串 str1 和 str2,我們必須找出長度為 L 的神奇字串對數量。如果每個索引 I 的 str1[i] < str2[i],則兩個字串將是神奇的。我們必須計算對的數量,因為數字很大,然後使用模 109 返回答案。字串將僅包含小寫字母。

方法很簡單。正如我們所見,如果長度為 L = 1,並且索引 i = 1 保持為“a”,在 str1 中,則 str2 的索引 i = 1 將從“b”保持到“z”的 25 種組合,對於下一個字元,它將為 24 種組合,因此它將為 25 + 24 + . . . + 1 = 325。現在對於 L = 2,它將為 3252。對於長度 L,它將為 325L。如果它很大,請查詢模 109。

示例

 線上演示

#include<iostream>
#include<cmath>
using namespace std;
int power(int a, unsigned int b, int mod) {
   int res = 1;
   a = a % mod;
   while (b > 0) {
      if (b & 1)
         res = (res * a) % mod;
      b = b >> 1;
      a = (a * a) % mod;
   }
   return res;
}
int main() {
   int L = 2, P = pow(10, 9);
   int res = power(325, L, P);
   cout << "Combinations: " << res << endl;
}

輸出

Combinations: 105625

更新於: 2019 年 10 月 30 日

130 次瀏覽

Kickstart Your Career

透過完成課程獲得認證

開始
廣告
© . All rights reserved.