QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#141194#6744. Square275307894aAC ✓95ms3728kbC++141.1kb2023-08-17 09:22:112023-08-17 09:22:15

Judging History

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

  • [2023-08-17 09:22:15]
  • 评测
  • 测评结果:AC
  • 用时:95ms
  • 内存:3728kb
  • [2023-08-17 09:22:11]
  • 提交

answer

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;using LL=__int128;
const int N=1e3+5,M=2e3+5,K=63,mod=998244353,Mod=mod-1;const db eps=1e-9;const ll INF=1e18+7;mt19937 rnd(time(0));
ll x,y;
ll opt(ll x){return sqrtl(2*x)+1.5;}
ll reduce(ll x){
	ll g=opt(x);
	ll l=0,r=x,mid;while(l+1<r) mid=l+r>>1,(opt(mid)^g?l:r)=mid;
	return l;
}
ll calc(ll x,ll y){
	ll l=-1,r=2e9+7,mid,d=opt(x);
	while(l+1<r) mid=l+r>>1,(x+(d+d+mid-1)*mid/2>=y?r:l)=mid;
	// cerr<<x+(d+d+r-1)*r/2<<'\n';
	return r+x+(d+d+r-1)*r/2-y;
}
void Solve(){
	int i,j;scanf("%lld%lld",&x,&y);
	ll ans=calc(x,y);
	ll z=reduce(x);
	ans=min(ans,calc(z,y)+x-z);
	printf("%lld\n",ans);
}
int main(){
	int t;scanf("%d",&t);while(t--) Solve();
}

詳細信息

Test #1:

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

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

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

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