碎碎念
- 这道题目和读书相关,小明是个爱学习的好孩子,每天读一本书,换做现在的我,一周也读不了一本书,业余时间都奉献给键盘了┭┮﹏┭┮
题目:New Year Book Reading
题目原文请移步下面的链接
- https://www.luogu.com.cn/problem/CF500C
- 参考题解:https://www.luogu.com.cn/problem/solution/CF500C
- 标签:
oi
、CodeForces
、贪心
题解
思路
- 代码中有注释,简要说明了思路。
代码
代码语言:javascript复制#include <bits/stdc .h>
using namespace std;
void best_coder() {
int n, m;
cin >> n >> m;
vector<int> w(n);
vector<int> a(m);
for (int i = 0; i < n; i) {
cin >> w[i];
}
long long ans = 0;
for (int i = 0; i < m; i) {
vector<bool> b(n);
cin >> a[i];
--a[i];
int j = 1; // 想看一本书,最多需要搬n-1本书,j统计搬了几本书
int k = i - 1; // k统计倒着数看的是那本书
while (j < n && k >= 0 && a[k] != a[i]) { // 如果已经超过n-1本书,那么必定不用再搬,k不能低于0否则数组下标为负数,当某天和目标书目相同时,这本书当天在顶层,能不用继续往下找
if(b[a[k]]) {
--k; // 如果这本书在一定时间内阅读了多次,只统计第一次,其余略过
continue;
}
ans = w[a[k]]; // 统计阅读目标书目需要耗费的体力值
b[a[k]] = true;
j;
--k;
}
}
cout << ans;
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
// 返回
return 0;
}