QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#184640#6744. Squarebulijiojiodibuliduo#AC ✓23ms3804kbC++1.2kb2023-09-21 00:49:272023-09-21 00:49:27

Judging History

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

  • [2023-09-21 00:49:27]
  • 评测
  • 测评结果:AC
  • 用时:23ms
  • 内存:3804kb
  • [2023-09-21 00:49:27]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef basic_string<int> BI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}()); 
const ll mod=998244353;
int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head

/*const int N=1010;*/

pair<ll,ll> getp(ll x) {
	ll y=floor(sqrt(2*x)+1.5);
	while (y*(y-1)/2<x) y++;
	while ((y-1)*(y-2)/2>=x) --y;
	return mp(y,y*(y-1)/2-x);
}

ll x,y;
ll solve() {
	scanf("%lld%lld",&x,&y);
	if (x>=y) {
		return x-y;
	}
	auto [x1,x2]=getp(x);
	auto [y1,y2]=getp(y);
	//printf("%lld %lld %lld %lld\n",x1,x2,y1,y2);
	if (y2>=x2) return y1-x1+y2-x2;
	return x-((x1-2)*(x1-1)/2-y2)+y1-x1+1;
}

int _;
int main() {
	for (scanf("%d",&_);_;_--) {
		printf("%lld\n",solve());
	}
}

详细

Test #1:

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

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

score: 0
Accepted
time: 23ms
memory: 3796kb

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