2024/10/09 模拟赛总结

news/2024/10/9 22:27:09/文章来源:https://www.cnblogs.com/bluemoon-blog/p/18455234

\(100+40+20+8=168\),拿到了大众分,至少没挂分吧

#A. 矩阵交换

一个 \(m\) 维偏序,可以使用 \(m-1\) 维树状数组解决

以第 \(i\) 作为第 \(i\) 关键字,进行排序,这样一定最优。排完之后直接判断是否满足条件即可

// BLuemoon_
#include <bits/stdc++.h>using namespace std;const int kMaxN = 100 + 5;struct P {int e[kMaxN];
};int t, n, m;
bool flag = 1;
P a[kMaxN];void pr(bool pr) {cout << (pr ? "YES" : "NO") << '\n';
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);freopen("exchange.in", "r", stdin), freopen("exchange.out", "w", stdout);for (cin >> t; t; t--, flag = 1) {cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i].e[j];}}sort(a + 1, a + n + 1, [](P l, P r) {for (int i = 1; i <= m; i++) {if (l.e[i] != r.e[i]) {return l.e[i] < r.e[i];}}return 0 == 1;});for (int j = 1; j <= m; j++) {for (int i = 2; i <= n; i++) {if (a[i].e[j] < a[i - 1].e[j]) {flag = 0;break;}}if (!flag) {break;}}pr(flag);}return 0;
}

#B. 砖块摆放/原题

定义 A\(0\)B\(1\)C\(2\)

所以可以把每一个值 \(d\) 被其下面两个数 \(d_1,d_2\) 表示:

\[d=-(d_1+d_2)\bmod 3 \]

那么最顶层就可以表示成这样:

可以发现这很像杨辉三角,但是模数只有 \(3\),没有逆元。只能用 Lucas 解决

// BLuemoon_
#include <bits/stdc++.h>using namespace std;
using LL = long long;const int kMaxN = 2e5 + 5;int t, n, a[kMaxN], ans;
char ch;int C(int p, int k, int ret = 1) {if (p < k) {return 0;}for (int i = p - k + 1; i <= p; ret *= i, i++);for (int i = 1; i <= k; ret /= i, i++);return ret % 3;
}
int Lucas(int p, int k) {if (p < k) {return 0;}if (p <= 10) {return C(p, k);}return Lucas(p / 3, k / 3) * C(p % 3, k % 3) % 3;
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);freopen("brick.in", "r", stdin), freopen("brick.out", "w", stdout);for (cin >> t; t; t--, ans = 0) {cin >> n;for (int i = 1; i <= n; i++) {cin >> ch, a[i] = ch - 'A';}for (int i = 1; i <= n; i++) {(ans += Lucas(n - 1, i - 1) * a[i] % 3) %= 3;}(n & 1 ^ 1) && (ans = (3 - ans) % 3);cout << (char)(ans + 'A') << '\n';}return 0;
}

#C. 学习 LIS

考虑状压 dp,令 \(dp_{i,j,s}\) 为:正在考虑 \(i\) 填哪里,正在考虑从后向前数第 \(j\) 位是否填 \(i\),填入的集合是 \(s\) 的方案数

转移直接分是否选 \(i\) 分类讨论即可,具体可以看代码

// BLuemoon_
#include <bits/stdc++.h>using namespace std;
using LL = long long;const int kMaxN = 20, kL = 1 << kMaxN, kMaxM = 3e3 + 5;
const LL kP = 998244353;int n, m, a[kMaxN + 1], mx[kL], ans[kMaxN + 1], dp[2][kMaxN + 1][kL], cur, nxt = 1, cnt;
LL c[kMaxM][kMaxM];int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0), c[0][0] = c[1][0] = c[1][1] = 1;freopen("lis.in", "r", stdin), freopen("lis.out", "w", stdout);cin >> n >> m;for (int i = 0; i < n; i++) {cin >> a[i];}for (int i = 2; i < kMaxM; i++) {c[i][0] = 1;for (int j = 1; j <= i; j++) {c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % kP;}}for (int j = 0; j < (1 << n); j++) {for (int i = 0; i < n; i++) {if (j & (1 << i)) {mx[j] = max(mx[j], a[i]);}}}dp[0][n - 1][0] = 1;for (int u = 1; u <= n; u++) {for (int i = n - 1; ~i; i--) {for (int j = 0; j < (1 << n); j++)if (dp[cur][i][j]) {int tmp = dp[cur][i][j];(dp[i ? cur : nxt][(i ? i : n) - 1][j] += tmp) %= kP;if (!(j & (1 << i)) && mx[j & ((1 << i) - 1)] + 1 == a[i]) {(dp[i ? cur : nxt][(i ? i : n) - 1][j | (1 << i)] += tmp) %= kP;}dp[cur][i][j] = 0;}}ans[u] = dp[nxt][n - 1][(1 << n) - 1], swap(cur, nxt);}for (int i = 1; i <= n; i++) {for (int j = i - 1; j >= 1; j--) {ans[i] = (ans[i] + (-1 * c[i][j] * ans[j] % kP) + kP) % kP;}cnt = (cnt + ans[i] * c[m][i] % kP) % kP;}cout << cnt << '\n';return 0;
}

#D. 战略轰炸

人机线段树二分,先咕咕咕

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

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

相关文章

USB协议详解第12讲(USB传输-初探)

1.USB传输、事务、包的关系 USB传输、事务、包是从不同层次上去说明一次数据交互的三个概念。 举个例子可能更好些,"某领导和一个早起的程序员进行了一次交流,说了5件事"。 OK,其实这里的"这次交流"就相当于USB的一次传输,"说了5件事"就相当…

隧道云 cpolar

Dify+Ollama+llava大模型本地搭建个人AI知识库并实现远程访问 https://www.bilibili.com/video/BV1tu24YyEDh/?spm_id_from=333.337.search-card.all.click&vd_source=57e261300f39bf692de396b55bf8c41bcpolar https://www.cpolar.com/features什么是cpolar?cpolar是一种…

C++类

C++类 类 // public 成员提供类的接口,暴漏给外界,供外界使用 // private:提供各种实现类功能的细节方法,但不暴漏给使用者,外界无法使用 // 注意:struct 是成员默认为 public 的 class、class 成员默认是 private class student{ public:int number;char name[100]; …

SE_Paring_Work2

目录具体分工 PSP表格 解题思路描述与设计实现说明3.1 团队作业功能的实现思路 3.2 关键实现的流程图 3.3 重要/有价值的代码片段附加特点设计与展示4.1 设计的创意独到之处及意义 4.2 实现思路 4.3 重要/有价值的代码片段目录说明和使用说明5.1 目录的组织 5.2 如何运行单元测…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(四)

无论100个表还是30个表,在使用PasteForm模式的时候,管理端的页面是一样的,大概4个页面, 利用不同操作模式下的不同dto数据模型,通过后端修改对应的dto可以做到控制前端的UI,在没有特别特殊的需求下可以做到快速的实现CRUD! 免去版本兼容问题,免去前后端不一致的问题,免…

【Azure Entra ID】使用PowerShell脚本导出Entra ID中指定应用下的所有用户信息

问题描述 在Azure Entra ID中,需要导出一个Application 下的用户信息, 包含User的创建时间。 问题解答 可以使用PowerShell 脚本来实现, 只需要执行如下脚本:Connect-AzureAD -AzureEnvironmentName AzureChinaCloud$users = Get-AzureADServiceAppRoleAssignment -ObjectId…

中国移动宽带 IPv6 连接到公网,家庭宽带设置服务器(2024年10月)

摘要: 1、中国移动的宽带,已经支持 IPv6,需要宽带光猫上做好设置。 2、需要从 中国移动 的服务器上获取公网 IPv6 地址。操作: 1、确保宽带WAN连接的前缀获取方式:Prefix Delegation 网关的默认登录用户名(user)、密码,在设备的背面有写着。 如果不是,就联系客服,询问…

实验1 现代C++基础编程

任务1: 源代码task1.cpp1 #include <iostream>2 #include <string>3 #include <vector>4 #include <algorithm>5 6 using namespace std;7 8 // 声明9 // 模板函数声明 10 template<typename T> 11 void output(const T &c); 12 13 // 普通…

深度学习实战人脸表情识别【源码+模型+PyQt5界面】

本研究旨在实现一个基于深度学习的人脸表情识别系统,以准确地识别七种常见的人脸表情:惊讶、恐惧、厌恶、开心、悲伤、愤怒和正常。系统流程包括人脸定位和表情识别两个主要步骤。在人脸定位阶段,采用深度学习算法,通过训练一个卷积神经网络(CNN),实现对图像中人脸位置的…

20222303 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 在本周的学习中,重新回顾了栈和堆的概念,还学习了安全漏洞的相关概念,然后聚焦在其中的缓冲区溢出漏洞上,明白了缓冲区溢出的定义及发生的原理,并了解了缓冲区溢出发展历史上的一些经典攻击案例,收获颇丰。 在本次的实验中,我掌握了反汇编与十六进制编程器相…

考核--复习ma

Markdown语法学习 使用#号,后接空格定义标题,几级标题就是几个#。 这是二级标题 这是三级标题 这是四级标题 段落之间使用一个空行分开,不需要段首缩进。 中文字符与英文、数字字符之间使用1个空格间隔,中文标点与英文、数字字符之间不需要space,就像刚刚那样。遇到英文名…