QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#132662#6744. Squarebucketpotato#AC ✓134ms3464kbC++201.4kb2023-07-31 00:23:062023-07-31 00:23:08

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-31 00:23:08]
  • 评测
  • 测评结果:AC
  • 用时:134ms
  • 内存:3464kb
  • [2023-07-31 00:23:06]
  • 提交

answer

#include "bits/stdc++.h"

using namespace std;

#define ll long long
#define ld long double

// #define DEBUG

#ifdef DEBUG
const int MAXN = 50;
int ta[MAXN];
#endif

__int128 comp(__int128 fv, __int128 cn, __int128 ss) {

  __int128 ans = (cn * ss);
  ans += (cn * (cn - 1)) / 2;

  return ans + fv;

}

ll get(ll x) {

  long double ss = sqrtl((long double)(x * 2));

  ll mss = (ss + 1.5);

  return mss;

}

ll solve(ll x, ll y) {

  ll mss = get(x);

  __int128 lo = 0, hi = 1000000000000ll;
  while (lo != hi) {

    __int128 avg = (lo + hi) / 2;

    if (comp(x, avg, mss) >= (__int128)y) hi = avg;
    else lo = avg + 1;

  }

  __int128 res = comp(x, lo, mss);

  __int128 ans = lo + (res - y);

  return ans;

}

ll maxv(ll x) {

  ll lo = 1, hi = 1e18;
  while (lo != hi) {
    ll avg = (lo + hi + 1) / 2;
    if (get(avg) > x) hi = avg - 1;
    else lo = avg;
  }

  return lo;

}

int main() {
  cin.tie(0)->sync_with_stdio(0);
  cin.exceptions(cin.failbit);

  int t; cin >> t;
  while (t--) {

    ll x, y; 
    cin >> x >> y;

    ll ans = solve(x, y);

    if (x > 1 && y > x) {

      ll mss = get(x);
      ll msy = get(y);

      ll df = maxv(msy) - y;

      ll nch = maxv(mss - 1) - df;

      if (nch > 0) {
        ans = min(ans, solve(nch, y) + (x - nch));
      }

    }

    cout << ((ll)ans) << "\n";

  }

}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3464kb

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

score: 0
Accepted
time: 134ms
memory: 3384kb

input:

100000
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 ...

output:

0
2
1
4
3
2
6
5
4
3
8
7
6
5
4
10
9
8
7
6
5
12
11
10
9
8
7
6
14
13
12
11
10
9
8
7
16
15
14
13
12
11
10
9
8
18
17
16
15
14
13
12
11
10
9
20
19
18
17
16
15
14
13
12
11
10
22
21
20
19
18
17
16
15
14
13
12
11
24
23
22
21
20
19
18
17
16
15
14
13
12
26
25
24
23
22
21
20
19
18
1
0
2
2
1
3
4
3
2
4
6
5
4
3
5
...

result:

ok 100000 numbers