QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#299637 | #6510. Best Carry Player 3 | 111445# | TL | 1ms | 3448kb | C++23 | 1.4kb | 2024-01-07 03:21:37 | 2024-01-07 03:21:38 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define b(x) (1ll<<((x)-1))
ll i,j,k,n,m,t,res,x,y,msk,sb;
ll fuck1(ll x,ll y){
ll t1=(x>>k),t2=(y>>k),sb;
ll res=0;
if((x&msk)==msk){
res++; x++;
}
else{
res+=2; x|=msk; x++;
}
sb=max(0ll,t2-t1-5);
res+=sb*2;
x+=sb*(msk+1);
while((x^y)>m){
x+=msk+1; res+=2;
}
if(x^y)res++;
return res;
}
ll fuck2(ll x,ll y){
k++;
ll t1=(x>>k),t2=(y>>k),sb;
ll res=0;
if((x&(msk*2+1))==(msk*2+1)){
res++; x++;
}
else if(x^(msk*2+1)<=m){
res+=2; x|=(msk*2+1); x++;
}
else{
res+=3; x|=(msk*2+2); x++;
}
//cout<<"NMSL "<<x<<' '<<res<<endl;
sb=max(0ll,t2-t1-5);
res+=sb*3;
x+=sb*(msk*2+2);
//cout<<"NMSLB "<<x<<' '<<res<<endl;
while((x^y)>(msk*2+2)){
x+=msk*2+2; res+=3;
}
//cout<<"NMSLC "<<x<<' '<<res<<endl;
if((x^y)>m)res+=2;
else if(x^y)res++;
return res;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin>>t;
while(t--){
cin>>x>>y>>m; res=0;
if(x==y){
cout<<"0\n"; continue;
}
if(!m){
cout<<llabs(x-y)<<'\n'; continue;
}
if(x>y)swap(x,y);
k=__lg(m+1); msk=(1ll<<k)-1;
if((x^y)<=m){
cout<<"1\n"; continue;
}
//cout<<"NMSL "<<x<<' '<<y<<' '<<m<<' '<<msk<<endl;
if(msk==m){
res=fuck1(x,y);
}
else{
res=fuck2(x,y);
}
cout<<res<<'\n';
}
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3448kb
input:
8 4 5 0 5 8 3 9 2 6 15 28 5 97 47 8 164 275 38 114514 1919 810 0 1152921504606846975 1
output:
1 2 3 5 11 6 331 1152921504606846975
result:
ok 8 numbers
Test #2:
score: -100
Time Limit Exceeded
input:
100000 84 318 6 54 226 7 92 33 0 39 54 5 76 79 7 247 110 0 211 90 0 4 430 3 230 17 1 491 93 5 196 117 7 137 29 2 76 490 6 422 43 7 277 26 4 159 43 1 67 37 5 17 2 5 113 176 7 85 473 0 68 217 7 275 8 7 124 34 1 30 66 0 80 149 3 103 149 6 84 354 1 27 342 7 94 114 1 69 125 1 72 48 7 361 8 7 285 82 1 74 ...