QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#221868 | #6744. Square | ycccc319 | AC ✓ | 102ms | 3596kb | C++17 | 1.6kb | 2023-10-21 14:55:40 | 2023-10-21 14:55:41 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
//__int128_t f(ll x)
//{
// return floor(sqrtl(2*x)+1.5);
//}
//__int128_t a(ll x,__int128_t n)
//{
// if(n==1)
// {
// return x;
// }
// else
// {
// return x+(n-1)*f(x)+n*(n-1)/2;
// }
//}
//ll get(ll x,ll y) {
// if(y <= x)return x - y;
// ll l = 1, r = 1e18;
// while(l < r) {
// auto mid = l + r >> 1;
// if(a(x,mid) < y)l = mid + 1;
// else r = mid;
//// cout<<l<<" "<<r<<" "<<mid<<" "<<(ll)a(x,mid)<<endl;
// }
// return l;
//}
int64_t get(int64_t x) {
int64_t l = 0, r = 2e9;
int64_t ret{};
while(l < r) {
auto mid = l + r >> 1;
if(mid * (mid + 1) < x * 2)ret = mid, l = mid + 1;
else r = mid;
}return ret;
}
int main()
{
ll x,y;cin>>x;
int i = x,k{};
if(i > 50)i = 0,k++;
while(cin>>x>>y){
if(y <= x)cout<< x - y << "\n";
else {
ll d1 = get(x), d2 = get(y);
ll ax = d1 * (d1 + 1) / 2, ay = d2 * (d2 + 1) / 2;
ll now_x = x - ax, now_y = y - ay;
ll jmp = d2 - d1;
ll ny = max<ll>(1,now_y - jmp);
if(ny <= now_x) {
ll as = jmp + now_x - ny;
if(now_y - jmp < 1) {
as += (jmp - now_y + 1);
}
cout << as << '\n';
}else {
++jmp;
--ny;
jmp += d1 - ny + now_x;
cout << jmp << '\n';
}
}
}
}
//45 45415
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3596kb
input:
2 5 1 1 5
output:
4 3
result:
ok 2 number(s): "4 3"
Test #2:
score: 0
Accepted
time: 102ms
memory: 3592kb
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