Codeforces Round 946 (Div. 3) A~G

A.Phone Desktop (枚举)

题意:

A A A的手机有一个桌面(或称启动器)。桌面可以由多个屏幕组成。每个屏幕表示为大小为 5 × 3 5 \times 3 5×3 的网格,即五行三列。

x x x 个应用程序的图标大小为 1 × 1 1 \times 1 1×1 个单元格;这样的图标只占屏幕的一个单元格。还有 y y y 个应用程序的图标大小为 2 × 2 2 \times 2 2×2 个单元。;这样的图标在屏幕上占据了 4 4 4 个单元格的个方格。每个屏幕的每个单元格最多只能有一个图标。

A A A希望在最少的屏幕上放置应用程序图标。请帮她找出所需的最少屏幕数。

分析:

我们直接枚举需要放几个屏幕,再判断是否合法即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;int main() {int t;cin >> t;while (t--) {LL x, y;cin >> x >> y;for (int i = 0; i <= 200; i++) {if (i * 2LL < y)continue;LL ans = 7LL * i + (2LL * i - y) * 4LL;if (ans >= x) {cout << i << endl;break;}}}return 0;
}

B.Symmetric Encoding (模拟)

题意:

给出一个由小写字母组成的字符串 s s s 。使用以下算法对这个字符串进行编码:

  • 首先,构建一个新的辅助字符串 r r r ,该字符串由字符串 s s s 中所有不同的字母组成,按字母顺序书写;
  • 然后进行如下编码:将字符串 s s s 中的每个字符替换为字符串 r r r 中的对称字符(字符串 r r r 中的第一个字符将被最后一个字符替换,第二个字符将被从头开始的第二个字符替换,以此类推)。

例如, s s s = c o d e f o r c e s codeforces codeforces字符串的编码过程如下:

  • 字符串 r r r 得到 c d e f o r s cdefors cdefors
  • 第一个字符 s 1 s_1 s1 = c c c 被替换为 s s s
  • 第二个字符 s 2 s_2 s2 = o o o 被替换为 e e e
  • 第三个字符 s 3 s_3 s3 = d d d 被替换为 r r r
  • 最后一个字符 s 10 s_{10} s10 = s s s 被替换为 c c c
    因此,对字符串 s s s = c o d e f o r c e s codeforces codeforces 进行编码的结果是字符串 s e r o f e d s o c serofedsoc serofedsoc
    编写一个程序来执行解码,即从编码结果中还原出原始字符串 s s s

分析:

我们首先对字符串去重,再用 m a p map map存储映射关系,按照题意模拟即可。

代码:

#include <bits/stdc++.h>
using namespace std;int main() {int T;cin >> T;while (T--) {int n;cin >> n;string a;cin >> a;map<char, int> mp;vector<char> tmp;for (auto t: a) {if (!mp[t]) {mp[t] = 1, tmp.push_back(t);}}sort(tmp.begin(), tmp.end());for (int i = 0; i < tmp.size(); i++) mp[tmp[i]] = i;for (auto &t: a) cout << tmp[tmp.size() - mp[t] - 1];cout << endl;}return 0;
}

C. Beautiful Triple Pairs (数学)

题意:

给出由 n n n个整数组成的数组 a a a。每个 j j j ( 1 ≤ j ≤ n − 2 1 \le j \le n - 2 1jn2 ) 都有一个由 [ a j , a j + 1 , a j + 2 ] [a_j, a_{j + 1}, a_{j + 2}] [aj,aj+1,aj+2] 组成的三元组。

如果一对三元组 b b b c c c 在一个位置上完全不同,即满足以下条件之一,那么它们就是美丽的:

  • b 1 ≠ c 1 b_1 \ne c_1 b1=c1 b 2 = c 2 b_2 = c_2 b2=c2 b 3 = c 3 b_3 = c_3 b3=c3
  • b 1 = c 1 b_1 = c_1 b1=c1 b 2 ≠ c 2 b_2 \ne c_2 b2=c2 b 3 = c 3 b_3 = c_3 b3=c3
  • b 1 = c 1 b_1 = c_1 b1=c1 b 2 = c 2 b_2 = c_2 b2=c2 b 3 ≠ c 3 b_3 \ne c_3 b3=c3

求写成的三元组 [ a j , a j + 1 , a j + 2 ] [a_j, a_{j + 1}, a_{j + 2}] [aj,aj+1,aj+2] 中优美的三元组对数。

分析:

假设三元组为 ( x , y , z ) (x,y,z) (x,y,z),当保证 x x x不同时, y , z y,z y,z相同时,结果为 [ ? , y , z ] [?, y, z] [?,y,z]的数量减去 [ x , y , z ] [x, y, z] [x,y,z]的数量。另外两种情况类似,所以我们只要用计算出三种情况的数量再减去 3 3 3倍的[x, y, z]$的数量即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;int main() {int T;cin >> T;while (T--) {int n;cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i++)cin >> a[i];map<array<int, 3>, LL> mp;map<array<int, 2>, LL> mp1, mp2, mp3;LL ans = 0;for (int i = 3; i <= n; i++) {ans += mp1[{a[i - 2], a[i - 1]}];ans += mp2[{a[i - 2], a[i]}];ans += mp3[{a[i - 1], a[i]}];ans -= 3ll * mp[{a[i - 2], a[i - 1], a[i]}];mp1[{a[i - 2], a[i - 1]}]++;mp2[{a[i - 2], a[i]}]++;mp3[{a[i - 1], a[i]}]++;mp[{a[i - 2], a[i - 1], a[i]}]++;}cout << ans << endl;}return 0;
}

D.Ingenuity-2 (思维)

题意:

我们把火星表面想象成一个无限坐标平面。最初,"毅力-2 号 "漫游车和 "智慧-2 号 "直升机位于坐标为 ( 0 , 0 ) (0, 0) (0,0) 的点上。现在为它们专门开发了一套指令 s s s ,由以下类型的 n n n 指令组成:

  • N N N:向北移动一米(从点 ( x , y ) (x, y) (x,y) ( x , y + 1 ) (x, y + 1) (x,y+1) );
  • S S S:向南移动一米(从点 ( x , y ) (x, y) (x,y) ( x , y − 1 ) (x, y - 1) (x,y1) );
  • E E E:向东移动一米(从点 ( x , y ) (x, y) (x,y) 移至点 ( x + 1 , y ) (x + 1, y) (x+1,y) );
  • W W W:向西移动一米(从点 ( x , y ) (x, y) (x,y) 移至 ( x − 1 , y ) (x - 1, y) (x1,y) )。

每条指令必须由漫游车或直升机执行。此外,漫游车或直升机都必须至少执行一条指令。你的任务是分配指令,使直升机和漫游者在执行所有 n n n条指令后,最终到达相同的点,或者确定这是不可能的。

分析:

我们首先考虑不可能的情况:

  • n n n为奇数
  • N N N S S S E E E W W W的奇偶性不一致

  • n = 2 n=2 n=2,但两次行动不相同

除掉上述情况,我们可以按照以下顺序执行目标:
N N N S S S先分配给直升机,再分配给探测车。 E E E W W W的分配顺序则相反,这样我们可以保证符合题意。

代码:

#include <bits/stdc++.h>
using namespace std;int main() {int T;cin >> T;while (T--) {int n;cin >> n;vector<char> a(n);map<char, int> m;for (auto &t: a) {cin >> t;m[t]++;}if (n % 2 || m['N'] % 2 != m['S'] % 2 || m['E'] % 2 != m['W'] % 2) {cout << "NO" << endl;continue;}if (n == 2 && a[0] != a[1]) {cout << "NO" << endl;continue;}vector<char> ans(n);for (auto tmp: {'N', 'S', 'E', 'W'}) {int flag = 0;if (tmp == 'N' || tmp == 'S') flag = 1;for (int i = 0; i < n; i++) {char it = a[i];if (it == tmp) {if (flag) {ans[i] = 'R';} else {ans[i] = 'H';}flag ^= 1;}}}for (auto &tmp: ans) cout << tmp;cout << endl;}return 0;
}

E.Money Buys Happiness(动态规划)

题意:

作为一名物理学家,查理喜欢用简单精确的语言来规划自己的生活。

在接下来的 m m m个月里,从没有钱开始,查理将努力工作,每月赚取 x x x英镑。在第 i i i ( 1 ≤ i ≤ m ) (1\le i \le m) (1im)里,将有一次机会,付出 c i c_i ci英镑的代价,获得幸福 h i h_i hi

不允许借贷。在第 i i i月赚到的钱只能在之后的第 j j j月( j > i j\gt i j>i)花掉。

既然物理学家不会编程,帮查理找出幸福的最大值吧。

分析:

从数据范围可以得知天数和可以得到的所有的幸福值数据范围很小,考虑 d p dp dp

状态 i i i表示第几天,状态 j j j表示幸福值。

d p i j dp_{ij} dpij代表 i i i天获得 j j j点幸福值所剩的最多钱。

每次把这个月剩的钱数和这个月新赚的的钱数加到下一个月。 如果当前的钱数可以购买今天的幸福值的时候,购买之后下个月对应的幸福度所剩的钱数和和我当前的钱数+本月的钱数-买本月幸福度所花费的钱取个最大值即可。

代码:

#include<bits/stdc++.h>typedef long long LL;
using namespace std;
const LL N = 2e5 + 10;
const LL MIN = -1e18;
LL a[N], b[N];
LL dp[100][N];void solve() {LL m, x;cin >> m >> x;LL sum = 0;for (LL i = 1; i <= m; i++) {cin >> a[i] >> b[i];sum += b[i];}for (LL i = 0; i <= m + 1; i++) {for (LL j = 0; j <= sum; j++) {dp[i][j] = MIN;}}dp[1][0] = 0;for (LL i = 1; i <= m; i++) {for (LL j = 0; j <= sum; j++)dp[i + 1][j] = dp[i][j] + x;for (LL j = 0; j <= sum; j++) {if (dp[i][j] >= a[i]) {dp[i + 1][j + b[i]] = max(dp[i + 1][j + b[i]], dp[i][j] + x - a[i]);}}}for (LL i = sum; i >= 0; i--) {if (dp[m + 1][i] >= 0) {cout << i << endl;return;}}
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

F.Cutting Game(模拟、数据结构)

题意:

爱丽丝和鲍勃又在玩一个游戏。他们有一个大小为 a × b a\times b a×b( 1 ≤ a , b ≤ 1 0 9 1\le a,b\le 10^9 1a,b109)的网格,网格上有 n n n个筹码,每个单元格中最多有一个筹码。位于第 x x x行和第 y y y列交点的单元格坐标为 ( x , y ) (x, y) (x,y)

爱丽丝先下一步棋,然后棋手们轮流下棋。在每一步棋中,棋手可以从剩余网格的开头或末尾切掉几行或几列(但不是全部),并为网格切掉部分的每一个筹码赢得一分。每一步棋都可以用字符"U"、“D”、"L"或"R"以及整数 k k k来描述:

  • 如果字符为"U",那么将剪切剩余的前 k k k行;
  • 如果字符为"D",则将剪切剩余的最后 k k k行;
  • 如果字符为"L",则将剪切剩余的前 k k k列;
  • 如果字符为"R",则将剪切剩余的最后 k k k列。

根据网格的初始状态和玩家的移动,确定爱丽丝和鲍勃分别获得的点数。

分析:

以横坐标正序,横坐标倒序,纵坐标正序和纵坐标倒序分别对于所有点建立优先队列。

对于询问,这里以"U"操作为例,首先可以计算出新的矩形上边界,然后就可以在优先队列中得到横坐标在被截取范围内的所有点。然后,只需要判断该点的纵坐标是否在当前未被截去的纵坐标范围内即可。

实现的时候用 m a p map map维护每个点是否被取走,实现方式是类似的。因为每个点只会被取到四次,总时间复杂度为
O ( n l o g n ) O(nlogn) O(nlogn)

代码:

#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
map<pair<LL,LL>,LL>mp;
void solve(){mp.clear();LL u,d,l,r,a,b,n,m;cin>>a>>b>>n>>m;u=1,d=a,l=1,r=b;priority_queue<pair<LL,LL>>q1,q2,q3,q4;for(LL i=1;i<=n;++i){LL x,y;cin>>x>>y;mp[make_pair(x,y)]=1;q1.push(make_pair(x,y));q2.push(make_pair(-x,y));q3.push(make_pair(y,x));q4.push(make_pair(-y,x));}LL ans[2]={};for(LL i=1;i<=m;++i){char op;LL t;cin>>op>>t;if(op=='U'){u+=t;while(!q2.empty()){auto U=q2.top();if(-U.first>=u)break;if(mp[make_pair(-U.first,U.second)]){mp[make_pair(-U.first,U.second)]=0;++ans[i%2];}q2.pop();}}if(op=='D'){d-=t;while(!q1.empty()){auto u=q1.top();if(u.first<=d)break;if(mp[u]){mp[u]=0;++ans[i%2];}q1.pop();}}if(op=='L'){l+=t;while(!q4.empty()){auto u=q4.top();if(-u.first>=l)break;if(mp[make_pair(u.second,-u.first)]){mp[make_pair(u.second,-u.first)]=0;++ans[i%2];}q4.pop();}}if(op=='R'){r-=t;while(!q3.empty()){auto u=q3.top();if(u.first<=r)break;if(mp[make_pair(u.second,u.first)]){mp[make_pair(u.second,u.first)]=0;++ans[i%2];}q3.pop();}}}cout<<ans[1]<<' '<<ans[0]<<endl;
}int main(){LL t;cin>>t;while(t--)solve();return 0;
}

G.Money Buys Less Happiness Now(数据结构)

题意:

在这个版本的题目中,每个月只能购买 h i = 1 h_i=1 hi=1幸福,但月数却大大增加了。我们进入了量子幸福和时间膨胀的领域。

作为一名物理学家,查理喜欢用简单精确的语言来规划自己的生活。

在接下来的 m m m个月里,查理将从没有钱开始,努力工作,每月赚取 x x x英镑。在第 i i i个月 ( 1 ≤ i ≤ m ) (1\le i \le m) (1im)里,只有一次机会,付出 c i c_i ci英镑的代价来获得一个单位的幸福。每月不能购买超过一个单位。

不允许借贷。在第 i i i月赚到的钱只能在之后的第 j j j月花掉( j > i j\gt i j>i)。

帮查理找出可达到的最大幸福值吧。

分析:

本题用优先队列维护即可,每次如果当前费用足够直接购买,否则查看先前购买的最贵的是不是比当前的还贵,如果是的就不要前面那个,选择当前的幸福感,否则就放弃当前的物品。

代码:

#include<bits/stdc++.h>typedef long long LL;
using namespace std;void solve() {LL n, x, sum = 0;cin >> n >> x;priority_queue<LL> q;for (int i = 1; i <= n; i++, sum += x) {LL tmp;cin >> tmp;if (sum >= tmp) {q.push(tmp);sum -= tmp;} else if (q.size()) {LL pre = q.top();q.pop();if (pre > tmp) {sum += pre;sum -= tmp;q.push(tmp);} elseq.push(pre);}}cout << q.size() << endl;
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

赛后交流

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

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

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

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

相关文章

学前基础知识

1、Java版本&#xff1a; 1995年发布第一个版本&#xff0c;创始人gosling。 可知&#xff0c; JAVA8 和 JAVA11 为长期版本&#xff0c;其他均非长期版本&#xff0c;因此主流都在用 JAVA8 或 JAVA11。 2、Java技术体系平台&#xff1a; 3、Java重要特点 ①Java语言是面向对象…

【IDEA】Redis可视化神器

在开发过程中&#xff0c;为了方便地管理 Redis 数据库&#xff0c;我们可能会使用一些数据库可视化插件。这些插件通常可以帮助你在 IDE 中直观地查看和管理 Redis 数据库&#xff0c;包括查看键值对、执行命令、监视数据库活动等。 IDEA作为IDE界的Jenkins&#xff0c;本身自…

游戏联运的挑战与核心关键点

​游戏联运一个看似充满机遇与挑战的行业&#xff0c;吸引了很多创业者的加入。然而&#xff0c;真正踏入这个行业后&#xff0c;许多人会发现&#xff0c;手游代理并非想象中的那么简单。今天&#xff0c;溪谷软件就来和大家聊聊游戏联运是怎么做的&#xff0c;需要注意什么。…

HTTP请求拦截器链

文章目录 HTTP请求拦截器链需求定义写一个Controller方法接口写三个http请求拦截器把拦截器加入到配置中&#xff0c;并且配置拦截规则在postman里面发送请求&#xff0c;看下测试结果是否正确 HTTP请求拦截器链 需求定义 我们写一个包含三个HTTP请求拦截器的拦截器链&#x…

MongoDB数据库(10亿条数据)清理策略: 自动化过期数据删除实战

1、引言 随着应用程序和业务数据的持续增长&#xff0c;有效地管理数据库存储空间成为维护系统性能的关键。在MongoDB这类NoSQL数据库中&#xff0c;定期清理过期数据变得尤为重要&#xff0c;这不仅能释放宝贵的存储资源&#xff0c;还能优化查询性能&#xff0c;确保数据库运…

PS:电子书App自动截图后合成一个PDF文档

说明&#xff1a;有的电子书App不能下载到本地&#xff0c;通过自动截图后合成一个PDF文档来解决&#xff01; 一、自动截图App 1.安装”免ROOT自动化助手“ 2.创建一个任务 3.编辑任务&#xff1a;根据电子书的操作顺序制定&#xff0c;400次就是书籍页数&#xff08;次数一…

【Jmeter】性能测试之压测脚本生成,也可以录制接口自动化测试场景

准备工作-10分中药录制HTTPS脚本&#xff0c;需配置证书 准备工作-10分中药 以https://www.baidu.com/这个地址为录制脚本的示例。 录制脚本前的准备工作当然是得先把Jmeter下载安装好、JDK环境配置好、打开Jmeter.bat&#xff0c;打开cmd&#xff0c;输入ipconfig&#xff0c;…

Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none

目录 1. 简介 2. 详细分析 2.1 使用场景区别 2.2 ap_continue 行为详解 2.3 ap_ctrl_chain 行为详解 3. 总结 1. 简介 块级控制协议允许硬件模块表明&#xff1a; 何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态&#xff0c;准备接受新的数据输入。 …

这么多不同接口的固态硬盘,你选对了嘛!

固态硬盘大家都不陌生,玩游戏、办公存储都会用到。如果自己想要给电脑或笔记本升级下存储,想要存储更多的文件,该怎么选购不同类型的SSD固态盘呐,下面就来认识下日常使用中常见的固态硬盘。 固态硬盘(Solid State Drive, SSD)作为数据存储技术的革新力量,其接口类型的选…

【深度 Q 学习-01】 Q学习概念和python实现

文章目录 一、说明二、深度 Q 学习概念三、python实现四、结论 关键词&#xff1a;Deep Q-Networks 一、说明 在强化学习 &#xff08;RL&#xff09; 中&#xff0c;Q 学习是一种基础算法&#xff0c;它通过学习策略来最大化累积奖励&#xff0c;从而帮助智能体导航其环境。它…

气膜建筑的运营成本解析:高效节能的运作模式—轻空间

气膜建筑以其独特的优势和广泛的应用吸引了大量关注。然而&#xff0c;许多人对其持续吹气的运营成本产生了疑问。实际上&#xff0c;气膜建筑通过智能控制系统和高效的风机管理&#xff0c;大大降低了运营成本。本文将以2000平方米的气膜建筑为例&#xff0c;详细解析其运行成…

Vue3 - 实现一个雨水滴落的动画效果

在 Vue 3 中实现一个雨水滴落的动画效果,可以使用 HTML5 的 <canvas> 元素和 JavaScript 来绘制和控制动画。 以下是一个实现雨水滴落效果的示例: 创建一个 Vue 3 项目 首先,确保你已经创建了一个 Vue 3 项目。如果还没有,可以使用 Vue CLI 来创建: vue create r…

2024年社会发展、人文艺术与文化国际会议(ICSDHAC 2024)

2024年社会发展、人文艺术与文化国际会议&#xff08;ICSDHAC 2024&#xff09; 会议简介 2024年国际社会发展、人文、艺术和文化会议&#xff08;ICSDHAC 2024&#xff09;将在广州举行。会议旨在为从事社会发展、人文、艺术和文化研究的专家学者提供一个平台&#xff0c;分…

字符串操作:写一个方法,实现字符串的反转,如:输入abc,输出cba

import java.util.Scanner; public class Test_A15 {public static void main(String[] args){String strA"";System.out.println("请输入一串字符串:");Scanner scannernew Scanner(System.in);strAscanner.next();Test_A15 T15new Test_A15();String re…

leetCode.86. 分隔链表

leetCode.86. 分隔链表 题目思路&#xff1a; 代码 class Solution { public:ListNode* partition(ListNode* head, int x) {auto lh new ListNode(-1), rh new ListNode(-1);auto lt lh, rt rh;for(auto p head; p; p p->next ) {if(p->val < x) {lt lt->…

Midjourney保姆级教程(五):Midjourney图生图

Midjourney生成图片的方式除了使用文字描述生成图片外&#xff0c;还有“图生图”的方式&#xff0c;可以让生成的图片更接近参考的图片。 今天我们来聊聊“图生图”的方式。 一、模仿获取propmt 很多时候&#xff0c;我们不知道画什么内容的图片&#xff0c;大家可以关注内…

SRS视频服务器应用研究

1.SRS尝试从源码编译启动 1.1.安装ubuntu 下载镜像文件 使用VMWare安装&#xff0c;过程中出现蓝屏&#xff0c;后将VM的软件版本从15.5升级到17&#xff0c;就正常了。 1.2.更新ubuntu依赖

第二十四章多栏布局解决方案(什么是自适应?/)

什么是自适应? 指能使网页自适应显示在不同大小终端设备上新网页设计方式及技术.简单的来说自适应就是让同一个页面自动适应不同大小的设备&#xff0c;从而解决为不同设备提供不同版本的页面问题。 1&#xff0e;两列自适应 两列自适应布局是指左侧固定宽度&#xff0c;右…

低代码开发与人工智能技术在商品推荐系统中的应用

引言 低代码开发和人工智能技术的背景和重要性 随着数字化转型的深入&#xff0c;企业在信息技术领域面临着前所未有的挑战和机遇。快速变化的市场需求、日益复杂的技术环境以及高度竞争的商业环境&#xff0c;迫使企业不断寻求高效的开发和运营解决方案。低代码开发平台应运而…

【java-数据结构19-队列的模拟实现】

上篇文章&#xff0c;小编已经带大家一起认识了队列&#xff0c;并且对队列的方法进行调用测试&#xff0c;下面我们将模拟实现一个队列&#xff0c;话不多说&#xff0c;上正文~ 1.队列的模拟实现 队列的实现方法和链表的实现方式一模一样&#xff0c;这里我们首选双链表&…