这份代码可以过5个点剩下15个点MLE,请问是为什么
#include<cstdio>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int x, y, z;
}a1, a2;
bool operator == (node a, node b){
return a.x == b.x && a.y == b.y && a.z == b.z;
}
bool operator != (node a, node b){
return !(a == b);
}
int d1, d2, k;
node getroot(node a){
d1 = a.y - a.x;
d2 = a.z - a.y;
if(d1 == d2)
return a;
if(d1 < d2){
k = (d2 - 1) / d1;
a.x += k * d1;
a.y += k * d1;
return getroot(a);
}
k = (d1 - 1) / d2;
a.y -= k * d2;
a.z -= k * d2;
return getroot(a);
}
int dep(node a, int tcnt){
d1 = a.y - a.x;
d2 = a.z - a.y;
if(d1 == d2)
return tcnt;
if(d1 < d2){
k = (d2 - 1) / d1;
a.x += k * d1;
a.y += k * d1;
return dep(a, tcnt + k);
}
k = (d1 - 1) / d2;
a.y -= k * d2;
a.z -= k * d2;
return dep(a, tcnt + k);
}
node jump(node a, int len){
d1 = a.y - a.x;
d2 = a.z - a.y;
if(len == 0)
return a;
if(d1 < d2){
k = (d2 - 1) / d1;
if(k > len)
k = len;
a.x += k * d1;
a.y += k * d1;
return jump(a, len - k);
}
k = (d1 - 1) / d2;
if(k > len)
k = len;
a.y -= k * d2;
a.z -= k * d2;
return jump(a, len - k);
}
long long ans;
int dep1, dep2, mid;
int l, r;
void go(node a1, node a2){
l = 1;
r = dep1;
while(l < r){
mid = (l + r + 1) >> 1;
if(jump(a1, mid) == jump(a2, mid))
r = mid - 1;
else
l = mid;
}
ans += 2 * (l + 1);
}
int main(){
scanf("%d%d%d%d%d%d", &a1.x, &a1.y, &a1.z, &a2.x, &a2.y, &a2.z);
if(getroot(a1) != getroot(a2)){
puts("NO");
return 0;
}
dep1 = dep(a1, 1);
dep2 = dep(a2, 1);
if(dep1 < dep2){
swap(dep1, dep2);
swap(a1, a2);
}
ans += dep1 - dep2;
a1 = jump(a1, dep1 - dep2);
if(a1 == a2){
puts("YES");
printf("%d\n", ans);
return 0;
}
go(a1, a2);
puts("YES");
printf("%d\n", ans);
return 0;
}