QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#360487#6744. SquaresdnuwyAC ✓48ms3688kbC++171.4kb2024-03-21 20:13:162024-03-21 20:13:16

Judging History

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

  • [2024-03-21 20:13:16]
  • 评测
  • 测评结果:AC
  • 用时:48ms
  • 内存:3688kb
  • [2024-03-21 20:13:16]
  • 提交

answer

//Think twice,code once.
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define ff first
#define ss second
#define pii pair<int,int>
#define int long long
#define mem(i,n) memset(i,n,sizeof i)
#define dg(a) std::cout << #a << " = " << a << endl
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

void solve()
{
    int x,y;
    cin >> x >> y;
    if(x>=y)
    {
        cout << x-y << endl;
        return;
    }
    auto calc=[&](int num){
        __int128_t l=1,r=1e10;
        while(l<r)
        {
            __int128_t mid=l+r>>1;
            if(mid*(mid+1)/2>=num) r=mid;
            else l=mid+1;
        }
        return l;
    };
    __int128_t one=1;
    int cnt1=calc(x);
    int cnt2=calc(y);
    int t1=one*cnt1*(cnt1+1)/2-x+1;
    int t2=one*cnt2*(cnt2+1)/2-y+1;
    if(t2>=t1)
    {
        int ans=cnt2-cnt1+t2-t1;
        cout << ans << endl;
    }
    else
    {
        int ans1=0;
        ans1+=1;
        cnt1+=1;
        ans1+=cnt1-t1+t2;
        cnt1-=1;
        ans1+=cnt2-cnt1;
        int ans2=0;
        ans2+=cnt1-t1+t2;
        cnt1-=1;
        ans2+=cnt2-cnt1;
        cout << min(ans1,ans2) << endl;
    }
}

int32_t main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    int t = 1;
    std::cin >> t;
    while(t--) solve();
    return 0;
}

詳細信息

Test #1:

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

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

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

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