暴力C

#include <iostream>
using namespace std;
#define int long long
typedef unsigned long long ull;
#define js                     \
  ios::sync_with_stdio(false); \
  cin.tie(nullptr)
int getl(int x)//求位数
{
  if (x == 0)
    return 1;
  int i = 0;
  while (x) {
    i++;
    x /= 10;
  }
  return i;
}
int e[7] = {0, 10, (int)1e2, (int)1e3, (int)1e4, (int)1e5, (int)1e6};
signed main()
{
  js;
  int n, c;
  cin >> n >> c;
  int cl = getl(c);
  int l = n - cl - 2;
  if (cl < (l + 1) / 2 || cl > l) {
    cout << '0';
    return 0;
  }
  int ans = 0, al, bl;
  al = cl;
  bl = l - al;
  for (int a = c; a >= e[cl - 1]; a--) {
    if (getl(c - a) == bl) {
      ans++;
      if (al != bl)//颠倒A、B的位置
        ans++;
    }
  }

  al = cl - 1;
  bl = l - al;
  if (al >= bl) {
    for (int a = e[al] - 1; a >= e[al - 1]; a--) {
      if (getl(c - a) == bl) {
        ans++;
        if (al != bl)
          ans++;
      }
    }
  }
  cout << ans;
  return 0;
}

贪心E

#include <iostream>
using namespace std;
#define int long long
typedef unsigned long long ull;
#define js                     \
  ios::sync_with_stdio(false); \
  cin.tie(0)

const int N = 1e6 + 5;

int getl(int x)
{
  int res = 0;
  while (x) {
    res++;
    x /= 10;
  }
  return res;
}

int a[20], b[20];

signed main()
{
  js;
  int n;
  cin >> n;
  int l1, r1, l2, r2;
  while (n--) {
    cin >> l1 >> r1 >> l2 >> r2;
    int smax = r1 + r2, smin = l1 + l2;
    smax += 1;//这一步可以简化5999999···类似情况变成普遍情况来处理
    int lmax = getl(smax), lmin = getl(smin);
    int ans = 0;
    for (int i = 1; i < 20; i++) {
      a[i] = smax % 10;
      b[i] = smin % 10;
      smax /= 10;
      smin /= 10;
    }
    for (int i = 19; i > 0; i--) {
      if (a[i] == b[i])
        ans += a[i];
      else {
        ans += a[i] - 1;//我贪
        ans += (i - 1) * 9;
        break;
      }
    }
    cout << ans << "\n";
  }
  return 0;
}