hihocoder1822 战舰日常任务
2024-08-28 09:09:47
思路:
使用堆即可。
实现:
#include <iostream>
#include <map>
#include <vector>
#include <cstring>
#include <queue>
#include <algorithm> using namespace std; typedef pair<int, int> pii; int buf[], need[][]; int main()
{
int T, n, m;
cin >> T;
map<string, int> mp;
mp["CV"] = ; mp["DD"] = ; mp["CL"] = ;
mp["CA"] = ; mp["BB"] = ; mp["BC"] = ;
while (T--)
{
memset(need, , sizeof need);
cin >> n >> m;
string s;
int l, f;
vector<pii> v[];
for (int i = ; i < n; i++)
{
cin >> s >> l >> f;
v[mp[s]].push_back(pii(l, f));
}
for (int i = ; i < ; i++) sort(v[i].begin(), v[i].end());
for (int i = ; i < m; i++)
{
for (int j = ; j < ; j++) cin >> buf[j];
cin >> l;
for (int j = ; j < ; j++)
{
need[j][l] += buf[j];
}
}
bool flg = true;
int ans = ;
for (int i = ; i < ; i++)
{
priority_queue<int, vector<int>, greater<int>> q;
for (int j = ; j >= ; j--)
{
if (need[i][j])
{
while (!v[i].empty() && v[i].back().first >= j)
{
q.push(v[i].back().second);
v[i].pop_back();
}
if (q.size() < need[i][j]) { flg = false; break; }
while (need[i][j]) { ans += q.top(); q.pop(); need[i][j]--; }
}
}
if (!flg) break;
}
if (!flg) cout << - << endl;
else cout << ans << endl;
}
return ;
}
最新文章
- Mac上开启Web服务
- js apply/call/caller/callee/bind使用方法与区别分析
- textview自适应高度的计算方法
- java security
- ios开发学习笔记(1)
- 【TCP/IP 合约】 TCP/IP 基金会
- 主引导记录MBR/硬盘分区表DPT/主分区、扩展分区和逻辑分区/电脑启动过程
- Javascript调用 ActiveXObject导出excel文档。
- Java核心技术 卷I chapter05 继承
- ScheduledFuture和RunnableScheduledFuture详解
- win7中python3.4下安装scrapy爬虫框架(亲测可用)
- [自用]多项式类数学相关(定理&;证明&;板子)
- 2018-2019-1-20165221&;20165225 《信息安全系统设计》实验五:通讯协议设计
- redis 中的key值过期后,触发通知事件
- [蓝桥杯]ALGO-20.算法训练_求先序排列
- pb数据窗口之间的传参
- 【UOJ#22】【UR#1】外星人
- Microsoft.Net 版本
- windows10密钥激活方法
- [转帖]go的调度机制.