QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#568527#5117. Find Maximumxiaozhi#WA 1ms3688kbC++171.4kb2024-09-16 16:53:112024-09-16 16:53:11

Judging History

你现在查看的是最新测评结果

  • [2024-09-16 16:53:11]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3688kb
  • [2024-09-16 16:53:11]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int mod = 998244353;
const ll inf = 1e18;

vector<ll> p(50);
void init() {
  p[0] = 1;
  for (int i = 1; p[i - 1] * 3 <= inf; i++) p[i] = p[i - 1] * 3;
}

void solve() {
  ll l, r;
  cin >> l >> r;

  // vector<int> f(r + 1);
  // f[0] = 1;
  // int mx = 0;
  // for (int x = 1; x <= r; x++) {
  //   if (x % 3 == 0)
  //     f[x] = f[x / 3] + 1;
  //   else
  //     f[x] = f[x - 1] + 1;
  // }
  // for (int x = l; x <= r; x++)
  //   mx = max(mx, f[x]);
  // cerr << mx << "\n";

  ll ans = 0, cur = 37;
  while (p[cur] > r) cur--;
  ll y = r;
  while (y > 0) {
    ans += y % 3 + 1;
    y /= 3;
  }
  // cerr << ans << "\n";

  if ((r / p[cur]) % 3 > (l / p[cur]) % 3) {
    ans = max(ans, 3 * cur + 2 * ((r / p[cur]) % 3 != 1));
  }
  // cerr << ans << "\n";

  int pre = (r / p[cur]) % 3 + 1, ok = (r / p[cur]) % 3 > (l / p[cur]) % 3;
  cur--;
  while (cur > 0) {
    pre += (r / p[cur]) % 3 + 1;
    if ((r / p[cur]) % 3 == (l / p[cur]) % 3 &&
        !(ok && (r / p[cur]) % 3 == 0)) {
      cur--;
      continue;
    }
    ans = max(ans, pre - 1 + 3 * cur);
    break;
  }
  cout << ans << "\n";
}

signed main() {
  init();
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(10);
  int t = 1;
  cin >> t;
  while (t--) solve();
  return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3688kb

input:

10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

output:

3
3
4
5
3
4
5
4
5
5

result:

ok 10 numbers

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 3676kb

input:

5050
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1 61...

output:

2
3
3
4
5
5
5
6
6
6
6
6
6
7
7
7
8
8
8
8
8
8
8
8
8
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
10
10
10
10
10
10
10
10
10
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
3
3
4
5
5
5
6
6
6
6
6
6
7
7
7
8
8
8
8
8
8
8...

result:

wrong answer 500th numbers differ - expected: '7', found: '6'