Codeforces Round 938 (Div. 3) (A~E)

Codeforces Round 938 (Div. 3) (A~E)

目录:A B C D E

A题:Yogurt Sale

标签: 数学(math)

题目大意

  • 酸奶价格, a 元一份,b元两份n
  • 问:买n份最少多少钱

思路

  • a元一份,b元两份,总有一个比较低,一份一份买或两份两份买取小的一个即可,特判n为奇数多买一个a

AC代码

#include <bits/stdc++.h>
using namespace std;
void solve()
{
	int n, a, b;
	cin >> n >> a >> b;
	cout << min(n * a, n / 2 * b + n % 2 * a) << endl;
}
int main()
{
	int T; cin >> T;
	while(T--)
		solve();
	return 0; 
}

B题:Progressive Square

标签: 构造算法(constructive algorithms)数据结构(data structures)实现问题,编程技巧,模拟(implementation)排序算法(sortings)

题目大意

  • 一个 n × n阵。三个整数 a1,1 、 c 和 d 并按照以下规则构造一个累进正方形:
  • ai+1,j = ai,j + c
  • ai,j+1 = ai,j + d
  • 即:每一行每一列都是等差数列,公差分别为c,d
  • 问题:给n,c,d 和一个长n × n的数组,问此数组是否是个累进正方形

思路

  • 找到数组中最小值一定被作为a1,1,知道a1,1,c,d直接将累进正方形计算出 与 给定数组比较即可

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 250010;
int a[N], b[N];
void solve()
{
	int n, c, d;
	int idx = 0;
	cin >> n >> c >> d;
	for(int i = 0; i < n * n; i++)
		cin >> a[i];
	sort(a, a + n * n);
	int t = a[0];
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			b[idx++] = t + i * c + j * d; 
	sort(b, b + n * n);
	for(int i = 0; i < n * n; i++)
		if(a[i] != b[i]) 
		{
			cout << "NO" << endl;
			return;
		}
	cout << "YES" << endl;
}
int main()
{
	int T; cin >> T;
	while(T--)
		solve();
	return 0; 
}

C题:Inhabitant of the Deep Sea

标签: 贪心策略(greedy)实现问题,编程技巧,模拟(implementation)数学(math)

题目大意

  • n 艘飞船编号从 1 到 n ,依次递增;第 i 艘飞船的耐久度为 ai
  • 攻击次数:k 次
  • 攻击力: 1
  • 攻击顺序:攻击第一艘飞船,然后是最后一艘,接着又是第一艘,以此类推。
  • 当船只的耐久度下降到 0时,它就会沉没,不再受到攻击
  • :攻击k次后沉没几艘飞船

思路

  • 分两种情况
  • 1、攻击次数大于等于耐久度和,那么全部飞船都会沉没
  • 2、攻击次数小于耐久度和,那么左边飞船共被攻击(k / 2 + k % 2)次,右侧飞船共被攻击k / 2次
  • 枚举计算攻击次数能击沉左边多少艘,右边多少艘即可

AC代码

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 200010;
int a[N];
void solve()
{
	LL n, k, cnt = 0;
	cin >> n >> k;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		cnt += a[i];
	}
	if(k >= cnt){
		cout << n << endl;
		return;
	}
	LL t1 = k / 2 + k % 2; // 左侧先被攻击,所以k为奇数时左侧比右侧多1次
	LL t2 = k / 2;
	int l = 1, r = n;
	while(l <= n && t1 >= a[l])
		t1 -= a[l++];
    
	while(r >= 1 && t2 >= a[r])
		t2 -= a[r --];
    // 左侧被击沉l - 1艘,右侧被击沉n - r艘
	cout << l - 1 + n - r << endl;
}
int main()
{
	int T; cin >> T;
	while(T--)
		solve();
	return 0; 
}

D题:Inaccurate Subsequence Search

标签: 数据结构(data structures)双指针算法(two pointers)

题目大意

  • 有一个由 n 个整数组成的数组 a 和一个由 m 个整数组成的数组 b ( m ≤ n )。
  • 好数组定义:如果数组 c 中的元素可以重新排列,使得其中至少有 k 个元素与数组 b 中的元素匹配,那么认为长度为 m 的数组 c 是好数组。
  • :选择长度为 m 的数组 a 的每个子段作为数组 c 的元素,计算有多少个数组是好的
  • 换句话说,求元素 al,al+1,…,al+m−1构成一个好数组的位置1 ≤ l ≤ n − m + 1 的个数。

思路

  • 滑动窗口暴力模拟即可,具体看代码(含注释)

AC代码

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 200010;
int a[N], b[N];
void solve()
{
	int n, m, k;
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	//mp1记录b中数与其数量,mp2记录每个长为m的a的子数组中数(动态维护) 
	map<int, int> mp1, mp2; 
	for(int i = 1; i <= m; i++) 
	{
		cin >> b[i];
		mp1[b[i]] ++;  
	}
	// cnt维护每个长为m的窗口与b匹配数的个数,res记录答案 
	int cnt = 0, res = 0;
	for(int i = 1; i <= n; i++)
	{
		// i <= m时只添加数,添加a[i]到mp2 
		if(i <= m)
		{
			// 添加a[i]到mp2 
			// 如过添加的数在b中还未匹配的数中存在,匹配数+1 
			if(mp2[a[i]] < mp1[a[i]]) cnt ++;
			mp2[a[i]] ++;   
		}
		else 
		{
			if(cnt >= k) res ++;  // 如果当前子数组匹配数大于k,答案+1 
			// 上同 
			if(mp2[a[i]] < mp1[a[i]]) cnt ++;
			mp2[a[i]] ++; 
			// 重点:如果当前子数组中a[i-m]的数量小于等于b中的数量,那么删除a[i-m]才会影响匹配数 
			if(mp2[a[i-m]] <= mp1[a[i-m]]) cnt --;
			mp2[a[i - m]] --;
			
		}
	}
	// 最后一次变化后没判断 
	if(cnt >= k) res ++;
	cout << res << endl;
}
int main()
{
	int T; cin >> T;
	while(T--)
		solve();
	return 0; 
}

E题:Long Inversions

标签: 暴力枚举(brute force)贪心策略(greedy)实现问题,编程技巧,模拟(implementation)排序算法(sortings)

题目大意

  • 给出长度为 n 的仅由字符 "1 "和 "0 "组成的字符串 s。
  • 选择一个整数 k ( 1 ≤ k ≤ n),然后任意多次执行以下操作:
    • 选择字符串中连续的 k 个字符并将其反转,即用 "1 "替换所有 “0”,反之亦然。
  • 通过这些操作,您需要使字符串中的所有字符都等于 “1”。
  • 求:k 的最大值

思路

  • 两步一起可交换或反转每相隔为k + 1位置的数字
  • 例如k = 3如图1,反转红线和黑线,即交换和反转相隔为k + 1位置的数字
  • 那么如图2中的相连的数字都可以任意交换位置
  • 一种做法:用以上方法将0全部移到前1 ~ k 个字符上,然后将其反转,判断能否全部反转即可

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int a[N], b[N], n;
string s;
bool check(int x)
{
	int res = 0;
	for(int i = 0; i < x; i++)
	{
		int cnt = 0;
		for(int j = i; j < n; j += x)
			if(s[j] == '0') cnt ++;
		res += cnt % 2;
	}
	return res % x;
}
void solve()
{
	cin >> n >> s;
	int k = n;
	while(check(k)) k--;
	cout << k << endl;
}
int main()
{
	int T; cin >> T;
	while(T--)
		solve();
	return 0; 
}

logo

//へ     /|
//  /\7    ∠_/
//  / │   / /
// │ Z _,< /   /`ヽ
// │     ヽ   /  〉
//  Y     `  /  /
// イ● 、 ●  ⊂⊃〈  /
// ()  へ    | \〈
//  >ー 、_  ィ  │ //
//  / へ   / ノ<| \\
//  ヽ_ノ  (_/  │//
//	  7       |/
//
/*
          __   _,--="=--,_   __
         /  \."    .-.    "./  \
        /  ,/  _   : :   _  \/` \
        \  `| /o\  :_:  /o\ |\__/
         `-'| :="~` _ `~"=: |
            \`     (_)     `/
     .-"-.   \      |      /   .-"-.
.---{     }--|  /,.-'-.,\  |--{     }---.
 )  (_)_)_)  \_/`~-===-~`\_/  (_(_(_)  (
(                         				)
 )                                     (
'---------------------------------------'
*/

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

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

相关文章

js获取上周本周下周的日期(附Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 现在的时间点是&#xff1a;2024-04-08&#xff0c;对应的日期如下&#xff08;上周、这周、下周&#xff09; 1. 基本知识 讲述Demo之前&#xff0c;先补充一些基础知识 JavaScript 中的 Date 对象是用于处理日期和时间的对象。它…

【ensp】VLAN间通信的解决办法

VLAN间通信简介 VLAN间三层通信是指在VLAN网络中&#xff0c;不同VLAN之间进行通信的过程。 我们知道VLAN是虚拟局域网&#xff0c;在一个局域网内我们是通过Mac地址进行通信&#xff0c;在局域网与局域网之间通过IP地址来通信&#xff0c;大致过程如下&#xff1a; 主机在发…

【SERVERLESS】搭建ServerLess服务

目录 一、前言 二、什么是ServerLess? 三、ServerLess技术选型 四、ServerLess基础服务搭建 Mac安装示例&#xff1a; Windows安装说明&#xff1a; 五、生成ServerLess应用 六、ServerLess部署 验证并访问函数应用 七、ServerLess进阶演示 八、ServerLess最后总结 …

芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第三集】芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖高效AsDDet检测头组合改进,适用于 YOLOv8 …

免费ai写作软件有哪些?分享10个给你 #媒体#学习#媒体

你是否因为写作困顿而感到沮丧&#xff1f;是不是希望能够找到一个能给你提供无限灵感和提高创作效率的利器&#xff1f;AI写作助手就是你的绝佳选择&#xff01;现在我向大家推荐几款好用的AI写作助手&#xff0c;它们将让你的创作之旅更加流畅、富有创意。 1.飞鸟写作 这是…

超详细解读Transformer框架

Transformer是由谷歌大脑2017年在论文《Attention is All You Need》中提出的一种序列到序列(Seq2Seq)模型。自提出伊始&#xff0c;该模型便在NLP和CV界大杀四方&#xff0c;多次达到SOTA效果。NLP领域中&#xff0c;我们所熟知的BERT和GPT就是从Transformer中衍生出来的预训练…

【云计算】云网络产品体系概述

云网络产品体系概述 在介绍云网络产品体系前&#xff0c;先介绍几个与云计算相关的基础概念。 阿里云在基础设施层面分为 地域 和 可用区 两层&#xff0c;关系如下图所示。在一个地域内有多个可用区&#xff0c;每个地域完全独立&#xff0c;每个可用区完全隔离&#xff0c;同…

咸鱼之王_手游_开服搭建架设_内购修复无bug运营版

视频演示 咸鱼之王_手游_开服 游戏管理后台界面 源码获取在文章末尾 源码获取在文章末尾 源码获取在文章末尾 或者直接下面 https://githubs.xyz/y28.html 1.安装宝塔 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &…

Leetcode C语言习题

Leetcode习题27&#xff1a;移除元素 题目&#xff1a; 说明&#xff1a; 示例&#xff1a; 题解&#xff1a; 方法一&#xff1a;&#xff08;开辟额外的数组空间&#xff09; 我们可以创建一个新的数组&#xff0c;然后用循环来遍历原数组&#xff0c;将原数组中不为 val…

29.WEB渗透测试-数据传输与加解密(3)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;28.WEB渗透测试-数据传输与加解密&#xff08;2&#xff09; md5解密网站&#xff1a;ht…

SpringMVC数据接收(全面/详细注释)

SpringMVC涉及组件&#xff1a; DispatcherServlet : SpringMVC提供&#xff0c;我们需要使用web.xml配置使其生效&#xff0c;它是整个流程处理的核心&#xff0c;所有请求都经过它的处理和分发&#xff01;[ CEO ]HandlerMapping : SpringMVC提供&#xff0c;我们需要进行…

高创新 | [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测

高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测 目录 高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现 [24年新算…

实现 jwt 鉴权- SpringBoot + 微服务

目录 项目结构 主要步骤 auth-service里&#xff1a; 1. 配置 pom.xml 依赖 2. 实现HandlerInterceptor 接口的 preHandle 函数 3. 实现 WebMvcConfigurer 的 addInterceptors 接口 4. 生成 token 和验证 token 5. 登录接口示例 user-service 里&#xff1a; 6. 实现拦…

Netty NioEventLoop详解

文章目录 前言类图主要功能NioEventLoop如何实现事件循环NioEventLoop如何处理多路复用Netty如何管理Channel和Selector管理Channel管理Selector注意事项 前言 Netty通过事件循环机制(EventLoop)处理IO事件和异步任务&#xff0c;简单来说&#xff0c;就是通过一个死循环&…

信息泄露漏洞的JS整改方案

引言 &#x1f6e1;️ 日常工作中&#xff0c;我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况&#xff0c;这给我们的系统安全带来了潜在威胁。但幸运的是&#xff0c;对于这类漏洞的整改并不复杂。本文将介绍几种可行的整改方法&#xff0c;以及其中一种…

【C语言】:枚举和联合体

这里写自定义目录标题 1、枚举1.1 枚举类型的声明1.2 枚举类型的优点1.3 枚举类型的使用 2、联合体&#xff08;共用体&#xff09;2.1 联合体类型的声明2.2 联合体的特点2.3联合体大小的计算 1、枚举 1.1 枚举类型的声明 枚举顾名思义就是⼀⼀列举&#xff0c;把可能的取值⼀…

Tomcat以服务方式启动,无法访问网络共享目录问题

关于“Tomcat以服务方式启动&#xff0c;无法访问网络共享目录问题”解决方式如下&#xff1a; 1、通过doc命令【services.msc】打开本地服务找到&#xff0c;找到tomcat服务所在位置 2、右键打开Tomcat服务的属性 3、选择 登陆选项卡 4、选择“此账户”选项&#xff0c;并…

Nginx配置文件修改结合内网穿透实现公网访问多个本地web站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

自动驾驶中的多目标跟踪_第二篇

自动驾驶中的多目标跟踪:第二篇 上一节介绍了多目标跟踪的定义、应用场景和类型以及面临的挑战&#xff1b;在这一节&#xff0c;我们回顾贝叶斯滤波&#xff0c;简单介绍运动模型和量测模型&#xff0c;卡尔曼滤波等。 附赠自动驾驶学习资料和量产经验&#xff1a;链接 贝叶…

Spring事务简介,事务角色,事务属性

1.Spring事务简介 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据操作同成功同失败 public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionE…