小明的oj2025年3月月赛-Div2
T1
1、算法思想难度
问题类型:枚举。
错误原因:没有排序
2、改进措施
- 写完之后要手造数据,再检查一遍。
3、数学建模维度
复杂度计算:
- 排序:\(O(n\log n)\)
- 枚举:\(O(n)\)
4、改进措施
- 多注意细节,在做题前手搓样例,验证程序。
T3
1、算法思想难度
问题类型:dp。
错误原因:w写成h了
2、实现细节维度
边界条件:初始状态为 \(dp_{i,j} = F * (i+j)\)
解题框架
#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 105;
int w, h, n, f, dx[kMaxN], dy[kMaxN], c[kMaxN], dp[2][kMaxN][kMaxN];
int main() {
freopen("crystal.in", "r", stdin);
freopen("crystal.out", "w", stdout);
cin >> w >> h >> n >> f;
for (int i = 1; i <= n; i++) {
cin >> dx[i] >> dy[i] >> c[i];
}
for (int i = 0; i <= w; i++) {
for (int j = 0; j <= h; j++) {
dp[0][i][j] = (i + j) * f;
}
}
for (int i = 1; i <= n; i++) {
for (int x = 0; x <= w; x++)
for (int y = 0; y <= h; y++)
dp[i & 1][x][y] = dp[(i & 1) ^ 1][x][y];
for (int x = 0; x <= w; x++) {
for (int y = 0; y <= h; y++) {
int nx = x - dx[i], ny = y - dy[i];
if (nx >= 0 && ny >= 0) dp[i & 1][x][y] = min(dp[i & 1][x][y], dp[(i & 1) ^ 1][nx][ny] + c[i]);
}
}
}
cout << dp[n & 1][w][h];
}
3、数学建模维度
复杂度计算:
- DP:\(O(nG_{x}^2)\)
4、改进措施
- 变量名称最好选一些自己容易辨识的字母。
- 写题时不能浮躁,沉下心来。
T5
1、算法思想难度
问题类型:数学。
错误原因:方法错误。
正确思路:因为 C 不超过 \(10^18\) 所以必有一根小于 \(10^6\) 枚举即可。
2、实现细节难度
边界条件:要开 long long,注意枚举的 r 为 0 时会有问题,输出时要排序。
代码框架
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a, b, c;
bool Check(int x) {
if (x == (int)(sqrt(x)) * (int)(sqrt(x))) {
return 1;
}
return 0;
}
void Print(int x, int y, int z) {
int a[] = {x, y, z};
sort(a, a + 3);
cout << a[0] << ' ' << a[1] << ' ' << a[2];
}
signed main() {
freopen("equation.in", "r", stdin);
freopen("equation.out", "w", stdout);
cin >> a >> b >> c;
for (int r = -1e6; r <= 1e6; r++) {
if (!r) continue;
if (llabs(c) % r == 0) {
int x = -(a + r), y = -(c / r);
int d = x * x - 4 * y;
if (d < 0) continue;
if (!Check(d)) continue;
int _ = -x + sqrt(d);
if (_ % 2 == 0) {
Print(x + _ / 2, -_ / 2, r), exit(0);
}
_ = -x - sqrt(d);
if (_ % 2 == 0) {
Print(x + _ / 2, -_ / 2, r), exit(0);
}
}
/*
a+b=x
ab=y
a=x-b
(x-b)b=y
-b^2+xb-y=0
a=-1,b=x,c=-y
(-x + sqrt(x^2-4*y)) / (-2)
*/
}
}
3、数学建模维度
复杂度计算:
- 枚举解:\(O(10^6)\)
- 总复杂度:\(O(10^6)\)
T6
1、算法思想难度
问题类型:线段树、哈希
错误原因:考试时看到输入用种子给出,就感觉这题很难,思考方向出错,以为种子生成的数据会有规律。
正确思路:预处理出每个串的 hash 值,注意到答案有单调性考虑二分。
2、实现细节难度
边界条件:每个字符串 hash 数组都开 8e5 会炸空间,考虑使用 vector resize。
代码框架
#include <bits/stdc++.h>
#define int long long
using namespace std;
using ULL = unsigned long long;
const int kMaxN = 1e5 + 5, kB = 131;
int n, m, x, d, ans, l[kMaxN];
vector<ULL> h[kMaxN];
string s;
int Calc(int x, int y) {
int L = -1, R = min(l[x], l[y]) + 1;
for (; L + 1 < R;) {
int mid = (L + R) / 2;
h[x][mid] == h[y][mid] ? (L = mid) : (R = mid);
}
return L;
}
signed main() {
freopen("lcp.in", "r", stdin);
freopen("lcp.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s, l[i] = s.size(), s = ' ' + s;
h[i].resize(l[i] + 1);
for (int j = 1; j <= l[i]; j++) {
h[i][j] = h[i][j - 1] * kB + ULL(s[j]);
}
}
cin >> m >> x >> d;
for (int i, j; m--;) {
i = (x / (n - 1)) + 1, j = (x % (n - 1)) + 1;
if (i > j) swap(i, j);
else j++;
x = (x + d) % (n * (n - 1));
ans += Calc(i, j);
}
cout << ans;
}
3、数学建模维度
复杂度计算:
- hash:\(O(\sum_{i=1}^n \mid s_i\mid )\)
- 二分求解:\(O(m \log |s_i|)\)
- 总复杂度:\(O(10^6)\)
4、改进措施
- 对于这种用种子生成数据的题,只是为了避免输入时间过大,并没有规律。
- 不要看到描述抽象的题就畏惧,不深度思考。
小明的oj2025年3月月赛-Div2的更多相关文章
- CodePlus2017 12月月赛 div2可做题2
11月的月赛错过了,来打12月月赛,由于很(zi)想(ji)拿(tai)衣(ruo)服(la),所以去打div2. T1是一个sb模拟,但是机房全卡死在这道语文题上了,基本上弄了一个半小时,T2可以秒 ...
- 洛谷3月月赛div2 题解(模拟+数学+贪心+数学)
由于本人太蒻了,div1的没有参加,胡乱写了写div2的代码就赶过来了. T1 苏联人 题目背景 题目名称是吸引你点进来的. 这是一道正常的题,和苏联没有任何关系. 题目描述 你在打 EE Round ...
- 最大字段和&洛谷11月月赛DIV2 T1
蒟蒻只能打一打DIV2的基础题 太卑微了 这道题的本质其实是再建一个数组,如果s串i位置是0那么就给a[i]赋值为1,表示要累加个数,如果是1那么就把a[i]赋值为-1,表示个数减一,最后求最大子段和 ...
- CodePlus2017 12月月赛 div2火锅盛宴
当时看到这道题感觉真是难过,我数据结构太弱啦. 我们来看看需要求什么: 1.当前熟了的食物的最小id 2.当前熟了的食物中有没有编号为id的食物 3.当前没熟的食物中有没有编号为id的食物 4.当前没 ...
- 小明的存钱计划 南阳acm54
小明的存钱计划 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理.每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且总能做到实际花 ...
- 一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)
小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日 是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3 ...
- csu 1976: 搬运工小明
1976: 搬运工小明 Submit Page Summary Time Limit: 2 Sec Memory Limit: 128 Mb Submitted: 94 ...
- hdu----(4521)小明系列问题——小明序列
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- 小明系列问题——小明序列(Lis 相距大于d的单调上升子序列)
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
链接: huangjing 题目:中文题目 思路: 1:这个题目假设去掉那个距离大于d的条件,那么必定是一个普通的LIS.可是加上那个条件后就变得复杂了.我用的线段树的解法. . .就是採用延迟更新的 ...
随机推荐
- HyperWorks作业递交面板设置
用户可以在 Batch Mesh Tab 中,选取待处理的零部件几何模型(Geometry File),并为每个零部件几何模型调用专属网格方案(Mesh Type). 图 3-43 作业递交面板 Ba ...
- 用 AI 制作超长视频,保姆级教程!
大家好,我是程序员鱼皮.之前分享了 如何利用 AI 生成 ASMR 视频 和 动物奥运会视频,给大家推荐了 Google Flow 这个 AI 视频创作工具. Google Flow 可以直接使用最新 ...
- C# HttpClientHelper
public class HttpClientHelper { /// <summary> /// get请求 /// </summary> /// <param nam ...
- node调用powershell脚本
前提 .bat 是 Windows 批处理脚本文件的扩展名,用于编写和执行一系列 Windows 命令. .ps1才是是 PowerShell 脚本文件的扩展名,用于编写和执行 PowerShell ...
- Windows Server 2016 - 关闭 按Ctrl+Alt+Del才能登录
在搜索中,搜索RUN.然后在RUN里搜索gpedit.msc,将其打开. 找到路径:计算机配置>Windows 配置>安全设置>本地策略>安全选项 启用"交互式登录: ...
- linux 终端词典
不知道为什么我的电脑是 Ubuntu 16.04 的安装有道词典就是安装不上,古董版本你的 终端词典的安装参考了其他地方的文章 owl 首先这里所说的字典是工具书类的字典,是翻译工具 其次这里的字典是 ...
- YOLOv8模型持久化与版本控制:管理模型生命周期的高效方法
在深度学习领域,模型的持久化和版本控制对于确保模型的稳定性.可复用性和可追踪性至关重要.本文将详细介绍如何使用Ultralytics YOLOv8进行模型持久化,并展示如何通过版本控制工具管理模型的生 ...
- 低代码开发平台,快速提升API开发效率
RestCloud低代码开发平台相比于传统API开发模式具有更轻量级.更快速.更全面.更低代码量.更易于学习等特点,是完全自主研发的基于微服务架构的专注API高效开发的专业化平台,通过平台可以实现无代 ...
- 如何用ETL工具实现API调用
一.API调用的好处 API调用有很多好处,下面列举了几个主要的优势: 模块化和可重用性:API调用使得软件开发过程更加模块化和可用.通过将功能封装在API中,可以将其用作独立的模块,并在不同的应用程 ...
- 【原创工具】文件清单生成器 By怜渠客
[原创工具]文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 https://www.52pojie.cn/thread-2008605-1-1.html ,和我去年写的一个软件很像,当时 ...