USACO 2017 US Open Contest, Bronze Problem 1. The Lost Cow

I do not understand why I am getting a wrong answer on the test case 2 of the Lost Cow problem. Here is my code below, it handles edge case when they both are in the same position too. It passes all test cases except test case 2.

#include <iostream>

int main(){

    //freopen("lostcow.in", "r", stdin);
    //freopen("lostcow.out", "w", stdout);

    int x, y;
    std::cin >> x >> y;

    if(x == y) std::cout << 0;
        
    else if(x < y){
        int prev_track = x, dist = 0, neg_t{1};
        for(int i = 1; i < 1025; i *= 2){
            if(neg_t){
                dist += abs(prev_track - (x + i));
                neg_t = 0;
                prev_track = x + i;
            }
            else{
                dist += abs(prev_track - (x - i));
                neg_t = 1;
                prev_track = x - i;
            }
            if(prev_track > y){
                break;
            }
        }
        std::cout << dist - (prev_track - y);
    }
        
    else{
        int prev_track = x, dist = 0, neg_t{1};
        for(int i = 1; i < 1025; i *= 2){
            if(neg_t){
                dist += abs(prev_track - (x + i));
                neg_t = 0;
                prev_track = x + i;
            }
            else{
                dist += abs(prev_track - (x - i));
                neg_t = 1;
                prev_track = x - i;
            }
            if(prev_track < y){
                break;
            }
        }
        std::cout << dist - (y - prev_track);
    }
}

^ \quad