QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#144377 | #6744. Square | qzzyq | AC ✓ | 49ms | 3768kb | C++14 | 1.8kb | 2023-08-21 16:27:41 | 2023-08-21 16:27:46 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define maxn
#define put() putchar('\n')
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
using namespace std;
inline void read(int &x){
int f=1;x=0;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
x*=f;
}
namespace Debug{
Tp void _debug(char* f,Ty t){cerr<<f<<'='<<t<<endl;}
Ts void _debug(char* f,Ty x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
Tp ostream& operator<<(ostream& os,vector<Ty>& V){os<<"[";for(auto& vv:V) os<<vv<<",";os<<"]";return os;}
#define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__)
}using namespace Debug;
#define fi first
#define se second
#define mk make_pair
const int mod=1e9+7;
inline int power(int x,int y=mod-2) {
int sum=1;
while (y) {
if (y&1) sum=sum*x%mod;
x=x*x%mod;y>>=1;
}
return sum;
}
inline int W(int x) {return (int)floor(sqrt(2*x)+1.5);}
inline void solve(void) {
int x,y;
read(x),read(y);
int l=0,r=x+1,mid;
while (l+1<r) {
int mid=l+r>>1;
if (W(mid)==W(x)) r=mid;
else l=mid;
}
int id=r-1,v=x-id+1;id=id+W(id);
if (x>=y) return printf("%lld\n",x-y),void();
if (x==1) {
l=0,r=2e9;
while (l+1<r) {
mid=l+r>>1;
if (y<=(mid)*(mid+1)/2) r=mid;
else l=mid;
}
int tmp=r*(r+1)/2;
printf("%lld\n",r-1+tmp-y);
return ;
}
int tmp=id-x+v;
l=-1,r=2e9;
while (l+1<r) {
mid=l+r>>1;
if (y<=x+(mid)*(tmp+tmp+mid-1)/2+id-x) r=mid;
else l=mid;
}
int pus=x+(r)*(tmp+tmp+r-1)/2;
// gdb(x,pus);
if (y<=pus) printf("%lld\n",pus-y+r);
else printf("%lld\n",r+(pus+id-x)-y+v);
}
signed main(void){
int T;
read(T);
while (T--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3768kb
input:
2 5 1 1 5
output:
4 3
result:
ok 2 number(s): "4 3"
Test #2:
score: 0
Accepted
time: 49ms
memory: 3532kb
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