B. Two Cakes---贪心--Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)

    xiaoxiao2022-07-13  160

    Two Cakes

    time limit per test 1 second memory limit per test 256 megabytes

    题目链接http://codeforces.com/contest/1130/problem/B


    emmm,题目大意:两个人买蛋糕,蛋糕一层比一层小,规定先买小,再买大,即先买1,再买2,…最后买n。有2n家店,每家店都是只出售一个等级蛋糕的一个,相邻蛋糕店的距离为1,两人刚开始都在最左边,问两个人最少走多长距离可以买好两个蛋糕。

    这里我们用两个计数器来保存答案,一个保存近距离的,一个保存远距离的,我们可以发现近距离的跑小坐标的,远距离的跑大坐标的是最小的距离花费。那么这题就over了。

    以下是AC代码:

    #include <bits/stdc++.h> using namespace std; const int mac=2e5+10; #define ll long long vector<int>b[mac]; int main() { int n,x; scanf ("%d",&n); for (int i=1; i<=n*2; i++){ scanf ("%d",&x); b[x].push_back(i); } ll ans=0; int head=1,tail=1; for (int i=1; i<=n; i++){ ans+=abs(b[i][0]-head)+abs(b[i][1]-tail); head=b[i][0]; tail=b[i][1]; } cout<<ans<<endl; return 0; }
    最新回复(0)