首页 > 其他分享 >C. Job Interview

C. Job Interview

时间:2024-07-01 20:42:53浏览次数:1  
标签:int getaway Job maxn rb Interview include sumb

连接:https://codeforces.com/problemset/problem/1976/C
题目:

思路:

我们可以想象这个是两个队列,采用两个前缀和数组:suma和sumb记录前几个完全按照大小分配成程序员/测试员的个数(指不考虑每个种类人数限制的情况),然后二分查找到最小满足的种类。这里采用ra和rb表示,然后哪个更小取哪个为末基数x,对∀i∈(1,min(ra,rb)),可以取ans+=max(a[i],b[i]),并且当i == 去掉的数id时减去对应的maxn;然后在x之后所有的都会被并为一种类型:如果是ra小,说明programmer满员了,那么都取b的值;反之亦然。
刚开始tle了,所以必须采用前缀和,比较特殊用了三个前缀和:maxn的前缀和 + a的前缀和 + b的前缀和

代码:

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
#include<fstream>
#include<stack>
#define IOS ios::sync_with_stdio(false), cin.tie(0) ,cout.tie(0)
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
ll a[N],b[N],suma[N],sumb[N];
ll n, m;
ll qzha[N], qzhb[N],maxn[N];
int main()
{
	IOS;
	int t; cin >> t;
	while (t--)
	{
		cin >> n >> m;
		for (int i = 1; i <= m + n + 1; i++) { cin >> a[i]; qzha[i] = a[i] + qzha[i - 1]; }
		for (int i = 1; i <= m + n + 1; i++) { cin >> b[i]; qzhb[i] = b[i] + qzhb[i - 1]; //b的前缀和}
		for (int i = 1; i <= m + n + 1; i++) 
		{
			suma[i] = a[i] > b[i]; suma[i] += suma[i - 1];//a比b大
			sumb[i] = a[i] < b[i]; sumb[i] += sumb[i - 1]; 
			maxn[i] = max(a[i], b[i]) + maxn[i-1];//前缀和
		}
		if (!n)
		{
			ll numa = 0;
			numa = qzhb[n + m + 1];
			for (int i = 1; i <= n + m + 1; i++)cout << numa - b[i] << ' ';
		}
		else if (!m)
		{
			ll numa = 0;
			numa = qzha[n + m + 1];
			for (int i = 1; i <= n + m + 1; i++)cout << numa - a[i] << ' ';
		}
		else
		{
			for (int getaway = 1; getaway <= n + m + 1; getaway++)
			{
				int la = 1, ra = m + n + 1;
				while (la < ra)
				{
					int mid = (la + ra) / 2;
					int dt = suma[getaway] - suma[getaway - 1];//二分查找,注意要减掉getaway的数
					int cmp = suma[mid];//cmp就是到mid的时候有几个programmer
					if (mid >= getaway)
					{
						cmp -= dt;
					}
					if (cmp >= n)ra = mid;
					else la = mid + 1;
				}
				int lb = 1, rb = m + n + 1;//对b序列二分查找
				while (lb < rb)
				{
					int mid = (lb + rb) / 2;
					int dt = sumb[getaway] - sumb[getaway - 1];
					int cmp = sumb[mid];
					if (mid >= getaway)cmp -= dt;//同上
					if (cmp >= m)rb = mid;
					else lb = mid + 1;
				}
				ll cnt = 0;
				if (rb < ra)
				{
					cnt += qzha[m + n + 1] - qzha[rb] + maxn[rb];//前缀和的运用
					if (getaway >= rb + 1)cnt -= a[getaway];
					else cnt -= maxn[getaway]-maxn[getaway-1];
				}
				else 
				{
					cnt = maxn[ra] + qzhb[m + n + 1] - qzhb[ra];
					if (ra + 1 <= getaway)cnt -= b[getaway];
					else cnt -= maxn[getaway]-maxn[getaway-1];
				}
				cout << cnt << ' ';



			}
		}
		cout << '\n';

	}
	return 0;
}

标签:int,getaway,Job,maxn,rb,Interview,include,sumb
From: https://www.cnblogs.com/zzzsacmblog/p/18278809

相关文章

  • 66Uptime – 网站服务器 & Cronjob 监控工具 v35.0.0扩展中文版安装
    66Uptime是一款自托管、易于使用、轻量级且高性能的网站服务器和Cronjob监控工具。以其丰富的功能和便捷的管理方式,为用户提供了全方位的网站服务器和Cronjob监控解决方案:主要功能:监控网站服务器和Cronjob的运行状态,确保它们持续稳定运行。提供从多个位置检查显示器的功......
  • Scrum Master JobGPT
    ScrumMasterJobGPT:您在当前就业市场中茁壮成长的新工具。在搜索或选择新的ScrumMaster工作时获得帮助。     鉴于ScrumMaster和敏捷教练目前所处的动荡时期,我们的社区必须团结一致。这就是ScrumMasterJobGPT,您在就业市场上的新盟友。这个免费工具可以通过付费的......
  • jenkins slave节点上的job构建记录 都只会在master服务器
    在Jenkins中,构建记录(BuildRecords)通常会保存在Jenkins的主节点(Master)上,而不是在从节点(Slave)上。这是因为主节点是整个Jenkins实例的中心控制点,负责管理和调度构建任务,包括记录和跟踪构建历史、日志和报告。 当从节点执行构建任务时,它会将构建的输出、日志和其他相关信......
  • 项目终于用上了 PowerJob,睡觉真香!
    最近项目中使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob!简介PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,上手快速,其主要功能特性如下:使用简单:提......
  • 升级到.Net 8 api 返回JObject 对象为空字符串
    在使用dotnet8过程中,使用了JObject类型作为api的返回,但是返回的空数组api:[HttpGet("voices")]publicasyncTask<IActionResult>GetObject(){JObjectobj=newJObject();obj["test"]="test";returnnewJsonResult(obj){StatusCod......
  • ElasticJob浅谈
    ElasticJob浅谈1什么是Elastic-JobElastic-Job是当当网开源的一个分布式调度解决方案,基于Quartz二次开发的,由两个相互独立的子项目ElasticJob-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite,它定位为轻量级无中心化解决方案,使用Jar包的形式提供分布式任务的协调服务,而Elastic-......
  • XXL-job 使用
    1、找到XXL-job官网去下代码https://github.com/xuxueli/xxl-job2、下载下来用IDEA打开,你会得到这样子的目录结构3、打开doc目录下面有个db,在你数据库里面创建对应的数据库4、运行服务端xxl-job-admin登录进去账号admin密码123456好了,现在我们服务端启动好了5、创建......
  • 2024.06.09 与显哥在办公室Mock Interview复盘
    我已刷题3月,现正准备着下周一Weride的电面;今日回办公室与显哥进行mockinterview,一起做题LC30。耗时50分钟而我没有做出,结束后与显哥复盘,发现以下问题:没有充分理解题意没有进行时空复杂度分析,事先确定求解的复杂度没有打草稿后再写代码在对代码进行解释时,不足够high-level;容......
  • 定时任务之PowerJob讲解
    目录1PowerJob1.1简介1.2特性1.3安装1.3.1docker安装1.3.2jar安装1.3.2.1下载源码1.3.2.2创建数据及修改配置文件1.3.2.3启动1.3.2.4注册执行器1.3.2.5登录执行器1.3.2.6登录1.3.2.7发布到服务器1.4使用1.4.1创建项目1.4.1.1pom.xml1.4.1.2配置文件1.4.1.3启动......
  • Linux 提权-Cron Jobs
    本文通过Google翻译CronJobs–LinuxPrivilegeEscalation-Juggernaut-Sec这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1什么是CronJob?1.1了解Crontabs和Cron目录1.2如何在Crontab文件中读取Cron......