蓝桥杯训练士兵

思路:其实每次就是要比较士兵单独训练的价格之和SUM与S的大小,如果 SUM大,那么就减去所有士兵都要训练的次数的最小值,SUM再更新一下,继续比较。

先对士兵的次数按从小到大的次序排序(很重要),再一次遍历士兵,如果遍历到该士兵时,sum>s,那么费用加上所有士兵共同训练的次数*s,由于当前士兵已经结束了,所以sum-=a[i].p;同时共同训练的次数t+=a[i].c;这是为了确保可以算出之后的士兵还要进行多少次的独自训练。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,s,sum=0,ans=0,t=0;
struct node{
	int p;
	int c;
}a[N];
bool cmp(node a,node b)
{
	return a.c<b.c;
}

signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>s;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].p>>a[i].c;
		sum+=a[i].p;
	}
	sort(a,a+n,cmp);
	for(int i=0;i<n;i++)
	{
		if(sum>s)
		{
			ans+=s*(a[i].c-t);
			t+=a[i].c;
			sum-=a[i].p;
			//ans+=(a[i].c-t)*a[i].p;
		}
		else{
			ans+=(a[i].c-t)*a[i].p;
		}
	}
	cout<<ans<<endl;
	return 0;
}
相关推荐
dayuOK630710 小时前
AI内容创作工具的下一个战场:从“生成”到“全流程自动化”
运维·人工智能·chatgpt·职场和发展·自动化·新媒体运营·媒体
huaCodeA18 小时前
Android面试-Flow相关
android·面试·职场和发展
JAVA社区19 小时前
Java进阶全套教程(三)—— Spring框架核心精讲
java·开发语言·spring·面试·职场和发展·mybatis
始三角龙19 小时前
LeetCode hoot 100 -- 缺失的第一个正整数
算法·leetcode·职场和发展
fqq319 小时前
java基础面试题目
面试·职场和发展
小江的记录本20 小时前
【Java并发编程】锁机制:volatile:JMM内存模型、可见性/禁止指令重排、内存屏障、单例模式中的应用(附《思维导图》+《面试高频考点清单》)
java·后端·python·mysql·单例模式·面试·职场和发展
_日拱一卒21 小时前
LeetCode:105从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
天真小巫21 小时前
六年之约-2026.5.22
职场和发展
JAVA社区1 天前
Java进阶全套教程(一)—— 数据框架Mybatis详解
java·开发语言·面试·职场和发展·mybatis
JAVA社区1 天前
Java进阶全套教程(八)—— Docker超详细实战详解
java·运维·开发语言·docker·容器·面试·职场和发展