公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0],飞往 B 市的费用为 costs[i][1]

返回将每个人都飞到某座城市的最低费用,要求每个城市都有 N 人抵达。

 

示例:

输入:[[10,20],[30,200],[400,50],[30,20]]
输出:110
解释:
第一个人去 A 市,费用为 10。
第二个人去 A 市,费用为 30。
第三个人去 B 市,费用为 50。
第四个人去 B 市,费用为 20。

最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。

 

提示:

  1. 1 <= costs.length <= 100
  2. costs.length 为偶数
  3. 1 <= costs[i][0], costs[i][1] <= 1000

 

#include<string.h>
#include<iostream>
#include<map>
#include<vector>
#include<functional>
#include<algorithm>
#define len 20
using namespace std;

struct Data{
    int costA;
    int costB;
    int absAminusB;
    int AminusB;
    Data(int a , int b){
        costA = a, costB = b;
        AminusB = a - b;
        absAminusB = abs(AminusB);
    }
};

int twoCitySchedCost(vector<vector<int>>& costs) {
    std::multimap<int, Data, std::greater<int>> map;
    for (auto iter = costs.begin(); iter != costs.end(); iter++){
        //std::cout << "val" << (*iter)[0] << std::endl;
        Data data = Data((*iter)[0], (*iter)[1]);
        map.insert(std::make_pair(data.absAminusB, data));
    }
    vector<Data> vCityA;
    vector<Data> vCityB;
    int totalCost = 0;
    for (auto iter = map.begin(); iter != map.end(); iter++){
        auto bCityA = true;
        if (vCityA.size() == costs.size() / 2){
            bCityA = false;
        }
        else if (vCityB.size() == costs.size() / 2){
            bCityA = true;
        }
        else{
            bCityA = iter->second.AminusB <= 0;
        }
        bCityA ? vCityA.push_back(iter->second) : vCityB.push_back(iter->second);
        bCityA ? totalCost += iter->second.costA : totalCost += iter->second.costB;
    }
    //for (auto iter = vCityA.begin(); iter != vCityA.end(); iter++){
    //    std::cout << "City A " << iter->costA << std::endl;
    //}
    //for (auto iter = vCityB.begin(); iter != vCityB.end(); iter++){
    //    std::cout << "City B " << iter->costB << std::endl;
    //}
    std::cout << "total cost " << totalCost << std::endl;
    return totalCost;
}
int main()
{
    vector<int> v1 = { 10, 20 };
    vector<int> v2 = { 30, 200 };
    vector<int> v3 = { 400, 50 };
    vector<int> v4 = { 30, 20 };
    //vector<int> v5 = { 5, 500 };
    vector<vector<int>> vcost = { v1, v2, v3, v4 };
    twoCitySchedCost(vcost);
    
    int t;
    std::cin >> t;
    return 0;
}