1. 程式人生 > >Codeforce500C New Year Book Reading

Codeforce500C New Year Book Reading

esp fine mes tac div for size class return

題意:給你n本書的重量,m天讀書的順序,書是一堆在一起的,每次拿一本書要把去其他書搬下來,拿出這本書, 然後把這些書搬上去,讀完這本書要把書放在最上面,問按照讀書順序最少要搬多重的書

題解:直接貪心就可以了,盡量靠前的書要放在上面,模擬一遍就可以,。。寫錯了一個地方,調了好久。

#include <bits/stdc++.h>
#define ll long long
#define maxn 100100
using 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