codeforces 500C New Year Book Reading
题意:
简单模拟,书数N,拿书次数n,各书重量w,以及拿书次序。
题解:
根据第一次拿各书的顺序放入栈中就OK。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N,n,w[600],d[1100],m,m0;
cin>>N>>n;
for(int i=1;i<=N;i++)cin>>w[i];
stack<int> q,t;
set<int> s;
for(int i=0;i<n;i++){
cin>>m;d[i]=m;
if(s.count(m))continue;
s.insert(m);
q.push(m);
}//反向摆书
while(q.size()){
t.push(q.top());q.pop();
}//调回正确顺序
int sum=0;
for(int i=0;i<n;i++){
while(1){
m=t.top();t.pop();
if(m==d[i]){m0=m;break;}
q.push(m);sum+=w[m];
}//找到跳出
while(q.size()){
t.push(q.top());q.pop();
}//上面的放回去
t.push(m0);
}
cout<<sum<<endl;
}