Codeforces Round 935 (Div. 3) (A~G)

1945A - Setting up Camp 

        题意:三种人安排住宿,a只能跟自己住,b只能三个人住,c能1~3个人,问最终最少房间数

        思路:a单独安排,b放一起,不足三个人的用c补,然后c按照3人一房间尽可能分配

        

void solve() 
{
	int a , b , c;
	cin >> a >> b >> c;
	int ans = a + b / 3;
	b %= 3;
	int res = b + c;
	if(res == 0){
		cout << ans << endl;
		return;
	}
	if(b){
		if(res < 3){
			cout << -1 << endl;
		}
		else{
			cout << ans + (res - 1) / 3 + 1 << endl;
		}
	}
	else{
		cout << ans + (res - 1) / 3 + 1 << endl;
	}
}      

1945B - Fireworks 

        题意:装置A每a分钟放一次烟花,装置B每b分钟放一次烟花,烟花能存在m分钟,求空中同时存在最多多少烟花.

        思路:两只烟花必然能同时放,然后再看接下来m分钟能放多少只烟花,这样必然最优

void solve() 
{
	LL a , b , m;
	cin >> a >> b >> m;
	//同一时间发射
	LL en = m;
	cout << (en / a) + (en / b) + 2<< endl;
}  

1945C - Left and Right Houses 

        题意:给定01串,要求从中间某个位置分开,其中左侧0的数量大于等于1的数量,右侧1的数量大于等于0的数量,求满足条件的最靠近中心的位置。

        思路:直接模拟

void solve() 
{
	double n;
	cin >> n;
	string s;
	cin >> s;
	s = " " + s;
	int left = 0, right = 0;
	for(int i = 1 ; i <= (int)n ; i ++){
		right += (s[i] == '1');
	}	
	vector<double>ans;
	int left_cnt = 0 , right_cnt = n;
	for(int i = 0 ; i <= n ; i ++){
		if(i > 0){
			if(s[i] == '0'){
				left++;
			}
			if(s[i] == '1'){
				right--;
			}
			left_cnt++;
			right_cnt--;
		}
		//在i的右边
		if((left_cnt + 1) / 2 <= left && (right_cnt + 1) / 2 <= right){
			ans.pb(i);
		}
		
	}
	int out = 0;
	int maxx = 1e8;
	for(int i = 0 ; i < ans.size() ; i ++){
		double diff = abs(n / 2 - ans[i]);
		if(diff < maxx){
			out = ans[i];
			maxx = diff;
		}
	}
	cout << out << endl;
}  

 1945D - Seraphim the Owl 

        题意:

        思路:最终位置必须为a数组,一旦最终位置确定了,那么其中间的选a数组还是b数组都行,因此除了最终位置需要花费a数组的硬币,其余都是a或b的最小值。

void solve() 
{
	cin >> n >> m;
	LL a[n + 5] , b[n + 5];
	for(int i = 1 ; i <= n ; i ++)
		cin >> a[i];
	for(int i = 1 ; i <= n ; i ++)
		cin >> b[i];
	//如果b[i] < a[i] , 那么就等着前面 , 否则就选上
	LL ans = llinf;
	LL pre = 0;
	for(int i = m + 1 ; i <= n ; i ++){
		pre += min(a[i] , b[i]);
	}	
	for(int i = m ; i >= 1 ; i --){
		ans = min(ans , a[i] + pre);
		pre += min(a[i] , b[i]);
	}
	cout << ans << endl;
}      

 1945E - Binary Search 

        题意:

        思路:可以想到,对于一个给定的排列,其算法中所有需要跟x进行比较的数的位置都是能确定的,如果x所在位置不在需要比较的位置里面,那么只需要将x放到最终的l上面就能满足题意了,因此我们可以枚举第一步,将x放在不需要比较的位置上,然后再将x放入最终的l即可。

void solve() 
{
	int n , x;
	cin >> n >> x;
	int pos = 0;
	for(int i = 1 ; i <= n ; i ++){
		cin >> a[i];
		if(a[i] == x)
			pos = i;
	}
	for(int i = 1 ; i <= n ; i ++){
		swap(a[i] , a[pos]);
		int l = 1 , r = n + 1;
		vector<int>path;
		while(r - l > 1){
			int mid = (l + r) / 2;
			if(a[mid] <= x){
				l = mid;
			}
			else
				r = mid;
			path.pb(mid);
		}
		int f = 1;
		for(auto it : path){
			if(it == i){
				f = 0;
				break;
			}
		}
		if(f){
			cout << 2 << endl;
			cout << i << " " << pos << endl;
			cout << i << " " << l << endl;
			return;
		}
		swap(a[i] , a[pos]);
	}
}   

1945F - Kirill and Mushrooms 

        题意:现有n个蘑菇,每个蘑菇有一个对应的魔力值,还给定了一个排列,现在需要用蘑菇来制作药水,规定药水的魔力值为所用蘑菇中最小的魔力值 * 所用蘑菇数。同时若用了k个蘑菇,那么排列的前k - 1个数所对应的蘑菇魔力值将变为0.同时魔力值为0的蘑菇不能被用作制作药水。

        思路:枚举拿蘑菇的数量。贪心的思想,每次都拿当前魔力值最高的蘑菇,同时因为多了一个蘑菇,因此会有一个蘑菇的魔力值变成0,若这个0魔力值的蘑菇在所选中蘑菇里面,就重新再拿一个蘑菇,如此不断往复。

void solve() 
{
	cin >> n;
	pair<int,int>a[n + 5];
	for(int i = 1 ; i <= n ; i ++){
		cin >> a[i].x;
		a[i].y = i;
	}
	int p[n + 5];
	p[0] = 0;
	for(int i = 1 ; i <= n ; i ++)
		cin >> p[i];
	auto cmp = [&](pair<int ,int> a , pair<int,int> b){
		return a.x > b.x;
	};
	a[n + 1].x = 0;
	sort(a + 1 , a + n + 1 , cmp);
/*	for(int i = 1 ; i <= n ; i ++){
		cout << a[i].x <<" " << a[i].y << endl;
	}*/
	map<int,int>mp;//是否在篮子里
	map<int,int>vis;//这么多不能在篮子里
	LL ans = -1;
	LL out = 0;
	int id = 0;
	int minn = llinf;
	for(int cnt = 1 ; id <= n && cnt <= n ; cnt ++ , id++){
		if(id > n)
			break;
		//ban
		vis[p[cnt - 1]] = 1;
		//out
		if(mp.count(p[cnt - 1])){//有了
			while(id <= n && vis.count(a[id].y)){
				id++;
			}
			minn = a[id].x;
			mp[a[id].y] = 1;
			id++;
		}
		//pick
		while(id <= n && vis.count(a[id].y)){
			id++;
		}
		minn = a[id].x;
		mp[a[id].y] = 1;
		if(minn * cnt > ans){
			ans = minn * cnt;
			out = cnt;
		}
	}
	cout << ans << " " << out <<endl;
}  

1945G - Cook and Porridge 

        题意:

        思路:看代码

// Problem: G. Cook and Porridge
// Contest: Codeforces - Codeforces Round 935 (Div. 3)
// URL: https://codeforces.com/contest/1945/problem/G
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){
	return b > 0 ? gcd(b , a % b) : a;
}

LL lcm(LL a , LL b){
	return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){
	for(int i = 0 ; i <= n ; i ++){
		a[i] = 0;
	}
}
struct BIT{//Binary indexed Tree(树状数组)
	int n;
	vector<int> tr;
	BIT(int n) : n(n) , tr(n + 1 , 0){
	}
	int lowbit(int x){
		return x & -x;
	}
	void modify(int x , int modify_number){
		for(int i = x ; i <= n ; i += lowbit(i)){
			tr[i] += modify_number;
		}
	}
	void modify(int l , int r , int modify_number){
		modify(l , modify_number);
		modify(r + 1 , -modify_number);
	}
	int query(int x){
		int res = 0;
		for(int i = x ; i ;  i -= lowbit(i))
			res += tr[i];
		return res;
	}
	int query(int x , int y){
		return query(y) - query(x);
	}
};
struct Eat{//吃饭队列
	int ti;//归队时间
	int ss;//吃饭时间
	int id;//编号
	friend bool operator < (struct Eat a , struct Eat b){
		if(a.ti != b.ti){
			return a.ti > b.ti;
		}
		else{
			return a.ss > b.ss;
		}
	}
};
struct Rank{//就绪队列 优先级高的在前面,统一优先级到达时间晚的在后面
	int kk;//优先级
	int time;//到达时间
	int id;//编号
	int num;
	friend bool operator < (struct Rank a , struct Rank b){
		if(a.kk != b.kk){
			return a.kk < b.kk;
		}
		else if(a.time != b.time){
			return a.time > b.time;
		}
		else{
			return a.num > b.num;
		}
	}
};
void solve() 
{
	cin >> n >> m;
	pair<int,int>stu[n + 5];
	for(int i = 1 ; i <= n ; i ++){
		cin >> stu[i].x >> stu[i].y;
	}
	int num = 0;
	//怎么判断第i个人能否喝到粥? -> 前面没有人
	//怎么计算第i个人第一次喝到粥的时刻? -> 模拟时间
	//若第i个人会被插队的条件是,他之后没有比那个人优先级高的人了,之后加的也必然不会被卡
	vector<int>back(n + 5 , 0);//第i个人之后的最大优先,第i个人喝完之后,会在大于等于back[j]的后面,若没有,则放到第一个
	back[n + 1] = 0;
	for(int i = n ; i >= 1 ; i --){
		back[i] = max(back[i + 1] , stu[i].x);
	}
	priority_queue<Eat>e;//吃饭队列,时间到了归队
	priority_queue<Rank>r;//等待队列
	int id = 1;
	int ans = -1;
	for(int i = 1 ; i <= m ; i ++){
		if(r.empty() || back[id] >= r.top().kk){
			e.push({i + stu[id].y , stu[id].y , id});
			id++;
			if(id == n + 1){
				ans = i;
				break;
			}
		}
		else{
			int idx = r.top().id;
			r.pop();
			e.push({i + stu[idx].y , stu[idx].y , idx});
		}
		while(!e.empty() && e.top().ti == i){
			int idx = e.top().id;
			e.pop();
			r.push({stu[idx].x , i , idx , ++num});
		}
	}
	cout << ans << endl;
}            
int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout.precision(10);
    int t=1;
	cin>>t;
    while(t--)
    {
    	solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一番赏小程序开发,潮玩市场创业新选择!

一番赏是目前非常火爆的抽奖模式&#xff0c;拥有不确定性和超高的惊喜感&#xff0c; 各类隐藏款限量款盲盒商品让年轻消费者欲罢不能。在各种流行趋势下&#xff0c;一番上的市场规模逐渐扩大&#xff0c;吸引着无数人入局。 一番赏在市场上主要是以线下商场门店和线上小程…

某招聘系统0day挖掘(获取4站点报告证书)

前言: 21年的挖的漏洞了 漏洞均已提交且均已修复,这里文章只做技术交流 挖掘过程 对我来说,毕竟喜欢直接黑盒挖0day,一个0day挖到后就可以刷上百分。 如该系统正常找了一个招聘系统用的比较多的 如该通用系统,该通用系统存在一个注册功能 正常的进行注册一个账户进去…

Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。 在本教程中&#xff0c;我们将了解如何将现有数据流&#xff0…

Yolov部署在Windows和Android上

Yolov部署在Windows和Android上 前言主要模块主要流程转换为ONNX 部署代码JAVAC 前言 Yolov是目标检测的利器&#xff0c;工业中运用得很火。尽管网上的Yolov部署资料很多&#xff0c;但是这块内容目前做得还算上成熟。为了将Yolov部署在Android和Windows上费了些功夫&#xff…

‍Java OCR技术全面解析:六大解决方案比较

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

升级你的技能:发现国产操作系统Deepin学习网站的无限可能!

网址&#xff1a;deepin是一款由武汉深之度科技有限公司开发的Linux操作系统。以下是对deepin的详细介绍&#xff1a; 发展历程&#xff1a;deepin最初名为Hiweed Linux&#xff0c;自2004年起开始对外发行。它经历了多次迭代和改进&#xff0c;逐渐发展成为今天广受好评的操作…

语音转文字——sherpa ncnn语音识别离线部署C++实现

简介 Sherpa是一个中文语音识别的项目&#xff0c;使用了PyTorch 进行语音识别模型的训练&#xff0c;然后训练好的模型导出成 torchscript 格式&#xff0c;以便在 C 环境中进行推理。尽管 PyTorch 在 CPU 和 GPU 上有良好的支持&#xff0c;但它可能对资源的要求较高&#x…

面试算法-67-完全二叉树的节点个数

题目 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置…

招聘系统开发招聘软件APP招聘小程序开发对标仿BOSS直聘

项目背景 一、市场前景&#xff1a;求职招聘市场的数字化革新 随着互联网的普及和人们对线上求职的接受度提高&#xff0c;求职招聘市场正经历一场数字化革新。招聘系统、软件APP与小程序等数字化产品不仅提供了便捷的求职和招聘服务&#xff0c;还通过智能算法和数据分析技术…

“美联储才是大多头”!鲍威尔推翻降息疑虑!今年降息三次,比特币直奔6.8万!

北京时间周四&#xff08;3月21日&#xff09;凌晨&#xff0c;美联储宣布将基准利率维持在5.25%-5.50%区间&#xff0c;为连续第五次保持利率不变&#xff0c;符合市场预期。 然而&#xff0c;更引人注目的是美联储对未来的降息计划。即使降低通胀的进展已经停滞&#xff0c;美…

创建maven项目

创建空项目 然后配置maven 然后&#xff0c;创建module

多线程实现

1.多线程&#xff1a;并发实现 主线程和子线程并行实现。 一个进程中有多个线程&#xff0c;可以同时进行多个任务。进程是系统分配的&#xff0c;线程的执行是由调度器决定的。 注意&#xff1a;线程开启不一定执行&#xff0c;由Cpu调度执行。 线程创建的三种方式&#xff…

js【详解】深拷贝

什么是深拷贝&#xff1f; 对于引用类型的数据&#xff0c;才有深浅拷贝的说法 浅拷贝 &#xff1a;执行拷贝的变量只复制被拷贝变量内存的引用数据的地址。 被拷贝变量内地址指向的数据发生变化时&#xff0c;执行拷贝的变量也会同步改变 深拷贝&#xff1a; 在堆内存中开…

高效输入关键词,瞬间生成惊艳图片:创意与速度的完美结合!

在数字化时代&#xff0c;图片已经成为我们生活中不可或缺的一部分。无论是社交媒体的分享、广告的创意&#xff0c;还是工作中的报告展示&#xff0c;高质量的图片都能为我们的内容增添不少色彩。但你是否曾遇到过这样的困扰&#xff1a;想要一张符合心意的图片&#xff0c;却…

VScode前端常用插件推荐

Color Highlight—查看css颜色 这个插件可以让我们在vscode中看到代码中的颜色&#xff0c;效果如图所示 Chinese (Simplified) (简体中文) Language Pack for Visual Studi ------ 简体中文语言包 把vscode翻译为中文 Auto Rename Tag—自动修改对应的标签 效果如图所示…

uniapp+uview实现城市选择器

1.效果 2.代码—在components中创建CitySelect组件 <template><view><text class"uni-input" style"background-color: #F8F8F8;display: block;line-height: 76rpx;padding:0 29rpx;" tap"open">{{value}}</text><…

01-java面试题八股文-----java基础——20题

文章目录 <font color"red">1、java语言有哪些特点&#xff1a;<font color"red">2、面向对象和面向过程的区别<font color"red">3、标识符的命名规则。<font color"red">4、八种基本数据类型的大小&#xff…

linux下用docker安装mysql及导入文件

目录 1. 非root用户设置docker权限2. user账号安装mysql2. root账号打开防火墙3. 启动mysql容器3.1 在指定工作目录下建立文件夹3.2 配置文件3.3 开启mysql容器 4. 进入容器4.1 通过容器进入mysql4.1 设置账号4.2 建立数据库4.3 导入文件 5. windows连接数据库参考文件 1. 非ro…

.locked勒索病毒是什么,企业数据被加密了如何恢复?

.locked勒索病毒介绍 .locked勒索病毒是一种恶意软件&#xff0c;它利用加密技术锁定用户的数据或系统&#xff0c;并以此进行勒索。用户一旦感染此病毒&#xff0c;将无法访问其重要文件&#xff0c;病毒会要求用户支付一笔赎金以获取解密密钥。这种病毒通常使用强大的加密算法…

ssm基于Vue.js的在线购物系统的设计与实现论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线购物系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线购物系统&#xff0c;它彻底改变了过去传统的…