1. 程式人生 > >B.Two Cakes

B.Two Cakes

div lse out 必須 給定 bits sin esp cout

鏈接:https://codeforces.com/contest/1130/problem/B

題意:

給定n和 2 * n個數,表示i位置賣ai層蛋糕,

有兩個人在1號,必須嚴格按照1-n的順序買蛋糕,同時每個店只買一個蛋糕 。

求所需的最短時間。

思路:

將每種蛋糕對應位置記錄在二維數組。

從1-n挨個買,根據上一次的位置算出消耗。

代碼:

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

typedef long long LL;

const int MAXN = 1e5 + 10;

int a[MAXN][2];

int main()
{
    int n, x;
    cin >> n;
    for (int i = 1;i <= n * 2;i++)
    {
        cin >> x;
        if (a[x][0])
            a[x][1] = i;
        else
            a[x][0] = i;
    }
    int p1 = 1, p2 = 1;
    LL res = 0;
    for (int i = 1;i <= n;i++)
    {
        res += abs(a[i][0] - p1) + abs(a[i][1] - p2);
        p1 = a[i][0];
        p2 = a[i][1];
    }
    cout << res << endl;

    return 0;
}

  

B.Two Cakes