样例没过,求调,悬关
查看原帖
样例没过,求调,悬关
726139
残阳如血楼主2024/6/21 21:07
#include <string>
#include <iostream>
#include <algorithm>
typedef long long lint;
const int N = 15, MAX = 10;

std::string a, b;
lint numa, numb, f[MAX][N];

std::string change(lint num) {
  std::string res = std::to_string(num) + " ";
  std::reverse(res.begin(), res.end());
  return res;
}

lint dp(const std::string n, lint pos, int num, bool lim, bool zero) {
  /*
  n 当前数字字符串
  pos 当前下标
  num 当前统计的数字
  lim 限制
  zero 前导零
  */
  if (!pos) return 0;
  if (!lim && !zero && ~f[num][pos]) return f[num][pos];
  lint res = 0; int t = n[pos] - '0';
  for (int i = 0; i <= (lim ? t : 9); ++i) {
    if (num == i) {
      if (i == 0) res += !zero;
      else ++res;
    }
    res += dp(n, pos - 1, num, lim & i == t, zero & !i);
  }
  if (!lim && !zero) f[num][pos] = res;
  return res;
}

int main() {
  std::cin >> numa >> numb, --numa;
  a = change(numa), b = change(numb);
  for (int i = 0; i < 10; ++i) {
    std::cout << dp(b, b.size() - 1, i, 1, 1) - dp(a, a.size() - 1, i, 1, 1) << " ";
  }
  std::cout << std::endl;
  return 0;
}
2024/6/21 21:07
加载中...