Logo wfirstzhang 的博客

博客

#517. CF55D Beautiful numbers(不卡常版) 题目资源

...
wfirstzhang
2026-01-23 08:41:24
密码是111111

517data

#include "testlib.h"

int main(int argc, char** argv) {
    using namespace std;
    registerGen(argc, argv, 1);
    ofstream fout(opt(1));
    int64_t ll = opt<long long>("ll");
    int64_t rr = opt<long long>("rr");
    ensure(ll < rr);
    fout << opt<int>("t") << '\n';
    for (int i = 0; i < opt<int>("t"); i++)
    {
        int64_t l = rnd.next(ll, rr);
        int64_t r = rnd.next(ll, rr);
        if (l > r)
            swap(l, r);
        fout << l << ' ' << r << '\n';
    }
    return 0;
}
#include "testlib.h"

int main(int argc, char** argv) {
    using namespace std;
    registerGen(argc, argv, 1);
    for (int i = 1; i <= 10; i++)
    {
        int t = rnd.wnext(1, 10, 3);
        system(("../517/gen ../517/t" + to_string(i) + ".in -t " + to_string(t)
                + " -ll 1 -rr 100000").c_str());
        system(("../main < ../517/t" + to_string(i) + ".in"
                " > ../517/t" + to_string(i) + ".out").c_str());
    }
    for (int i = 11; i <= 50; i++)
    {
        int t = rnd.wnext(1, 10, 5);
        system(("../517/gen ../517/t" + to_string(i) + ".in -t " + to_string(t)
                + " -ll 1 -rr 9000000000000000000").c_str());
        system(("../main < ../517/t" + to_string(i) + ".in"
                " > ../517/t" + to_string(i) + ".out").c_str());
    }
    return 0;
}

517std

//贴上来供大家一起学习
//来自CodeForces #637114
#include <cstdio>
#include <cstring>
#define forn(i,n) for(int i=0;i<(int)n;i++)
typedef long long int64;

const int N = 2521, K = 48, N2 = 252;
int gcd(int& a, int b) { return b == 0 ? a : gcd(b, a % b); }
int LCM[10][K], len, a[20], t, d[K], o[N];

inline int lcm(const int& a, const int& b) {
  if (!b) return a;
  if (LCM[b][a] != -1) return LCM[b][a];
  return LCM[b][a] = o[d[a] * b / gcd(d[a], b)];
}

int64 rez[20 * K * N2], l, r;

int64 get_ans(int len, const bool les, int lc, int mod) {
  if (len == 0)
    return mod % d[lc] == 0 ? 1 : 0;
  if (mod >= N2)
    mod -= N2;
  int h = (len + (lc + mod * K) * 20);
  if (les && rez[h] != -1)
    return rez[h];
  len--;
  int W = (len == 0 ? (N - 1) : N2);
  int64 ret = 0;
  int u = (mod * 10) % W;
  if (les)
    forn(q, 10)
      ret += get_ans(len, true, lcm(lc, q), u + q);
  else
  {
    forn(q, a[len])
      ret += get_ans(len, true, lcm(lc, q), u + q);
    ret += get_ans(len, false, lcm(lc, a[len]), (mod * 10 + a[len]) % W);
  }
  len++;
  if (les)
    return rez[h] = ret;
  return ret;
}

inline int64 ans(int64 x) {
  len = 0;
  while (x > 0) a[len++] = x % 10, x /= 10;
  return get_ans(len, false, 0, 0);
}

int main() {
  memset(LCM, -1, sizeof LCM);
  memset(rez, -1, sizeof rez);
  for (int i = 1; i < N; i++)
    if ((N - 1) % i == 0)
      d[t] = i, o[i] = t++;
  for (scanf("%d", &t); t > 0; t--)
  {
    scanf("%lld%lld", &l, &r);
    printf("%lld\n", (ans(r) - ans(l - 1)));
  }
}

517val

#include "testlib.h"

constexpr long long Rm = 9000000000000000000;

int main() {
    using namespace std;
    registerValidation();
    int t = inf.readInt(1, 10, "t");
    inf.readEoln();
    for (int i = 0; i < t; i++)
    {
        auto l = inf.readLong(1, Rm, "l");
        inf.readSpace();
        auto r = inf.readLong(1, Rm, "r");
        inf.readEoln();
        ensure(l <= r);
    }
    inf.readEof();
    return 0;
}

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。