1
  • 板块学术版
  • 楼主qowjsn1235
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/28 14:08
  • 上次更新2024/8/28 14:26:25
查看原帖
1
1412464
qowjsn1235楼主2024/8/28 14:08
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

long long calculateDistance(const vector<int>& men, const vector<int>& women,
                            const vector<int>& toilet) {
    long long totalDistance = 0;
    for (int i = 0; i < men.size(); ++i) {
        if (toilet[i] == 1) {
            totalDistance += abs(men[i] - (long long)i);
        } else {
            totalDistance += abs(women[i] - (long long)i);
        }
    }
    return totalDistance;
}

int main() {
    int n;
    cin >> n;
    vector<int> men(n), women(n);
    for (int i = 0; i < n; ++i) {
        cin >> men[i] >> women[i];
    }

    vector<int> toilet(n, -1);
    long long minDistance = 0;
    int maleToilets = 0, femaleToilets = 0;
    for (int i = 0; i < n; ++i) {
        if (men[i] > women[i]) {
            toilet[i] = 1;
            maleToilets++;
        } else {
            toilet[i] = 0;
            femaleToilets++;
        }
        if (maleToilets > 0 && femaleToilets > 0) {
            minDistance += calculateDistance(men, women, toilet);
            break;
        }
    }

    if (maleToilets == 0 || femaleToilets == 0) {
        int maxDiff = 0, maxIndex = -1;
        for (int i = 0; i < n; ++i) {
            int diff = abs(men[i] - women[i]);
            if (diff > maxDiff) {
                maxDiff = diff;
                maxIndex = i;
            }
        }
        if (men[maxIndex] > women[maxIndex]) {
            toilet[maxIndex] = 1;
        } else {
            toilet[maxIndex] = 0;
        }
        minDistance = calculateDistance(men, women, toilet);
    }

    cout << minDistance << endl;
    return 0;
}
2024/8/28 14:08
加载中...