2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest(ABCGJLN)

文章目录

  • N. Fixing the Expression
    • 思路
    • code
  • J. Waiting for...
    • 思路
    • code
  • C. DIY
    • 思路
    • code
  • L. Bridge Renovation
    • 思路
    • code
  • A. Bonus Project
    • 思路
    • code
  • G. Guess One Character
    • 思路
    • code
  • B. Make It Equal
    • 思路
    • code

N. Fixing the Expression

思路

签到题,只改变中间的字符即可

code

void solve(){
	int a,b;
	char o;
	cin >> a >> o >> b;
	if(a>b){
		cout << a << ">" << b << endl;
	}
	else if(a<b){
		cout << a << "<" << b << endl;
	}
	else cout << a << "=" << b << endl;
	return ;
}

J. Waiting for…

思路

签到题,如果读入的是P字符,将候车人数累加
如果读入为B字符,分2种情况:

  • 候车的人都能上车并且剩余的空座位大于等于一,输出YES
  • 反之,将候车人数减去空座位的数量,输出NO

code

int a=0;
void solve(){
	char o;
	int n;
	cin >> o >> n;
	if(o=='P') a+=n;
	else{
		int sum=n-a;
		if(sum>=1){
			a=0;
			cout << "YES" << endl;
		}
		else{
			a-=n;
			cout << "NO" << endl;
		}
	}
	return ;
}

C. DIY

思路

将成对的数进行排序,找出其中第一小的数、第二小的数、第一大的数、第二大的数
输出这些数即可

code

void solve(){
	int n;cin >> n;
	vector<int> v;
	map<int,int> m;
	int sum=0;
	for(int i=1;i<=n;++i){
		int x;cin >> x;
		m[x]++;
	} 
	for(auto i : m){
		if(i.se>=2){
			sum+=i.se/2;
			if(i.se & 1){
				for(int j=1;j<=i.se-1;++j) v.push_back(i.fi);
			}
			else{
				for(int j=1;j<=i.se;++j) v.push_back(i.fi);
			}
			
		}
	}
	if(sum<4){
		cout << "NO" << endl;
		return ;
	}
	sort(v.begin(),v.end());
	int len=v.size();
	int a1=v[0],a2=v[2],a3=v[v.size()-1-2],a4=v[v.size()-1];
	cout << "YES" << endl;
	cout << a1 << " " << a2 << " " << a1 << " " << a4 << " " << a3 << " " << a2 << " " << a3 << " " << a4 << endl;
	return ;
}

L. Bridge Renovation

思路

先拼18 18 21 和 21 21 18
最多会剩下1 2 个木板,在让剩下的木板和25拼,最后向上取整

code

void solve(){
	int n;cin >> n;
	int ans=n*2/3;
	int k=n*2%3+n;
	cout << ans+(k+1)/2 << endl; 
	return ;
}

A. Bonus Project

思路

由于每个人都想让自己获利最多,那么排在前面的工程师有最佳选择权
先算出每个工程师最大的工作单位c,接下来判断工程师会不会罢工:

  • 累加所有工程师最大的工作单位c,如果比k小,全部输出0
  • 反之,倒着遍历数组,最后面的工程师干的工作单位c最多
    当工程师需要干的工作单位等于k时,结束循环

最后正序遍历数组即可

code

const int N=1e6+5;
int a[N],b[N],c[N],ans[N];
void solve(){
	int n,k,sum=0;
	cin >> n >> k;
	for(int i=1;i<=n;++i) cin >> a[i];
	for(int i=1;i<=n;++i) cin >> b[i];
	for(int i=1;i<=n;++i){
		c[i]=a[i]/b[i];
		sum+=c[i];
	}
	if(sum<k){
		for(int i=1;i<=n;++i) cout << 0 << " ";
		return ;
	}
	for(int i=n;i>=1;--i){
		if(k>=c[i]){
			ans[i]=c[i];
			k-=c[i];
		}
		else{
			ans[i]=k;
			break;
		}
	}
	for(int i=1;i<=n;++i) cout << ans[i] << " ";
	return ;
}

G. Guess One Character

思路

一道很有意思的思维题
对于3次询问确定一个值,很显然要我们去确定第一个字符或者最后一个字符
设 a = “1” 子串的个数 b= “11” 子串的个数
a-b 相当于将字符串去重,将连续的1变为单个1

例如:
11010111
a = 6
b = 3
a-b=3,字符串为10101

然后查询01子串的个数,设01子串的个数为c
如果a=b+c,则说明第一个字符为0
反之,第一个字符为1

怎么得来的?,让我们接着看这个样例
10101,显然01的个数为2, 2 + 3 ! = 6 2+3!=6 2+3=6

如果我们将第一个字符1改为0,字符串为01010111
a=5
b=2
a-b,则字符串为010101
显然01的个数为3,2+3=5

如果第一个字符为0,那么b+c一定等于a,反之b+c+1=a,因为它少一个01子串,构不成等号了,需要加一

code

int ask(string s){
	cout << 1 << " " << s << endl;
	int res;cin >> res;
	return res;
}
void solve(){
	int n;cin >> n;
	int a=ask("11");
	int b=ask("01");
	int c=ask("1");
	if(a+b==c) cout << "0 1 0" << endl;
	else cout << "0 1 1" << endl;
	int x;cin >> x;
	return ;
}

B. Make It Equal

思路

将数组中所有元素变为相同的一个数字,很显然我们会想到二分
为什么呢,例如:

如果我们将一个序列全部变为3,假设这个序列长度为4,则
序列最终为 3 3 3 3
那么我们在对每个元素操作一次,它就会变为2 2 2 2
即在相同元素的序列操作n次,我们可以让所有元素全部减去一
因此它是具备单调性的

显然我们要让操作次数最少,就应该让这个数字尽可能大,因此二分求右边界
在check函数里面,对于一个数 a i a_i ai

  • 如果 a i < = x a_i<=x ai<=x 不进行操作
  • 如果 a i > x a_i>x ai>x 操作 ( a i + 1 ) / 2 ∗ 2 (a_i+1)/2*2 (ai+1)/22 向上取整

如果只操作一次,显然可能仍会有 a i > x a_i>x ai>x 的情况,所以需要循环多次

由于每次变化,数组中整体的值减一,因此可以用sum统计数组中所有的值
如果无解,输出 − 1 -1 1
有解,输出 s u m − r ∗ n sum-r*n sumrn

code

const int N=1e6+5;
int a[N],b[N],n;
bool check(int x){
	for(int i=1;i<=n;++i){
		b[i]=a[i]-x;
	}
	while(1){
		int flag=1;
		for(int i=1;i<=n;++i){
			if(b[i]>0){
				flag=0;
				b[i%n+1]+=(b[i]+1)/2;
				b[i]-=(b[i]+1)/2*2;
			}
		}
		if(flag) break;
	}
	for(int i=1;i<=n;++i){
		if(b[i]!=0) return false;
	}
	return true;
}
void solve(){
	cin >> n;
	int sum=0;
	for(int i=1;i<=n;++i){
		cin >> a[i];
		sum+=a[i];
	} 
	int l=0,r=1e9+1,flag=1;
	while(l<r){
		int mid=l+r+1>>1;
		if(check(mid)) l=mid,flag=0;
		else r=mid-1;
	}
	cout << (flag?-1 : sum-r*n) << endl;
	return ;
}

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

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

相关文章

burp suite-1

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

【Spring boot】微服务项目的搭建整合swagger的fastdfs和demo的编写

文章目录 1. 微服务项目搭建2. 整合 Swagger 信息3. 部署 fastdfsFastDFS安装环境安装开始图片测试FastDFS和nginx整合在Storage上安装nginxnginx安装不成功排查:4. springboot 整合 fastdfs 的demodemo编写1. 微服务项目搭建 版本总结: spring boot: 2.6.13springfox-boot…

【区块链】深入理解椭圆曲线密码学(ECC)

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…

【Qt流式布局改造支持任意位置插入和删除】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、源代码二、删除代码三、扩展总结 前言 最近在做一个需求需要流式布局&#xff0c;虽然官方example里有一个流式布局范例&#xff0c;但是不能满足我的需求…

JQuery -- 第九课

文章目录 前言一、JQuery是什么&#xff1f;二、JQuery的使用步骤1.引入2.书写位置3. 表示方法 三、JQuery选择器1.层级选择器2. 筛选选择器3. 排他思想4. 精品展示 四、jQuery样式操作1. 修改样式2.类操作1. 添加2. 移除3. 切换 五、jQuery动画1. 显示和隐藏2. 滑动1. slide2.…

Python 版本的 2024详细代码

2048游戏的Python实现 概述&#xff1a; 2048是一款流行的单人益智游戏&#xff0c;玩家通过滑动数字瓷砖来合并相同的数字&#xff0c;目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能&#xff0c;包括游戏逻辑、界面绘制和用户交互。 主…

在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?

大家好&#xff0c;我是锋哥。今天分享关于【在Elasticsearch中&#xff0c;是怎么根据一个词找到对应的倒排索引的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 在Elasticsearch中&#xff0c;是怎么根据一个词找到对应的倒排索引的&#xff1f; 在 Elasticsearch 中…

C# 数据结构之【图】C#图

1. 图的概念 图是一种重要的数据结构&#xff0c;用于表示节点&#xff08;顶点&#xff09;之间的关系。图由一组顶点和连接这些顶点的边组成。图可以是有向的&#xff08;边有方向&#xff09;或无向的&#xff08;边没有方向&#xff09;&#xff0c;可以是加权的&#xff…

Mac 系统上控制台常用性能查看命令

一、top命令显示 在macOS的控制台中&#xff0c;top命令提供了系统当前运行的进程的详细信息以及整体系统资源的利用情况。下面是对输出中各个字段的解释&#xff1a; Processes: 483 total: 系统上总共有483个进程。 2 running: 当前有2个进程正在运行。 481 sleeping: 当前有…

Docker--通过Docker容器创建一个Web服务器

Web服务器 Web服务器&#xff0c;一般指网站服务器&#xff0c;是驻留于因特网上某种类型计算机的程序。 Web服务器可以向浏览器等Web客户端提供文档&#xff0c;也可以放置网站文件以供全世界浏览&#xff0c;或放置数据文件以供全世界下载。 Web服务器的主要功能是提供网上…

Linux网络——NAT/代理服务器

一.NAT技术 1.NAT IP转换 之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题&#xff0c;NAT 技术就是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。 NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是一种将私有 IP 和全局IP 相互转化的技术方法: 很…

极简开源Windows桌面定时提醒休息python程序

当我们长期在电脑面前坐太久后&#xff0c;会产生一系列健康风险&#xff0c;包括干眼症&#xff0c;颈椎&#xff0c;腰椎&#xff0c;肌肉僵硬等等。解决方案是在一定的时间间隔内我们需要have a break, 远眺可以缓解干眼症等眼部症状&#xff0c;站起来走动两步&#xff0c;…

Windows Qtcreator不能debug 调试 qt5 程序

Windows下 Qt Creator 14.0.2 与Qt5.15.2 正常release打包都是没有问题的&#xff0c;就是不能debug&#xff0c;最后发现是两者不兼容导致的&#xff1b; 我使用的是 编译器是 MinGW8.1.0 &#xff0c;这个版本是有问题的&#xff0c;需要更新到最新&#xff0c;我更新的是Mi…

【论文笔记】Number it: Temporal Grounding Videos like Flipping Manga

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Number it: Temporal Grou…

【模版进阶】—— 我与C++的不解之缘(十八)

前言&#xff1a; ​ 之前浅浅的学了一下模版&#xff0c;这里来深入学习一下模版 1、非类型模版参数 模版参数可以分为类型形参 和非类型形参 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在**class或者typename**之类的参数类型名称。非类型形参&#xff1a; 就是…

Diving into the STM32 HAL-----Timers笔记

嵌入式设备会按时间执行某些活动。对于真正简单且不准确的延迟&#xff0c;繁忙的循环可以执行任务&#xff0c;但是使用 CPU 内核执行与时间相关的活动从来都不是一个聪明的解决方案。因此&#xff0c;所有微控制器都提供专用的硬件外设&#xff1a;定时器。定时器不仅是时基生…

质量留住用户:如何通过测试自动化提供更高质量的用户体验

在当今竞争异常激烈的市场中&#xff0c;用户手头有无数种选择&#xff0c;但有一条真理至关重要&#xff1a; 质量留住用户。 产品的质量&#xff0c;尤其是用户体验 (UX)&#xff0c;直接决定了客户是留在您的品牌还是转而选择竞争对手。随着业务的发展&#xff0c;出色的用户…

C++ 优先算法 —— 长度最小的子数组(滑动窗口)

目录 题目&#xff1a;长度最小的子数组 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 滑动窗口正确性 3. 代码实现 Ⅰ. 暴力枚举(会超时&#xff09; Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 题目&#xff1a;长…

GPT系列文章

GPT系列文章 GPT1 GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结&#xff1a;GPT 是一种半监督学习&#xff0c;采用两阶段任务模型&#xff0c;通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…

进程间通信5:信号

引入 我们之前学习了信号量&#xff0c;信号量和信号可不是一个东西&#xff0c;不能混淆。 信号是什么以及一些基础概念 信号是一种让进程给其他进程发送异步消息的方式 信号是随时产生的&#xff0c;无法预测信号可以临时保存下来&#xff0c;之后再处理信号是异步发送的…