USACO 2021 February Contest, Bronze Problem 2, Comfortable Cows (Debugging)

Comfortable Cow (February 2021 Bronze, Problem 2)

http://www.usaco.org/index.php?page=viewproblem2&cpid=1108

Question

I was comparing my code to the solution but couldn’t figure out why they produced different answers. Could anyone help me figure out why?

It works for the first test case but fails all the others.

My Work

#include <bits/stdc++.h>
using namespace std;

int dx[4] = {0, 1, 0, -1};
int dy[4] = {-1, 0, 1, 0};
int ans = 0;

int main() {
    int N;
    cin >> N;

    map<pair<int, int>, int> mp;

    for (int i = 0; i < N; i++) {
        int x, y;
        cin >> x >> y;

        for (int d = 0; d < 4; d++) {
            mp[{x + dx[d], y + dy[d]}]++;
            if (mp[{x + dx[d], y + dy[d]}] == 3) ans++;
            if (mp[{x + dx[d], y + dy[d]}] >= 4) ans--;
        }
        if (mp[{x, y}] == 3) ans++;
        if (mp[{x, y}] >= 4) ans--;
        cout << ans << "\n";
    }
}

In my code, I’m using a map to track the number of neighbors rather than checking it each time.

Here is the solution code: Contest Results

I think it has something to do with the fact maps sort their elements.

See https://usaco.guide/problems/usaco-1108/user-solutions