QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#227587#6744. SquareBILLION_mengyiAC ✓51ms3412kbC++201.7kb2023-10-27 19:14:042023-10-27 19:14:04

Judging History

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

  • [2023-10-27 19:14:04]
  • 评测
  • 测评结果:AC
  • 用时:51ms
  • 内存:3412kb
  • [2023-10-27 19:14:04]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N=1000010;
const ll inf=0x3f3f3f3f3f3f3f3f;

ll check(__int128 x,__int128 w)
{
	__int128 l=(x*(x-1)/2);
	__int128 r=((x+1)*(x)/2);
	if(w>l&&w<=r) return 1;
	else if(w>r)
	{
		return 2;
	}
	else
	{
		return 0;
	}
}

void solve()
{
	ll n,m;
	cin>>n>>m;
	if(m<=n)
	{
		cout<<n-m<<"\n";
		return ;
	}
	else
	{
		ll l=1,r=inf;
		ll l1,l2,r1,r2;
		ll lestr=0;
		ll ned=inf;
		ll id1=0,id2=0;
		ll ans=inf;
		while(l<r)
		{
			ll mid=l+r>>1;
			if(mid==2)
			{
				ll wwww=0;
			}
			ll w=check(mid,n);
			if(w==1)
			{
				l1=(mid*(mid-1)/2)+1;
				r1=((mid+1)*(mid)/2);
				id1=mid;
				if(l1!=1)
				{
					lestr=((mid-1)*(mid)/2);
					ned=n-lestr;
				}
				break;
			}
			else if(w==0)
			{
				r=mid;
			}
			else
			{
				l=mid+1;
			}
		}
		l=1,r=inf;
		while(l<r)
		{
			ll mid=l+r>>1;
			ll w=check(mid,m);
			if(w==1)
			{
				l2=(mid*(mid-1)/2)+1;
				r2=((mid+1)*(mid)/2);
				id2=mid;
				break;
			}
			else if(w==0)
			{
				r=mid;
			}
			else
			{
				l=mid+1;
			}
		}
		ll pos=0;
		if(id2==id1)
		{
			ans=1;
			pos=n+id1+1;
			ans+=pos-m;
			pos=r2;
			ans=min(ans,ned+(id2-id1+1)+pos-m);
		}
		else
		{
			ll res=id2-id1;
			pos=n+(id1+1+id1+res)*res/2;
			if(pos>=m)
			{
				ans=min(ans,res+pos-m);
			}
			else
			{
				res++;
				pos=n+(id1+1+id1+res)*res/2;
				ans=min(ans,res+pos-m);
			}
			pos=r2;
			ans=min(ans,ned+(id2-id1+1)+pos-m);
		}
		cout<<ans<<"\n";
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	ll T=1;
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

score: 0
Accepted
time: 51ms
memory: 3412kb

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