首页 > 其他分享 >【23秋】提高实战营 之 比赛篇

【23秋】提高实战营 之 比赛篇

时间:2023-11-22 22:34:52浏览次数:30  
标签:实战 题目 比赛 队员 int 23 long MAXN 背负

2023 提高实战营-秋 专题测试 01

A. 寇德佛斯

题目链接

A. 寇德佛斯

简要思路

对于题目 \(i\) 和题目 \(j\),假设当前开始了 \(w\) 时间,如果先做 \(i\) 再做 \(j\),那么得到的分数将会是 \(s_i - (w + t_i) · v_i + s_j -(w + t_i +t_j) · v_j\),最后整理一下可得时先做题目 \(i\) 再做题目 \(j\),当且仅当 \(t_i · v_j < t_j · v_i\) 成立,所以我们只需按照该式子进行排序,然后遍历计算即可。

完整代码

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
const int MAXN=1e6+5;

int n;
int ans,w;
struct node{
	int s,v,t;
}a[MAXN];

bool cmp(node x,node y){return y.t*x.v>x.t*y.v;}//排序的方法

signed main(){
	std::cin>>n;
	for(int i=1;i<=n;i++)
		std::cin>>a[i].s>>a[i].v>>a[i].t;
	std::sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		w+=a[i].t;//先更新做题的时间 w
		ans+=a[i].s-w*a[i].v;
	}
	std::cout<<ans<<endl;
	return 0;
}

B. 跑步比赛

题目链接

B. 跑步比赛

简要思路

读完题面后我们可以提炼出一个关键词:要使最小值最大,因此我们可以二分答案

对于二分到的一个 \(x\),我们以 \(x\) 为基准,把全部队员分为两个部分:\(v_i \ge x\) 的队员(即可以背负其他队员的队员)和 \(v_i < x\) 的队员(即需要被其他队员背负的队员)。

因为一个队员最多只能背负一个队员,所以当需要被背负的队员的数量大于可以背负其他队员的队员的数量时,check 函数可以直接返回 false

一个队员 \(i\) 可以背负队员 \(j\),当且仅当 \(v_i - (w_j - w_i) \ge x\) 成立。

不难想到,最快最重的队员一定要背负最慢最重的队员,但是我们发现,上述式子中 \(v_j\) 并不影响最终的结果,所以我们只考虑 \(w_i,v_i,w_j\)。

由此,我们将可以背负其他队员的队员的数组按照体重和速度之和从大到小进行排序,对需要被其他队员背负的队员的数组按照体重从大到小进行排序。之后遍历数组,如果不满足 \(v_i - (w_j - w_i) \ge x\) 就返回 false,否则最终返回 true

完整代码

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
const int MAXN=1e5+5;

int T,n;
int v[MAXN],w[MAXN];
int a[MAXN];//可以背负其他队员的队员
int b[MAXN];//需要被其他队员背负的队员

bool cmpa(int a,int b){return (w[a]+v[a])>(w[b]+v[b]);}
bool cmpb(int a,int b){return w[a]>w[b];}

bool check(int x){
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));//多测不清空,爆零两行泪!
	int cnta=0,cntb=0;//统计各组队员的数量
	for(int i=1;i<=n;i++){
		if(v[i]>=x)a[++cnta]=i;//可以背负其他队员,记录编号
		else b[++cntb]=i;//需要被其他队员背负,记录编号
	}
	
	if(cnta<cntb)return false;//人数太多
	
	std::sort(a+1,a+cnta+1,cmpa);
	std::sort(b+1,b+cntb+1,cmpb);
	
	for(int i=1;i<=cntb;i++){//上文的 if 判断已经确保了 cnta>=cntb
		int now=v[a[i]]-(w[b[i]]-w[a[i]]);
		if(now<x)return false;//看能否达到二分所需要的速度 x
	}
	return true;
}

signed main(){
	std::cin>>T;
	while(T--){
		std::cin>>n;
		for(int i=1;i<=n;i++)std::cin>>v[i]>>w[i];
		
		int l=1,r=1e9;
		while(l<r){//二分答案
			int mid=(l+r+1)/2;
			if(check(mid))l=mid;
			else r=mid-1;
		}
		std::cout<<l<<endl;
	}
	
	return 0;
}

标签:实战,题目,比赛,队员,int,23,long,MAXN,背负
From: https://www.cnblogs.com/CheZiHe929/p/17847730.html

相关文章

  • 2023-11-22:用go语言,给你一个长度为 n 下标从 0 开始的整数数组 nums。 它包含 1 到 n
    2023-11-22:用go语言,给你一个长度为n下标从0开始的整数数组nums。它包含1到n的所有数字,请你返回上升四元组的数目。如果一个四元组(i,j,k,l)满足以下条件,我们称它是上升的:0<=i<j<k<l<n且nums[i]<nums[k]<nums[j]<nums[l]。输入:nums=[1,3,2,......
  • 20231121 rock5b 接入mpu6050模块 驱动成功!感谢https://github.com/LitchiCheng/mpu60
    我的rock5b安装的其radxa官方OS,里面有一个rsetup程序的overlay功能可以管理设备树,我想根据https://github.com/LitchiCheng/mpu6050-linux来尝试连接一个6050;先rsetup里面的overlay管理开启i2c8-m4设备节点,之后在/boot/dtco i2c8-m4设备节点已经启用现在......
  • 七天.NET 8操作SQLite入门到实战 - 第三天SQLite快速入门
    前言今天我们花费一个小时快速了解SQLite数据类型、SQLite常用命令和语法。七天.NET8操作SQLite入门到实战详细教程第一天SQLite简介第二天在Windows上配置SQLite环境EasySQLite项目源码地址GitHub地址:https://github.com/YSGStudyHards/EasySQLite......
  • 2023.11.22值得推荐的一款服务器空间
    ,已经体验一个月咯,非常不错的免费资源,适合大家去了解了解~!他们家的免费空间,免费服务器,非常稳定,非常靠谱,值得拥有,价格厚道~!免备案服务,域名管理等等服务,应有尽有,2023年你值得了解,他们家的免费云服务器还是独立IP的哦,非常非常好,非常NICE~!官网地址:https://www.sanfengyun.com......
  • ABP-VNext 用户权限管理系统实战02---用户权限表的创建与迁移
    一、表实体建立1、菜单表[Comment("菜单表")][Table("t_identity_menu")]publicclassMenu:AuditedAggregateRoot<Guid>,ISoftDelete,IMultiTenant{[MaxLength(200)][Comment("菜单名")]publicstringName{get;set;......
  • P9168 [省选联考 2023] 人员调度
    去年省选的时候还不会霍尔定理,想到了线段树分治想不了贪心。今年看感觉挺傻逼的。先线段树分治,把删除操作扔了。如果我们要知道一个人最后扔到哪里,那就是一个费用流问题,不太可能解决,考虑用霍尔定理刻画这个东西,我们发现,最后一个人的集合能匹配上当且仅当:计\(u\)子树里有\(p_u......
  • Java排序实战:如何高效实现电商产品排序
    在当今的数字化时代,电子商务已成为人们日常生活的重要组成部分。消费者可以在电商平台上浏览和购买来自全球的商品,这无疑为我们的生活带来了极大的便利。然而,随着电商平台的规模不断扩大,商品数量的急剧增加,如何对海量商品进行高效排序成为了电商系统开发的一大挑战。一、排序的重......
  • 123
    #include<bits/stdc++.h>usingnamespacestd;intn;vector<int>v[50005];boolvis[50005],vis2[50005];inta[50005],ans=INT_MAX,fa[50005],s[50005];intdfs(intx){   intss=0;   if(vis[x])       return0;   if(v[x].size()==1&&x!=1)  ......
  • 2023-2024-1 20232327《网络空间安全导论》第二周学习总结
    2023-2024-120232327《网络空间安全导论》第二周学习总结教材学习内容总结1.密码学历史悠久,主要分为古典密码、机械密码和线代密码;2.密码学研究主要有密码分析,密码理论,密码工程与应用以及密码管理;3.密码体制的分类:单钥密码体制和双钥密码体制;4.密码分析方法有穷举攻击法、......
  • 2023.11.22 日记g
    今天又来机房了。本来最近没啥训练的心情的,奈不过sx热情万分。噢噢,下午和同学打球去了又没有洗澡,吃完饭回教室已经有点晚迟到了,然后lsx提议直接来机房,我曰:“善!”然后改了上一场arc的b、c、d。感觉大脑出现了一些问题。不过最终还是完成了任务。然后今天whk还是一如既往......