DAY 6

今日得分:100+36+100(^_^)

T1

题目大意:有n个敌人,每个敌人有一个生命值w和攻击力s,有A+B个队友,其中A个每次能消灭一个生命值<xi的敌人,B个每次能消灭一个攻击力<yi的敌人,每人每次只能消灭一个敌人,问最少多少次能把所有敌人消灭,无解输出-1。n<=5e5,A,B<=5e4,1<=x,y,w,s<=2e9。

题解:二分答案,将敌人按照w排序,问题转化为判断一个答案是否合法。从大到小看w,每次把xj>wi的Aj找出,计算总共找出的A能不能消灭当前的敌人。如果不能消灭,则找到当前需要使用A来消灭的敌人中s最小的一个,用最小的能消灭它的B消灭它,如果找不到这样的B则不合法。使用二分,线段树,堆等即可维护上述操作。时间复杂度O(nlog^2n)

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
inline int re_ad()
{
	int x=0,f=1;char ch=getchar();
	while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=x*10+(ch^48),ch=getchar();
	return x*f;
}
int A,B,n;
int a[50010],b[50010];
struct node{int a,b;}c[500010];
inline int mi(int x,int y){return x>y?y:x;} 
bool cmp1(node x,node y){if(x.a!=y.a)return x.a<y.a;return x.b>y.b;}
long long t[200010];
void build(int k,int l,int r,int nu)
{
	if(l==r){t[k]=nu;return;}
	int mid=(l+r)>>1;build(k<<1,l,mid,nu);build(k<<1|1,mid+1,r,nu);
	t[k]=t[k<<1]+t[k<<1|1];
}
bool change(int k,int l,int r,int L,int R)
{
	if(!t[k])return false;
	if(l==r){--t[k];return true;}
	int mid=(l+r)>>1;
	bool ret=false;
	if(R<=mid){if(change(k<<1,l,mid,L,R)){ret=true;}}
	else if(L>mid)ret=change(k<<1|1,mid+1,r,L,R);
	else 
	{
	if(change(k<<1,l,mid,L,R))ret=true;
	else ret=change(k<<1|1,mid+1,
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\Parser.js:437 throw err; // Rethrow non-MySQL errors ^ Error: secretOrPrivateKey must have a value at module.exports [as sign] (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\jsonwebtoken\sign.js:107:20) at Query.<anonymous> (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\router_handler\2user.js:49:26) at Query.<anonymous> (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\Connection.js:526:10) at Query._callback (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\Connection.js:488:16) at Sequence.end (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24) at Query._handleFinalResultPacket (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\sequences\Query.js:149:8) at Query.EofPacket (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\sequences\Query.js:133:8) at Protocol._parsePacket (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (C:\Users\admin\Desktop\前端开发\Node.js\day6\code\api_server\node_modules\mysql\lib\protocol\Parser.js:43:10) Node.js v18.12.1
06-08
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值