随笔分类 - 题解
摘要:众所周知,SPFA 他死了。 但是这道题目真的不能用 SPFA 吗? 确实! 首先我们来说一下 SPFA,正常我们用 queue 进行 SPFA,这是我们照常的习惯。但是其实不光光用 queue 可以实现,用其他 STL 容器也可以。试过 vector,比 queue 好,但是还是 T 了不少。但是
阅读全文
摘要:题目传送门:AT5220 这个题目用 BFS 解决即可,对于每一个点 (i, j),判断是否是空格,是的话就 BFS 搜索即可,总的复杂度是 O(H2W2)O(H^2W^2)O(H2W2),完全够用。 代码: #include <iostream> #include <queue> #include
阅读全文
摘要:这道题是蓝题好像多余了。 一看到最短时间,我们第一反应就是 BFS,但是这道题仅仅 BFS 不够,要加一些剪枝优化,例如对下面这个例子: 4 4 10 ..#. ...# ..## .### 1 1 3 2 第一,我们从坐标 (1,1) 出发,这时我们可以向右 1~10 步,但是我们发现当我们走 2
阅读全文
摘要:这是一道贪心题,不需要二分等复杂方法,主要就是要想到贪心方法。 代码: #include <iostream> using namespace std; int main() { int n, t; long long a = 0, b = 0; cin >> n; for(int i = 1; i
阅读全文
摘要:分类讨论: 如果已经有序,答案为0。 如果第一个数为 1\text{1}1 或者第 n\text{n}n 个数为 n\text{n}n,答案为 111,选择其他数排序即可。 最后一个数为 1\text{1}1,并且第一个数为 n\text{n}n,需要三次。 其他都是 2\text{2}2 次。 代
阅读全文
摘要:水题,找一下规律可以发现,两堆石子差小于等于 1 时就是 Brown 胜利,不然就是 Alice。 #include <iostream> #include <cmath> using namespace std; int main() { long long n, m; cin >> n >> m
阅读全文
摘要:本题可以很明显看出应该是二分题目,如果需要二分答案,需要满足: 答案具有单调性,也就是说确定一个中央,中央左边不符合答案,右边符合,或者反过来。 假设二分答案验证阶段的复杂度是 O(m),总共的答案有 n 种选择,则二分答案的复杂度为 O(logn m)\large \text{O}(log_n \
阅读全文
摘要:本题我们可以用 count 函数,count 函数位于头文件 algorithm 中,支持三个参数,第一个和第二个是要遍历的数组或容器的首位迭代器,第三个是要判断的值。count 函数返回的是在 first, last 区间中等于第三个参数 value 的数的个数,本题正好适用。 特别提醒,STL
阅读全文
摘要:本题可以写 cmp 函数,但是这里教大家写运算符重载。 运算符重载可以使两个结构体 a,ba, ba,b 做到像 int 一样可以判断 a < b,而不用 cmp。通常重载运算符是在结构体内定义(也可以用友元类,两个不同结构体的关系),定义形式如: struct Node // class也可以 {
阅读全文
摘要:很容易理解一道题目,分类讨论即可: 如果本身就是好序列,直接输出 111 与本身字符串。 如果不是,输出 222 并且输出该字符串的第一个(或者最后一个)字符然后空格,接着是后面的。 代码: #include <iostream> #include <algorithm> #include <str
阅读全文
摘要:来个正则表达式做法,其实也是每个判断,因为只有 555 种可行方案,不用写那么多 if。 更多关于正则表达式的使用请看我的题解。 代码: #include <iostream> #include <string> #include <regex> using namespace std; stati
阅读全文
摘要:这道题还有什么说明啊??? 本题只需要输出一下样例即可: #include <iostream> using namespace std; int main() { cout << R"(f(10) = MAGNA NIMIS! f(-9) = -3642.00 f(-8) = -2557.17 f
阅读全文
摘要:很水的一道题! 注意: 全部转换成大写 只有大写字母才算 要排序,所以封装成类(结构体也可以) 代码: #include <iostream> #include <cctype> #include <cstdio> #include <algorithm> #include <string> usi
阅读全文
摘要:这题目用 python 做很好,虽然我是c党,但是没有自带高精度表示不服,学了学几个最简单的语句做了个py3代码然后A了: var = 1 ans = 0 while var == 1: num = int(input()) if num == 0: break else: ans = ans +
阅读全文
摘要:本题是AT360的题目! 大家都用的是 DP,然后我看见了标签有个 模拟 \color{red} \text{模拟}模拟,于是就用一个模拟过了这道题。 其实如果模拟对于贪心也要有基础,这道题怎么贪心呢? 如果一段路都是空地,那一次走1,2,31,2,31,2,3格都一样,所以不用处理。 如果现在是空
阅读全文
摘要:贪心题目,要想回文子串最多,排一下序。 我们想一下,对于每一个字符,都是回文的没错吧? 那么,abab 这个字符串排序(从小到大)就是 aabb,或者从大到小,bbaa,相同的字符都在一起,这些字符和前面其他的一些字符一样,相同的字母的子串,那么从左往右和从右往左不一样吗? 给代码(没有用 sort
阅读全文
摘要:STL大法好!!! 这道题目其实 map + 一个 O(n2)\large \text{O}(n^2)O(n2) 的暴力就好了。 我们用 map 是为了统计每个字符出现数量,然后枚举找最大值,与 length2\LARGE \frac{length}{2}2length 作比较,注意小于等于是可以
阅读全文
摘要:这里看了看大家的代码,发现我的代码真是麻烦了…… 但是我的读入根本不用字符! 没有人知道 scanf 可以直接存输入的东西吗? 这里看样例,都是一个整数,一个逗号,所以我们把读入写成这样: int x; while (cin >> x) { scanf(","); } 那么最后一个逗号是没有的,怎么
阅读全文
摘要:Update:2021.1.14,发现了几个错误 暴力就完了! 这里我们很明显可以用接近 O(n4)\large O(n^4)O(n4) 的暴力枚举,那么对于匹配两次出现我们可以用 find。 每次 erase? 不对,erase 的坏处是会直接破坏原来字符串,并且也不是 O(1)\large O(
阅读全文
摘要:就用 STL 排序一下,然后找不一样的地方有几个。 这里我用的是稳定排序 stable_sort,实测比 sort 快一点。 我没有和大家一样比长度,因为如果长度不一样那 sort 完两个能一样吗? 代码: #include <iostream> #include <algorithm> #incl
阅读全文

浙公网安备 33010602011771号