Codeforce500C New Year Book Reading
阿新 • • 發佈:2017-08-03
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