- 博客(25)
- 收藏
- 关注

原创 C++详解 中缀表达式转化为后缀表达式
中缀表达式转化为后缀表达式算法思想细节 首先明确什么是中缀表达式,什么是后缀表达式。 中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(eg:3+4)。 附:中缀表达式不易被计算机处理。 后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。 转化思想: 首先明确中缀转化为后缀过程中,需要转化的部分。 其中包括加减乘除以及括号,数字的处理 括号分为左括号和右括号。左括号直接进栈
2020-10-05 15:26:32
8192
118
原创 指针遍历set集合
#include<bits/stdc++.h> using namespace std; set<int> s; int a[100]; int main() { s.clear(); int k = 9; int cnt = 0; for(int i = 1;i <= 10;++i) s.insert(i*k%7); // for(auto it = s.begin();it != s.end();it++) { //
2022-05-25 20:56:42
262
原创 Codeforces Round #753 (Div. 3)(A~E)题解
传送门 题目大意 假定第一行给出如下:abcdefghijklmnopqrstuvwxyz 我们可以发现a在第一个位置,c在第三个位置 那么我们要打出ac这个字符串手指就需要移动2下 问给出一个字符串,手指需要移动几下才能打出来 解题思路 通过一维数组记录每一个字符的位置,然后每两个相邻的字符通过位置差可以得到手指移动的次数。 解题代码 #include<bits/stdc++.h> using namespace std; #define IO ios::sync_with_stdio(
2021-11-03 16:56:39
193
原创 KMP算法首战
KMP算法学习 一、算法介绍 KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。 KMP算法其实就是一种改进的字符串匹配算法,关键是利用匹配后失败的信息,尽量减少模式串(W)与主串(T)的匹配次数以达到快速匹配的目的。具体实现就是实现一个next() 函数,函数本身包含了模式串的局部匹配信息。时间复杂度
2021-09-28 15:39:35
1035
原创 Codeforces Round #738 (Div. 2)(A~D)题解
传送门 题目大意 给出n个数字,这n个数字可以选取一个[l,r]区间,按照a[l]&a[r],a[l+1]&a[r-1]…对于数字进行操作。问可以使得区间的最大值的最小情况是多少。 解题思路 由于这个题,对于区间的选取没有要求而且&操作只会降低元素的值。 我们不妨假设所有数字都进行了一次与操作。 解题代码 #include<bits/stdc++.h> using namespace std; #define debug(a) cout << #a &l
2021-08-17 15:32:19
111
原创 Codeforces Round #735 (Div. 2)题解
这一场div2主要偏向于公式的推导对于时间复杂度的优化。这要求我们对于生活中的一些数字图案具有一定的敏感度。 题目中给了我们许多的提示,比如1e5的数据量,如果我们采取逐个配对的方法,那么时间复杂度一定会超时。再考虑到各种数据结构的嵌套中,并没有一种适合的方法。此时,我们的思考方向就要偏向于规律、化简。我们不妨对于数据进行枚举来寻找其中的规律
2021-07-30 17:45:28
469
原创 Codeforces Round #726 (Div. 2)(A~E题解)
传送门 题目大意: 有t组样例, 每组n个数字,可以给n个数字后添加任意个不限大小的正整数。使得所有数字的平均数为1。 思路: 分类讨论,当n个数字之和为n时,不用添加任何数字。 当n个数字之和小于n时,可以添加一个整数使得n+1个数字之和为n+1,所以答案为1 当n个数字之和大于n时,在最后一直添加0,直到满足题意,所以答案为n-ans 代码: #include<bits/stdc++.h> using namespace std; #define debug(a) cout <&
2021-06-19 18:25:30
356
原创 Educational Codeforces Round 110 (Rated for Div. 2)(A~D题解)
传送门 题目大意: 一场比赛四个人,点数高的获胜。所有人分数不同 第一个人和第二个人先比赛胜出进入决赛, 第三个人和第四个人先比赛胜出进入决赛, 最后进入决赛的两人比赛。 问进入决赛的两人是否是场上所有人中分数最高的两个人。 思路: 前两个人的最高分大于后两个人的最低分, 后两个人的最高分大于前两个人的最低分。 代码: #include<bits/stdc++.h> using namespace std; #define debug(a) cout << #a <<
2021-06-10 18:47:04
219
原创 Codeforces Round #515 (Div. 3)(A~E题解)
传送门 题目大意: 从0~n的路上每个m个距离就有一个灯,现在有一辆火车在路上,挡住了部分灯,问有几个灯可以被看见。 思路: 容斥原则,get(n)-get®+get(l-1) 代码: #include<bits/stdc++.h> using namespace std; #define debug(a) cout << #a << ": " << a << endl; #define LL long long #define IO io
2021-06-08 23:39:52
191
1
原创 Codeforces Round #724 (Div. 2) (A~D)题解
传送门 题目大意: 有n个数字,可以添加m个数字,使得n+m个数字两两之间差值的绝对值都存在在当前的数组中。 思路: 首先,如果数组中有负数。例如:-5,3对于这两个数字来说,|3-(-5)| = 8,会不断衍生更大的数字,无法满足条件。 其次,通过枚举情况,我们发现所有数字之间满足是非零最小数的所有整数倍。 代码: #include<bits/stdc++.h> using namespace std; #define debug(a) cout << #a << "
2021-06-07 19:11:31
181
原创 Python复习题总结
What is CJKV? CJKV. Initialism of Chinese, Japanese, Korean and Vietnamese: East Asian languages heavily influenced by the Chinese writing system and vocabulary. Who is Guido van Rossum? Guido van Rossum is a noted Dutch computer programmer and aut.
2021-05-09 20:52:48
483
原创 Codeforces Round #719 (Div. 3) (A~E题解)
传送门 题目大意: 每一个字母代表一种工作,总共有26种工作。 如果青云能够坚持将一种共工作做完在去做下一类型的工作,那么认为青云是好的,输出“YES”. 否则,输出“NO” 思路: 考察,哪种情况下青云的工作顺序是好的呢。 那就是青云在转换做下一类型工作的时候不会再去做之前的工作,那样我们认为青云的工作顺序是好的。 例如: 三份工作A、B、A。 我们认为AAB,BAA是好的工作顺序。 而ABA是不好的工作顺序。 代码: #include<bits/stdc++.h> using namesp
2021-05-07 18:30:11
109
原创 五天制作一个Shell(day1)创建文本初体验
通过sh文件创建txt文件 第一步,在文件夹打开终端 第二步、输入touch min.sh。 新建一个min.sh文件 第三步、通过vi/vim模式打开sh文件 第四步、重头戏到了,输入i字符进入编写模式。 然后,第一行输入#!\bin\sh这个是头文件。 第二行输入touch test.txt新建文本的操作。 这个时候按Esc进入命令行模式,输入:wq保存文件并退出。 下图摘自:https://www.runoob.com/linux/linux-vim.html 最后一步,执行sh文件。输入s
2021-04-26 22:34:46
594
原创 Codeforces Round #674 (Div. 3) (题解)
传送门 题目大意: 有一栋公寓有n层楼,除了第一层只有两户外 其他每一层都有x户。 从第一层依次往上从1开始发放门牌号 求某个门牌号在第几层 思路: 如果小于等于2,则在第一层 否则n-=2,用n/k来计算在第几层 代码: #include<bits/stdc++.h> using namespace std; void solve() { int n,x; cin >> n >> x; if(n <= 2) cout <<
2021-04-10 20:01:39
215
原创 Codeforces Round #706 (Div. 2)(题解)
传送门 题目大意: 给出一组数据n,k; 是都可以找出k个字符串使得 s=a1+a2+…+ak+a(k+1) + res(ak) + …+res(a2)+res(a1) 思路: 对称寻找相同字符,将剩余补充到ak+1 代码: #include<iostream> using namespace std; void solve() { int n,k; cin >> n >> k; string s; cin >> s; if(k == 0
2021-04-09 18:17:01
204
3
原创 Codeforces Round #677 (Div. 3)(题解)
传送门 题目大意: 有一个电话亭,只能按照1,11,111,1111,2,22,222这种顺序打电话,问要打某个电话需要按键的次数 思路: 要给下一个数打电话必须把之前的数字要按的键全按了。 例如:要给222,打电话要将1,11,111,1111这10个键都按了。 每次加上10*(n-1)+nbit*(nbit - 1) /2; #include<bits/stdc++.h> using namespace std; #define LL long long #define IO ios::
2021-04-07 09:52:32
175
原创 Codeforces Round #686 (Div. 3) (题解)
传送门 题目大意: 给一个自然数n,给出1~n的排序,使得第i个位置上的a[i]不等于i 思路: 错误想法:逆序输出,因为5,4,3,2,1中3的位置上还是3 正确思路:将头结点放到尾节点。例如:2,3,4,5,1 #include<bits/stdc++.h> using namespace std; #define LL long long #define IO ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) void solve() {
2021-04-05 14:03:38
271
原创 Codeforces Round #712 (Div. 2) (题解)
传送门 题目大意: 给定一个字符串,你可以给任意位置插入一个‘a’, 如果可以使字符串不为回文串,那么输出YES并输出 任意满足的情况 如果不可以,输出NO 思路: 如果字符串全为a,则输出NO 否则输出YES. 从左到右直到第一个不为a找左边有多少个a,记为l, 从右到左直到第一个不为a找右边有多少个a,记为r 如果l == r ,则将a加在字符串末尾 否则,将a加在字符串a多的那一边 代码: #include<bits/stdc++.h> using namespace std; #def
2021-04-04 17:33:38
297
原创 Codeforces Round #710 (Div. 3)(题解)
传送门 题目大意: 已知按列排序的某个位置的数 求按行排序的相同位置的数 思路: 先计算给出的那个数按列排序的位置,然后在转化为按行排序的相同位置的数。 #include<bits/stdc++.h> using namespace std; #define LL long long #define IO ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) void slove() { LL n,m,x; cin >> n >
2021-03-27 17:23:23
236
原创 算法数据与分析 第二章(上) 快乐的递归
递归 递归是数据结构中比较经典和不太好理解掌握的算法(我个人这么觉得,小声哔哔) 就字面意思而言,递归就是先递后归,其实就是先找到an和an-1的关系,然后用f(an) = g(an)*f(an-1)来替代f(an)。 话不多说,我们先上一个阿克曼函数的代码瞧瞧 #include<iostream> using namespace std; int ack(int m,int n) { if(m == 0) return n+1; else if(n == 0) return ack(m-
2021-03-17 19:48:02
159
原创 Codeforce 1493D GCD of an Array(实用学习)
传送门 思路:其一,在这个题中主要学到了multiset这个函数。属于set集合具有自动排序的功能。我们把每个数字分解成它的因子集。如果某个数字的集合数量达到n,那么表明每个数字都有那个因子。 其二,学到了一个数学结论,(a/b)%mod=(a*b^mod-2)%mod; 代码如下: #include<bits/stdc++.h> using namespace std; #define ll long long const int maxn = 200010; const ll mod =
2021-03-13 12:20:57
145
原创 Corderforce 1493C K-beautiful Strings (贪心题解)
传送门 思路:从后往前贪心。如果当前位置在遍历过程中,满足题意,则输出答案。 代码如下: #include<iostream> #include<string> #include<algorithm> #include<cstring> using namespace std; int cnt[26]; int get(int n,int k) { return (k-n%k)%k; } int main() { int n,k,t; cin &g
2021-03-10 21:53:34
156
原创 Corderforce 1493B Planet Lapituletti (暴力破解)
传送门 思路:镜像问题,我们首先找到能够镜像识别的数字,包括0,1,2,5,8.由于给定的h,m的数据较小,我们可以直接从那一分钟开始遍历所有的时间直到第二天00:00. 在这,我做了一个小的优化。同时,也出现了问题wrong了。我把小时和分钟分别找到之后离它们最近的时间。 代码如下: #include<iostream> #include<cstdio> using namespace std; int f(int a) { switch(a) { case 0:retu
2021-03-10 14:33:58
199
原创 Codeforces A. Anti-knapsack (找规律详解)(Round #705 Div.2)
链接: [link](https://codeforc.es/contest/1493/problem/A). 思路:我经验比较少在经过几次数据测试后,发现这个题属于一个找规律的简单的数论。首先,大于k的数字肯定是要输出的。其次,等于k的数据不用输出。最后,我们考察小于k的数字,在小于k的数字当中,从k/2向上取整开始,数字之间肯定加不到k。例如:n=7,k=5; 输出:6,7,3,4 代码如下: #include<iostream> #include<set> #include&
2021-03-10 14:08:56
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人