首页 > 代码库 > Codeforce500C New Year Book Reading

Codeforce500C New Year Book Reading

题意:给你n本书的重量,m天读书的顺序,书是一堆在一起的,每次拿一本书要把去其他书搬下来,拿出这本书, 然后把这些书搬上去,读完这本书要把书放在最上面,问按照读书顺序最少要搬多重的书

题解:直接贪心就可以了,尽量靠前的书要放在上面,模拟一遍就可以,。。写错了一个地方,调了好久。

#include <bits/stdc++.h>#define ll long long#define maxn 100100using namespace std;stack<int>s;map<int ,int >mp;int w[maxn], d[maxn], temp[maxn];int main(){    int n, m, ans = 0, to, num = 0;    cin>>n>>m;    for(int i=1;i<=n;i++) cin>>w[i];    for(int i=1;i<=m;i++) cin>>d[i];    for(int i=1;i<=m;i++)        if(mp[d[i]] == 0) temp[num++] = d[i],mp[d[i]]=1;    for(int i=num-1;i>=0;i--) s.push(temp[i]);    n = s.size();    num = 0;    for(int i=1;i<=m;i++){        while(1){            to = s.top();s.pop();            if(to == d[i]) break;            temp[num++] = to;            ans += w[to];        }        for(int j=num-1;j>=0;j--)            s.push(temp[j]);        num = 0;        s.push(d[i]);    }    cout<<ans<<endl;    return 0;}

 

Codeforce500C New Year Book Reading