Codeforces Round 924(Div.2) A~E

A.Rectangle Cutting (模拟)

题意:

给出一个长方形,通过平行于原始矩形的一条边进行切割,将该矩形切割成两个边长为整数的矩形。询问是否能通过旋转和移动这两个矩形,得到新的矩形。

分析:

可以发现拼成的新长方形一定是原长方形的一条边减半,一条边翻倍,只要判断平分切开再拼接不会是正方形即可。

代码:

#include <bits/stdc++.h>using namespace std;void solve() {int n, m;cin >> n >> m;if ((n % 2 == 0 && n / 2 != m) || (m % 2 == 0 && m / 2 != n))cout << "Yes" << endl;elsecout << "No" << endl;
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

B.Equalize (双指针)

题意:

给出一个长度为 n n n的数组 a a a,将一个排列加到 a a a数组上之后,统计所有数字的出现次数,问怎样添加排列可以使得所有数字出现的次数中的最大值尽可能大。输出这个最大值。

分析:

元素之间差值小于 n n n可以通过加上一个排列变成相同的值,将题目转化成有多少不同元素满足它们之间的差值都小于 n n n。利用双指针快速计算。

代码:

#include <bits/stdc++.h>using namespace std;
set<int> s;
vector<int> a;void solve() {int n;cin >> n;s.clear();a.clear();for (int i = 0; i < n; i++) {int x;cin >> x;s.insert(x);}for (auto tmp: s)a.push_back(tmp);int maxval = 1, ans = 1, pos = 0;for (int i = 1; i < a.size(); i++) {if (a[i] - a[pos] >= n) {maxval = max(maxval, ans);while (pos < i && a[i] - a[pos] >= n)pos++;ans = i - pos + 1;} elseans++;}maxval = max(maxval, ans);cout << maxval << endl;
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

C. Physical Education Lesson (思维)

题意:

定义一个数组 a a a a 1 = 1 , a 2 = 2 … a k = k , a k + 1 = k − 1 , a k + 2 = k − 2 , … , a 2 k − 2 = 2 a_1 = 1,a_2 = 2 \dots a_k = k,a_{k + 1} = k - 1, a_{k + 2} = k - 2, \dots ,a_{2k - 2}=2 a1=1,a2=2ak=k,ak+1=k1,ak+2=k2,,a2k2=2,以 2 k − 2 2k - 2 2k2为一组重复。给定 n , x n, x n,x,询问使得 a [ n ] = x a[n] = x a[n]=x k k k有多少个。

分析:

n n n只有两种情况,在递增的序列上和递减的序列上,如果是递增序列那么 n − x n-x nx 2 × k − 2 2\times k-2 2×k2的倍数,如果是递减序列,那么 n + x − 2 n + x - 2 n+x2 2 × k − 2 2 \times k-2 2×k2的倍数,求出所有可能的 k k k,判断第 n n n个数是否为 x x x即可。

代码:

#include <bits/stdc++.h>using namespace std;void solve() {int n, x;cin >> n >> x;int l = n + x - 2;int r = n - x;set<int> s;for (int i = 1; i <= l / i; i++)if (l % i == 0) {if (i % 2 == 0 && (i + 2) / 2 >= x)s.insert(i);if ((l / i) % 2 == 0 && (l / i + 2) / 2 >= x)s.insert(l / i);}for (int i = 1; i <= r / i; i++)if (r % i == 0) {if (i % 2 == 0 && (i + 2) / 2 >= x)s.insert(i);if ((r / i) % 2 == 0 && (r / i + 2) / 2 >= x)s.insert(r / i);}cout << s.size() << endl;
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

D.Lonely Mountain Dungeons (思维)

题意:

n n n个种族,每个种族数量为 c i c_i ci。现在要组建军队,每对处于不同小队的同一种族的生物,都会为军队的总兵力增加 b b b个单位,然而小队越多,越不好管理, k k k个小队组成的军队总兵力会减少 ( k − 1 ) × x (k-1) \times x (k1)×x。询问怎样组建军队能使得总兵力最大。

分析:

假设当前有 k k k队,某个种族有 x x x人,当 x ≤ k x \le k xk时,战力会增加 C ( x , 2 ) C(x,2) C(x,2),当 x > k x > k x>k时,会存在同一种族的人在相同的队伍中,假设有 y y y人,那么需要减去 C ( y , 2 ) C(y,2) C(y,2)。考虑到种族数量加起来为 2 e 5 2e5 2e5,所以考虑暴力枚举 k k k

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const int MAXN = 2e5 + 5;
vector<LL> num(MAXN, 0);void solve() {LL n, b, x;cin >> n >> b >> x;num.clear();map<LL, LL> map1;LL maxval = 0;for (int i = 0; i < n; i++) {cin >> num[i];maxval = max(maxval, num[i]);map1[num[i]]++;}LL ans = 0;for (int i = maxval; i >= 1; i--) {LL sum = 0;for (auto tmp: map1) {LL x = tmp.first / i;LL cnt = tmp.first % i;sum += (tmp.first * (tmp.first - 1) / 2 - (cnt * (x + 1) * x / 2 + (i - cnt) * x * (x - 1) / 2)) *tmp.second;}LL tmp1 = b * sum;tmp1 -= (i - 1) * x;ans = max(ans, tmp1);}cout << ans << endl;
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

E.Modular Sequence (dp)

题意:

给出两个整数 x , y x,y x,y,询问是否存在一个序列 a a a,满足 a 1 = x a_1=x a1=x a i = a i − 1 + y a_i=a_{i-1}+y ai=ai1+y或者 a i = a i − 1 % y a_i=a_{i-1} \%y ai=ai1%y。再给定 n n n s s s,询问序列 a a a的前 n n n项和是否等于 s s s

分析:

可以发现序列 a a a中所有数的余数都是一个固定的数字, s s s先减去这个余数,如果 s s s是合法的,那么 s s s一定是 y y y的倍数,将 s / = y s/=y s/=y将问题转化成 a 1 = x / y , a i = a i − 1 + 1 a_1=x/y,a_i=a_{i-1}+1 a1=x/y,ai=ai1+1或者 a i = 0 a_i=0 ai=0。设 d p [ i ] dp[i] dp[i]表示总和为 i i i,需要的最短长度。 d p dp dp可以用完全背包进行预处理。由于 a 1 a_1 a1不一定为 0 0 0,所以需要枚举 a 1 a_1 a1往后加了多少位的 1 1 1。再用 d p dp dp判断是否有解。

代码:

#include <bits/stdc++.h>using namespace std;
const int MAXN = 2e5 + 5;
vector<int> dp(MAXN + 1, 1e9);void init() {dp[0] = 0;for (int i = 1;; i++) {int t = i * (i + 1) / 2;if (t > MAXN)break;for (int j = t; j <= MAXN; j++) {dp[j] = min(dp[j], dp[j - t] + i + 1);}}
}void solve() {int n, x, y, s;cin >> n >> x >> y >> s;int r = x % y;if (1LL * r * n > s) {cout << "NO" << endl;return;}s -= r * n;if (s % y != 0) {cout << "NO" << endl;return;}s /= y;vector<int> a(n + 1);a[1] = x / y;int pos = -1;int sum = a[1], k = a[1];for (int i = 1; i <= n && sum <= s; i++) {if (dp[s - sum] <= n - i) {pos = i;break;}k += 1;sum += k;}if (pos == -1) {cout << "NO" << endl;return;}for (int i = 2; i <= pos; i++) {a[i] = a[i - 1] + 1;}s -= sum;int minval = dp[s];for (int i = 1; s > 0; i++) {int t = i * (i + 1) / 2;while (s > 0 && dp[s - t] + i + 1 == minval) {s -= t;minval -= i + 1;for (int j = 0; j <= i; j++) {pos++;a[pos] = j;}}}cout << "YES" << endl;for (int i = 1; i <= n; i++) {cout << a[i] * y + r << " ";}cout << endl;
}int main() {init();int t;cin >> t;while (t--) {solve();}return 0;
}

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python算法探索:从经典到现代(三)

一、引言 随着信息技术的飞速发展&#xff0c;数据已经成为现代社会不可或缺的资源。Python&#xff0c;作为数据处理和分析的利器&#xff0c;为我们提供了大量强大的库和工具&#xff0c;用于从经典到现代的各种算法探索。本文将带你领略Python在算法领域的魅力&#xff0c;从…

COW AI接入到微信 保姆教程 (部署在服务器,插件安装)

此文章不涉及国外的AI模型&#xff0c;也无需翻墙&#xff0c;跟某AI模型无关&#xff0c;审核大哥别弄错了 最近的AI开始越开越火了&#xff0c;开始介入到我们生活中的方方面面。就有人好奇AI是否能接入到微信吗&#xff1f;我在GitHub上搜索的时候还真有除了对话外还可以通…

MySQL 基础知识(五)之数据增删改

目录 1 插入数据 2 删除数据 3 更改数据 创建 goods 表 drop table if exists goods; create table goods ( id int(10) primary key auto_increment, name varchar(14) unique, stockdate date )charsetutf8; 1 插入数据 当要插入的数据为日期/时间类型时&#xff0c;如果…

Spring Boot 笔记 021 项目部署

1.1 引入坐标&#xff0c;并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新&#xff08;略&#xff09; 2.1.3 外部配置文件&#xff0c…

日期类运算符重载以及const成员详细解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.前言 二.运算符重载 2.1概念 2.2比较的符号重载 2.2.1…

ZBX_NOTSUPPORTED: Unsupported item key. 原因排查

进行自定义监控项时&#xff0c;在zabbix-agent端测试没问题&#xff0c;却在zabbix-server进行测试时&#xff0c;出现 ZBX_NOTSUPPORTED: Unsupported item key. 1.在zabbix-agent测试没问题&#xff0c;证明自定义监控项的脚本没问题&#xff0c;却在zabbix-server端测试出…

点击侧边栏菜单时只切换 <router-view> 中的内容,而不是进行整个页面的路由跳转(动态路由)

解决方法&#xff1a;在 <el-menu> 的 select 事件中调用了 handleMenuSelect 方法来处理菜单项的选择。你可以在 handleMenuSelect 方法中根据菜单项的 index 来执行相应的操作&#xff0c;例如更新组件内的数据或者切换组件。由于整个页面的路由路径并没有改变&#xf…

平时积累的FPGA知识点(7)

平时在FPGA群聊等积累的FPGA知识点&#xff0c;第七期&#xff1a; 11 描述扇出的xilinx官方文档是&#xff1f; 解释&#xff1a;ug949 12 在BD中如何指定某个IP用global&#xff0c;其他的用OOC模式&#xff1f;因为某个模块引用的IP带着XPM&#xff0c;综合不了 解释&am…

代码随想录Day50 | 70. 爬楼梯 322. 零钱兑换 279.完全平方数

代码随想录Day50 | 70. 爬楼梯 322. 零钱兑换 279.完全平方数 70.爬楼梯322.零钱兑换279.完全平方数 70.爬楼梯 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 状态 dp数组 dp[j]表示爬上第j阶台阶需要的方法数递推公式&#xff0c;由于在每一阶台阶可以向上走1~m阶&a…

代码随想录算法训练营Day57|647. 回文子串、516.最长回文子序列、动态规划总结

目录 647. 回文子串 前言 思路 算法实现 516.最长回文子序列 前言 思路 算法实现 动态规划总结 动规五部曲回顾 动规各小专题问题 647. 回文子串 题目链接 文章链接 前言 本题利用动态规划求解时&#xff0c;dp数组的定义与前面的就有些不同了&#xff0c;是难点之…

随机过程及应用学习笔记(三)几种重要的随机过程

介绍独立过程和独立增量过程。重点介绍两种独立增量过程-—维纳过程和泊松过程。 目录 前言 一、独立过程和独立增量过程 1、独立过程&#xff08;Independent Process&#xff09; 2、独立增量过程&#xff08;Independent Increment Process&#xff09; 二、正态过程&am…

debug - 打补丁 - 浮点数加法

文章目录 debug - 打补丁 - 浮点数加法概述笔记demo用CE查看汇编(x64debug)main()update_info()快捷键 - CE中查看代码时的导航打补丁的时机 - 浮点数加法补丁代码补丁效果浮点数寄存器组的保存END debug - 打补丁 - 浮点数加法 概述 在cm中, UI上显示的数值仅仅用来显示, 改…

力扣---通配符匹配

题目描述&#xff1a; 给你一个输入字符串 (s) 和一个字符模式 (p) &#xff0c;请你实现一个支持 ? 和 * 匹配规则的通配符匹配&#xff1a; ? 可以匹配任何单个字符。 * 可以匹配任意字符序列&#xff08;包括空字符序列&#xff09;。 判定匹配成功的充要条件是&#xff…

华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接

文章目录 前言思路主要思路关于f函数的剖析Code就到这&#xff0c;铁子们下期见&#xff01;&#xff01;&#xff01;&#xff01; 前言 铁子们好啊&#xff01;今天阿辉又给大家来更新新一道好题&#xff0c;下面链接是23年9月27的华为笔试原题&#xff0c;LeetCode上面的ha…

开源≠不赚钱,开源软件盈利的7大模式。

开源不是目的&#xff0c;目的是圈用户&#xff0c;留住用户&#xff0c;盈利自然不成问题。 开源系统可以通过多种方式赚钱&#xff0c;以下是其中几种常见的方式&#xff1a; 提供付费支持&#xff1a; 开源系统可以提供付费的技术支持服务&#xff0c;包括安装、配置、维…

mysql5.6安装---windows版本

安装包下载 链接&#xff1a;https://pan.baidu.com/s/1L4ONMw-40HhAeWrE6kluXQ 提取码&#xff1a;977q 安装视频 1.解压完成之后将其放到你喜欢的地址当中去&#xff0c;这里我默认放在了D盘&#xff0c;这是我的根目录 2.配置环境变量 我的电脑->属性->高级->环境…

阿里云增加数据库访问白名单

阿里云增加数据库访问白名单 概况 我们希望在外网访问数据库时&#xff0c;可能会遇到无法连接的问题&#xff0c;这有可能是被拦截了。这时就需要去查看自己的ip有没有在白名单里面&#xff0c;没有的话就把ip加入到白名单。 路径 阿里云控制台-搜索RDS-进入RDS管理控制台…

宋小黑的生财知识资料库第1011期

大家好&#xff0c;我是小黑&#xff0c;在当前经济和职场环境中&#xff0c;拥有一份副业已经成为很多人增加财务安全感和提升个人能力的重要手段。通过投身于副业&#xff0c;你不仅可以为自己创造一个额外的收入来源&#xff0c;减少对主职工作的经济依赖&#xff0c;还可以…

【C++】类和对象(四)

前言&#xff1a;在类和对象中&#xff0c;我们走过了十分漫长的道路&#xff0c;今天我们将进一步学习类和对象&#xff0c;类和对象这块荆棘地很长&#xff0c;各位一起加油呀。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&a…

【Spring】定义过滤器Filter和拦截器Interceptor

# 定义过滤器 package com.holen.filter;import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import java.io.IOException;pub…