QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#270440 | #6744. Square | Satsuki | AC ✓ | 57ms | 3532kb | C++20 | 1.2kb | 2023-11-30 21:05:29 | 2023-11-30 21:05:30 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e7 + 5;
const int mod = 998244353;
#define endl '\n'
typedef long long ll;
bool check(int m,int x)
{
return (__int128)m * (m + 1) / 2 >= x;
}
int findblk(int x)
{
int l = 1,r = 1e18;
while(l < r)
{
int mid = l + r >> 1;
if(check(mid, x))r = mid;
else l = mid + 1;
}
return l;
}
int blk(int x)
{
return x * (x + 1) / 2;
}
int findlast(int x)
{
int pos = findblk(x);
return blk(pos) - x + 1;
}
// 1000000000000000000
void solve()
{
int a,b;cin >> a >> b;
if(a >= b)
{
cout << a - b << endl;
}
else
{
int pa = findlast(a), pb = findlast(b);
int ida = findblk(a), idb = findblk(b);
int res = idb - ida;
if(pb >= pa)res += pb - pa;
else res += pb + idb + 1 - pa + 1;
int tmp = 0;
tmp += max(pb + 1, ida + 1) - pa;
tmp += pb - 1;
tmp += idb - ida + 1;
res = min(res, tmp);
cout << res << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);
int cnt = 2;
int T;cin >> T;
while(T--)
solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3532kb
input:
2 5 1 1 5
output:
4 3
result:
ok 2 number(s): "4 3"
Test #2:
score: 0
Accepted
time: 57ms
memory: 3332kb
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