蓝桥杯训练士兵

思路:其实每次就是要比较士兵单独训练的价格之和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;
}
相关推荐
念越3 小时前
蓝桥杯17届功能测试模拟1期题目及解析(1)
功能测试·蓝桥杯·测试用例·场景法
做怪小疯子8 小时前
蚂蚁暑期 319 笔试
算法·职场和发展
计算机安禾8 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
memcpy010 小时前
LeetCode 1456. 定长子串中元音的最大数目【定长滑窗模板题】中等
算法·leetcode·职场和发展
玛丽莲茼蒿10 小时前
LeetCode hot100【相交链表】【简单】
算法·leetcode·职场和发展
酉鬼女又兒13 小时前
入门前端CSS 媒体查询全解析:从入门到精通,打造完美响应式布局(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·前端框架·html5·媒体
小则又沐风a13 小时前
[蓝桥杯 2014 省 AB] 蚂蚁感冒
算法·职场和发展·蓝桥杯
云泽80815 小时前
蓝桥杯算法精讲:从宏观角度重新认识递归
算法·职场和发展·蓝桥杯
蒸蒸yyyyzwd15 小时前
后端面试经验
面试·职场和发展
仰泳的熊猫15 小时前
题目2576:蓝桥杯2020年第十一届省赛真题-解码
数据结构·c++·算法·蓝桥杯