Loading

摘要: 前言 本文为一名Oier的真实学习笔记,如果对文中有问题或有意见,欢迎联系我 几个做题的小技巧: 通过挖掘题目的特殊性质,找到分析问题的切入点 更换统计答案的方式 特殊性质优化 模型等效替换 深度优先搜索 (depth first search,dfs) 适用问题:能把待求解的问题分成不太多的步骤, 阅读全文
posted @ 2026-04-22 16:57 heffo_hard 阅读(116) 评论(2) 推荐(1)
摘要: 题目大意 给出一个字符串,对字符串进行加密,方式如下: 对于每个英文字母(大写),将它替换为字母表中向后移动 \(k\) 位的字母(循环)。 对于数字字符,保持不变。 容易想到对于每个字符考虑是否是英文字符,如果是就对字符进行操作,不是就跳过。 实现细节 首先考虑 \(k\) 为负数的情况,只需要加 阅读全文
posted @ 2026-08-04 18:50 heffo_hard 阅读(15) 评论(0) 推荐(0)
摘要: 注意到 \(2\le n\le10^{18}\),所以暴力枚举肯定不行。 注意到一个性质,\(\gcd(n,m)=\gcd(n,n-m)\)(\(n\ge m\))。 证明 如果有 \(d \mid n\),\(d \mid m\),那么设 \(n=x\times d\),\(m=y\times d 阅读全文
posted @ 2026-08-01 19:53 heffo_hard 阅读(13) 评论(0) 推荐(0)
摘要: 前置知识 佩尔方程 题目大意 一个三角形的三条边长分别为三个连续整数 \(t-1\)、\(t\)、\(t+1\),且其面积为整数,对于给定的 \(n\),你需要找出满足 \(t \ge n\) 的最小 \(t\) 所对应的且其面积为整数的三角形。 思路 先根据海伦公式求出这个三角形的面积: \[S= 阅读全文
posted @ 2026-07-11 22:38 heffo_hard 阅读(13) 评论(0) 推荐(0)
摘要: 题目大意 给出 \(n\) 个点的坐标,求其中能围成等腰三角形的三个点有几组。 思路 发现 \(n\) 的范围不大,考虑先预处理出每两个点的距离,然后在找出可能成为等腰三角形的点的组数,最后去除多余情况。 实现细节 :::info[两点之间的距离公式] 点 \(a(x_1,y_1)\) 和点 \(b 阅读全文
posted @ 2026-07-11 22:38 heffo_hard 阅读(7) 评论(0) 推荐(0)
摘要: 发现在 \(n\le 3\) 时只需要 \(1\) 颗炸弹就可以全部覆盖,否则最坏情况下,需要跑一圈,之后发现方向不对转换方向,一共扔 \(n-2\) 颗炸弹才能覆盖,代码如下: #include<bits/stdc++.h> using namespace std; int n; static i 阅读全文
posted @ 2026-06-30 23:03 heffo_hard 阅读(8) 评论(0) 推荐(0)
摘要: 区间 dp 水题。 定义 \(f_{i,j}\) 表示删除 \(a_i\) 到 \(a_j\) 的所有元素的最大得分,容易得到状态转移方程: \[f_{i,j}=f_{i,k-1}+f_{k+1,j}+a_{i-1}+a_{j+1} \](先删除 \(a_i\) 到 \(a_{k-1}\),再删除 阅读全文
posted @ 2026-06-30 23:03 heffo_hard 阅读(31) 评论(0) 推荐(0)
摘要: 在区间 dp 中,经常会出现这样的转移方程: \[dp_(i,j) = \begin{cases} \min_{i\le k<j}({dp_{i,k},dp_{k+1,j}+w(i,j)}) & i<j\\ 0 & i=j \\ \infty & i>j\\ \end{cases}\]定义 此时如果 阅读全文
posted @ 2026-06-26 07:26 heffo_hard 阅读(18) 评论(0) 推荐(0)
摘要: 容易发现最优解法一定是把一个边分割。 于是想分割哪个边? 题目中给的是两个互不为倍数的点连一条边,所以只需要找倍数最多的点的个数即可。 容易知道,一个数越小,那么它在一个固定区间中的倍数最多,因此我们只需要把 \(3\) 单独分为一个子集即可。 不与 \(3\) 连点的节点数字就是 \(3\) 的倍 阅读全文
posted @ 2026-06-26 07:24 heffo_hard 阅读(11) 评论(0) 推荐(0)
摘要: 暴力题。 题目大意 给出 \(T\) 组数据,对于每组数据,给出两个字符串 \(S\),\(F\),求至少进行多少次操作,可以使 \(S\) 中的每个字符都是 \(F\) 中的字符。 思路 可以先使用一个 bool 数组把 \(F\) 中的字符都记录下来。然后对于 \(S\) 中的每个字符,都计算它 阅读全文
posted @ 2026-06-13 23:00 heffo_hard 阅读(7) 评论(0) 推荐(0)
摘要: 水题。 首先是输入,可以用字符串存储,如果发现是数字就调用 stoi() 函数转化成数字,然后放到一个 bool 数组里,注意 A,J,Q,K 需要特判,这里的 A 可以处理成 \(14\)。 然后打擂刷新答案即可。 #include <bits/stdc++.h> #define ll long 阅读全文
posted @ 2026-06-13 23:00 heffo_hard 阅读(12) 评论(0) 推荐(0)