QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#407876 | #6744. Square | lrher | AC ✓ | 479ms | 3908kb | C++14 | 2.0kb | 2024-05-09 13:47:12 | 2024-05-09 13:47:12 |
Judging History
answer
#include<set>
#include<map>
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<deque>
#include<string>
#include<bitset>
#include<vector>
#include<cstdio>
#include<random>
#include<complex>
#include<cstdlib>
#include<climits>
#include<iomanip>
#include<cstring>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
// #define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
// char buf[1<<21],*p1=buf,*p2=buf;
const long long _base=107374183;
int writetemp[30];
inline int read()
{
char c=getchar();int x=0;bool f=0;
for(;!isdigit(c);c=getchar())f^=!(c^45);
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
if(f)x=-x;
return x;
}
inline void write(int x)
{
int tot=(x==0);
writetemp[1]=0;
while(x) writetemp[++tot]=x%10,x/=10;
while(tot) putchar(writetemp[tot--]+'0');
putchar('\n');
return ;
}
long long ans;
long long calc(long long x)
{
return (x+1)*x/2;
}
long long add(long long x)
{
return sqrt(x+x)+1.5;
}
int T;
long long x,y;
long long step(long long x,long long y)
{
// add(x)~add(y)
if(x>=y) return x-y;
if(add(x)==add(y)) return x+add(x)-y+1;
long long now=x;
now+=calc(add(y)-1)-calc(add(x)-1);
// printf("%lld %lld %lld %lld %lld\n",now,add(x),add(y),now-y,add(y)-add(x));
// printf("%lld\n",now+add(now)-y);
// if(add(now)!=add(y)) printf("cnm\n");
if(now>=y) return now-y+add(y)-add(x);
return now+add(now)-y+add(y)-add(x)+1;
}
int main()
{
// freopen("s.out","r",stdin);
// freopen("a.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&x,&y),ans=step(x,y);
long long now=add(x)-1;
long long val=calc(now-1);
for(long long i=val;i>=max(1ll,val-1000);i--) ans=min(ans,step(i,y)+x-i);
// if(ans==1349069334) printf("x:%lldy:%lld\n",x,y);
printf("%lld\n",ans);
}
return 0;
}
/*
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3864kb
input:
2 5 1 1 5
output:
4 3
result:
ok 2 number(s): "4 3"
Test #2:
score: 0
Accepted
time: 479ms
memory: 3908kb
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