社区讨论
80pts玄关求条
P7095[yLOI2020] 不离参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mje1dh01
- 此快照首次捕获于
- 2025/12/20 16:28 2 个月前
- 此快照最后确认于
- 2025/12/22 18:20 2 个月前
CPP
//P7095
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 100;
int T, n;
int csll, dqll, csjs, dqjs;
//csll:初始力量 dqll:当前力量 csjs:初始精神 dqjs:当前精神
struct node{
int ll, js, zjll, zjjs;
//ll:力量要求 js:精神要求
//zjll:增加力量(力量增值) zjjs:增加精神(精神增值)
}a[N];
bool cmp1(node a1, node a2){
if(a1.ll != a2.ll) return a1.ll < a2.ll;
else return a1.zjll > a2.zjll;
} //力量要求为第一关键词,力量加成为第二关键词,排序
struct cmp2{
bool operator()(node a1, node a2){
if(a1.js != a2.js) return a1.js > a2.js;
else if(a1.zjjs != a2.zjjs) return a1.zjjs < a2.zjjs;
else return a1.zjll < a2.zjll;
}
}; //精神要求为第一关键词,精神加成为第二关键词,力量加成为第三关键词
priority_queue<node, vector<node>, cmp2> q;
signed main(){
scanf("%lld%lld", &T, &n);
for(int i = 1; i <= n; i++){
scanf("%lld%lld", &a[i].ll, &a[i].js);
scanf("%lld%lld", &a[i].zjll, &a[i].zjjs);
} //输入
sort(a + 1, a + n + 1, cmp1); //力量排序
for(int i = 1; i <= n; i++){
if(dqll < a[i].ll){
int cha = a[i].ll - dqll;
csll += cha; dqll += cha;
}
dqll += a[i].zjll;
} //计算最低初始力量值
dqll = csll; //将当前力量值赋为初始力量值,模拟穿装备过程
int tag = 1, sum = 1;
//tag:入队到了第多少个装备
//sum:已经穿了多少个装备
while(sum <= n){
for(int i = tag; i <= n; i++){
tag = i;
if(dqll >= a[i].ll) q.push(a[i]);
else break;
} //当前力量值能穿的装备入队
node lins = q.top(); q.pop();
if(dqjs < lins.js){
int cha = lins.js - dqjs;
csjs += cha; dqjs += cha;
} //精神值少了就加
dqll += lins.zjll;
dqjs += lins.zjjs;
sum++;
}
printf("%lld %lld", csll, csjs);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...