首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。