- 博客(101)
- 问答 (2)
- 收藏
- 关注
原创 L2-1 特立独行的幸福 (25 分)
#include <bits/stdc++.h> using namespace std; int diedai(int x){//计算平方累加和 int d = 0; while(x){ d+= (x%10)*(x%10); x/=10; } return d; } int num[10010]; bool isprime(int x){ //判断素数 if(x==1) return false; for(int
2021-04-21 21:32:40
443
原创 第四章 KMP算法
4.1 前后缀概念 串的前缀:一定包含第一个字符,但是不包含最后一个字符的子串 串的后缀:一定包含最后一个字符,但是不包含第一个字符的子串 4.2 求next数组(手算原理) 原理: 当第j个字符匹配失败的时候,有前1~j-1个字符组成的串记为S,则next[j]=S的前后缀相等的最长长度+1。 特别的有 next[1]=0 next[2]=1 求ababaa的next数组: 序号 1 2 3 4 5 6 模式串 a b a b a a next[j] 0 1 1 2 3 4 4.
2021-03-29 21:45:16
455
1
原创 第三章 栈
括号匹配问题 leetcode20 算法:依次扫描所有字符,遇到左括号((,[,{)就push入栈,遇到右括号(),],})就与栈顶元素进行检查匹配。 匹配失败的情况有: 栈为空 左右括号不匹配 最后栈里面元素有多余 匹配正确栈顶元素出栈。 class Solution { public: bool isValid(string s) { stack<char> re; for(int i=0;i<s.size();i++){
2021-03-25 21:37:26
305
原创 Xcode下使用bits/stdc++.h头文件
在桌面上建立bits文件夹 创建一个文件名为stdc++.h,内容如下: // C++ includes used for precompiling -*- C++ -*- // Copyright (C) 2003-2014 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute .
2021-02-23 14:07:49
946
3
原创 L2-030 冰岛人 (25分)
题目 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名。好事者发现冰岛人的名字后面似乎都有个“松”(son),于是有网友科普如下: 冰岛人沿用的是维京人古老的父系姓制,孩子的姓等于父亲的名加后缀,如果是儿子就加 sson,女儿则加 sdottir。因为冰岛人口较少,为避免近亲繁衍,本地人交往前先用个 App 查一下两人祖宗若干代有无联系。本题就请你实现这个 App 的功能。 输入格式: 输入首先在第一行给出一个正整数 N(1<N≤10 5 ),为当地人口数。随后 N 行,每行给出一
2020-11-08 21:36:06
600
原创 2017-L3-1 二叉搜索树的结构 (30分)
题目 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。(摘自百度百科) 给定一系列互不相等的整数,将它们顺次插入一棵初始为空的二叉搜索树,然后对结果树的结构进行描述。你需要能判断给定的描述是否正确。例如将{ 2 4 1 3 0 }插入后,得到一棵二叉搜索树,则陈述句如“2是树的根”、“1和4是兄弟结点”、“3和0在同一层上”(指自顶向下的深度相
2020-10-31 19:30:52
634
原创 swift 闭包
类似于python中的lambda函数(匿名函数) 语句格式: { (parameters) -> return type in statements } 最初的函数格式: func backward(_ s1: String, _s2: Strin) -> Bool { return s1 > s2 } var reverseNames = names.sorted(by: backward) 改写成闭包格式: reverseNames = names.sorted(by: {
2020-05-23 21:11:03
320
原创 swift函数
函数类型:参数类型和函数返回值共同组成 使用方法: 使用函数类型:将一个恰当的函数赋值给一个类型为函数的变量或常量 var mathFunction: (Int, Int) -> Int = addTwoInts let anotherMathFunction = addTwoInts//与mathFunction一样 使用:mathFunction(2, 3) 类型为函数的变量也可以像普通变量一样进行赋值 函数类型可以作为参数传给函数 func printMathresult(_ mathFunct
2020-05-22 16:41:33
193
原创 swift 集合
集合:无序的,唯一的(distinct & unordered) Swift的集合没有简单缩写,只能写成Set<element> 集合可以用[]清空 声明:var favouriteGenres: Set = ["Rock", "Classical", "Hip Hop"] 一些用法: 查询个数:favouriteGenres.count 判断是否为空:favouriteGenres.isEmpty 插入:favouriteGenres.insert(" ")az 删除:favouri
2020-05-22 16:41:06
411
原创 swift programming languag 笔记
swift数据类型 Int Double Float String Bool Optional 集合类型 Array Set Dictionary Tuple 常量与变量 let声明常量,var声明变量 常量的值一旦确定就不能更改了 var的willset, didset用法 var KittyMoney = 0 { willSet {//在这个值被修改前调用 print("Original Money: \(KittyMoney)") } didSet {/
2020-05-17 21:08:45
1329
原创 swift函数
函数的形式 func <#name#>(<#parameters#>) -> <#return type#> { <#function body#> } "_"表示函数条用的时候,忽略参数名称 func plus(_ a: Int, b: Int) { print( a+b ) } plus(1, b: 2) 形参加and,也可以忽略掉参数名称 func plus1(_ a: Int, and b: Int) { p
2020-05-10 15:16:29
207
原创 二分法的边界问题
1. 查找一个特定的元素 模版如下: int l=1,r=n; while (l<=r) { int mid=(l+r)/2; if (a[mid]==key) return mid; else if (a[mid]>key) r=mid-1; else l=mid+1; } return -1; 这是最基本的二分查找 a[mid]==key的情况,因...
2020-04-15 16:45:11
778
原创 利用线段树查询一段区间内的最大值(值,下标)
题目举例: 小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。 这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。 小明发现,观众对于晚会的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。 小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。...
2020-04-06 17:22:42
1400
原创 算法训练 开心的金明
关注微信公众号 CodeFun 更多题解 思路 状态转移方程如下: dp[i+1][j]dp[i+1][j]dp[i+1][j]从0到i这i+1个物品中选出总重量不超过j的物品时总价值的最大值 dp[0][j]=0dp[0][j]=0dp[0][j]=0 dp[i+1][j]={dp[i][j](j<w[i])max(dp[i][j],dp[i][j−v[i]]+v[i]×w[i]...
2020-01-18 22:01:06
351
原创 算法训练 明明的随机数
关注微信公众号:CodeFun 看更多题解 思路 因为数据很小,所以可以开一个1010的数组(初始化为0),将输入数据标记为1。然后统计第一次标记为1的个数 然后从1到1000循环一遍,输出值为1的数 code #include <bits/stdc++.h> using namespace std; int a[1010]; int main(){ int n,x,c...
2020-01-18 17:51:15
278
原创 算法训练 FBI树
关注微信公众号:CodeFun 看更多题解 思路 利用递归的思想,分位左一半右一半去判断子串的类型 注意点是每次递归的边界条件和结束条件 最后按照后序遍历的思想来,递归完左子串和右子串后输出当前子串的类型 code #include <bits/stdc++.h> using namespace std; string s; void getFBI(int st,int ed)...
2020-01-18 11:30:26
467
原创 算法训练 最大最小公倍数
微信公众号:CodeFun 思路 奇数的时候,n,n-1,n-2无公因子,直接相乘便是最大的最小公倍数 偶数的时候,需要考虑因子为2的情况,但是n-1,n-3这两个最大的奇数需要保留,但是n-3和n可能会有公因子3的情况,所以可能的情况会有n-1,n-3,n或者 n-1,n-2,n-3两者情况 举例:考虑6,相邻情况为 2 3 4 5 6 ,最大的最小公倍数为60(3,4,5)而不是30(3,...
2020-01-16 19:54:44
335
原创 算法训练 区间k大数查询
微信公众号:CodeFun 思路 注意题目中给出的数据是无序的 所以在给定区间询问的时候,可以将数push到优先队列中,查询到该区间中第k大数,也可以排序后在该区间查询第k大数 code #include <bits/stdc++.h> using namespace std; int main(){ int n,x,y,z,t; cin>>n; ...
2020-01-16 19:09:31
226
原创 1002 写出这个数 (20分)
微信公众号:CodeFun 思路 用数组将拼音存起来,这样减少了代码长度。然后求和输出每一位的拼音。 code #include <bits/stdc++.h> using namespace std; string c[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; int main(){ int s...
2020-01-15 21:00:53
321
原创 算法训练 P0505
思路 在1,2,3,4,5,6,7,8,9中九个数里面,可以产生后尾0的只有包含2因子的数和5相乘的结果,所以计算出阶乘中2与5的因子个数,利用因子个数差和其它的因子相乘%10就可以产生非零的数 5的因子怎么乘最后%10都是5 2的因子相乘最后%10 有四种情况2 4 8 6 。不能直接乘,因为数会溢出 code #include <bits/stdc++.h> using nam...
2020-01-15 11:35:59
193
原创 基础练习 完美的代价
思路 需要弄清楚什么时候impossible? 1.当字符串的个数为偶数的时候,一旦有字符的个数是奇数个数就不会构成回文串 2.当字符串个数为奇数的时候,可以有字符出现奇数个数,前提是字符串最中间那位是出现奇数位个数的那个字符(只有一个) 当出现奇数位的个数的时候,不需要将奇数位的字符移动到中间去。这也就是题目里面提示的贪心思想,即碰到奇数个数的字符最后将其移动到中间去。避免移动到中间后每次移动...
2020-01-14 19:00:03
196
原创 PTA甲级 1002 A+B for Polynomials
题意 求A有序多项式+B有序多项式后的有序多项式,输入中前者是指数,后者是系数。 思路 双指针法 思想:用一个指针遍历a数组,一个指针遍历b数组。比较两者的指数大小。如果a当前指向的元素指数大的话,将此元素放入答案数组,同时a当前指针往后移动一个。同理对b进行同样的操作。如果a和b当前的指针相同,则将其系数相加(不为0)放入答案数组。 边界条件:可能会导致a或b提前遍历完,所以要将剩余的元素全部...
2019-12-31 21:16:45
337
原创 PTA甲级 1001 A+B Format
题意 给定a,b,求出a+b的和,然后每三位数字以逗号分隔,除非数少于三位。 思路 利用to_string 将数据转换为字符串,然后逆序每三位加逗号 代码 #include <bits/stdc++.h> using namespace std; int main(){ int a,b; cin>>a>>b; string s=to_st...
2019-12-31 20:44:30
317
原创 算法训练 相邻字母
思路 26个字母一个循环 code #include <bits/stdc++.h> using namespace std; int main(){ char c; cin>>c; if(islower(c)) cout<<char('a'+(c-'a'+25)%26)<<c<<char('a'+(c-'a'+2...
2019-12-27 19:15:51
824
原创 算法训练 求先序排列 递归
题目链接 思路 在中序序列循环一遍找到根节点,根节点其实就是后序遍历的最后一个节点。这样就将中序遍历划分为左右子树,在左右子树里面分别重复之前的操作。 code #include <bits/stdc++.h> using namespace std; string in,post; void preorder(int root,int st,int ed){ if(st>...
2019-12-27 18:59:44
304
原创 算法训练 王、后传说 (n皇后问题) 回溯
思路 考察搜索 给定一个棋盘,设左上角的坐标为原点(1,1)(1,1)(1,1),已经放好的皇后坐标为(i,j)(i,j)(i,j),不同行,不同列,不同斜线的新皇后坐标为(r,c)(r,c)(r,c),则关系如下: 横向i≠ri\ne ri=r 纵向j≠cj\ne cj=c 斜对角从(i,j)(i,j)(i,j)到(r,c)(r,c)(r,c)有四种情况(i+a,j+a),(i−a,j...
2019-12-27 14:00:40
609
原创 算法训练 s01串 递归
题目链接 思路 用两个字符串,第一个字符串是原本的,第二个字符串放变换后的。每次将变换好的复制给原来的,变换好的晴空,循环n次。 code #include <bits/stdc++.h> using namespace std; string ans,s="0"; void dfs(int n){ if(n==0) return; for(int i=0;i<s...
2019-12-27 13:17:30
310
1
原创 基础练习 Sine之舞 递归
题目链接 思路 规律的输出用递归。 code #include <bits/stdc++.h> using namespace std; int x,y,n;//因为Sn和An是反着的,y要根据每次Sn递归的上界更改 void dfs(int n){ if(n==0) return; cout<<"sin("; cout<<y-n+1; ...
2019-12-27 13:01:09
273
原创 算法训练 幂方分解 递归
题目链接 思路 这种规律的格式输出利用递归方法解决。 code #include <bits/stdc++.h> using namespace std; void dfs(int n){ if(n==0){ cout<<'0'; return; } int cnt=0; for(int i=31;i>=...
2019-12-27 12:08:50
224
原创 算法训练 字符串变换 模拟
思路 前面四步都是简单的。 第五步可以考虑用两个指针,第一个指针定位,第二个指针从当前位置开始,找到最长连续的字母个数,如果子串长度大于等于2了,说明该子串需要缩写。 code #include <bits/stdc++.h> using namespace std; int main(){ int n; string s; cin>>n>...
2019-12-26 21:52:15
283
原创 基础练习 2n皇后问题 搜索
思路 考察搜索 给定一个棋盘,设左上角的坐标为原点(0,0)(0,0)(0,0),已经放好的皇后坐标为(i,j)(i,j)(i,j),不同行,不同列,不同斜线的新皇后坐标为(r,c)(r,c)(r,c),则关系如下: 横向i≠ri\ne ri=r 纵向j≠cj\ne cj=c 斜对角从(i,j)(i,j)(i,j)到(r,c)(r,c)(r,c)有四种情况(i+a,j+a),(i−a,j...
2019-12-26 18:20:58
276
原创 二叉树
最常见的问题 知道两个遍历的顺序,求另一个遍历的顺序 二叉树的遍历 层序遍历 先序遍历 中序遍历 后序遍历 练习 1710 Binary Tree Travesals(先序,中序求后序) ...
2019-12-06 21:09:19
143
原创 并查集
合并优化 通过记录高度,高度相同两者中取一个当作根节点,然后高度加1。高度不相同的,将高度矮的加到高度高的上面去,高树的高度不变。 void unions(int x,int y){ x=find(x); y=find(y); if(height[x]==height[y]){ s[x]=y; height[y]+=1; }else{...
2019-12-06 10:57:13
201
1
原创 1119 Pre- and Post-order Traversals (30 分)
解题思路 检查每个节点是否有两个子结点 因为只有一个子结点的话,它既可以是左儿子也可以是右儿子。(前序和中序不能确定一颗唯一二叉树的原因。) 题目中如果是NO的话,随便选一个,(答案不唯一) code #include <bits/stdc++.h> using namespace std; vector<int> pre(30),post(30),in; int ju...
2019-11-27 21:01:16
186
原创 1014 Waiting in Line (30 分)
解题思路 先让n×mn\times mn×m个数进入分界线内,但要判断一下人数,有k<n×mk<n\times mk<n×m 和 k>=n×mk>=n\times mk>=n×m 两种情况 结构体存入三个数据: 队首出队时间 最后结束时间 一个队列 这样处理的话,后面就可以通过遍历找到每个窗口的队首处理时间,找到最小值,一个一个插入到对应的窗口中。 注意...
2019-11-27 16:50:09
177
原创 1080 Graduate Admission (30 分)
解题思路 题目条件第一条:先排序按成绩大小 题目条件第二条:按照指定的规则排序,总分相同比GE,GE相同排名相同 题目条件第三条:按照学生的排名进行录取,如果该学校满了,则跳去学生的第二志愿,依此下去 题目条件第四条:排名相同的且志愿相同的同时录取(可以记录每个学校的靠后的排名,如果后面排名相同就进行补录) 用set可以进行升序,记录学生数 code #include <bits/std...
2019-11-26 19:33:19
139
原创 1095 Cars on Campus (30 分)
解题思路 首先得找出in和out都匹配的车辆,不然在后面找有多少辆车在里面且pair是很麻烦的 先按车牌相同的筛选出来pair的停车和离开的时间 将其保存在car数组里面,并将car排序 通过car数组可以知道在当前车之前有多少辆车在里面,in记为1,out记为-1 比较该车与条件时间,可以知道车辆数 code #include <bits/stdc++.h> using nam...
2019-11-26 16:54:15
192
原创 1016 Phone Bills (25 分)
题意 不能直接输出姓名,因为如果你的账单不符合,你的名字是不会被打印出来的。 排序题 code #include <bits/stdc++.h> using namespace std; struct node{ string name; int month,day,hh,mm,status; int last; }; int p[25]; bool cmp...
2019-11-26 14:21:32
221
原创 80./ 26. 删除排序数组中的重复项 I&II(双指针,STL删除)
I 解题思路 分析:固定两个指针,一个为慢指针,一个为快指针。 快指针: 用来扫描整个数组 慢指针:用来固定当前的位置 算法: 当nums[sp]==nums[fp]nums[sp]==nums[fp]nums[sp]==nums[fp]说明有重复情况,那么在区间(sp,fp)(sp,fp)(sp,fp)范围内的数应该舍去,只需让fp++fp++fp++即可 当nums[sp]!=nums[fp...
2019-11-24 19:03:41
149
空空如也
xcode发生这种情况怎么回事,电脑关机都不行了
2019-06-26
能有大佬帮我看一下这段代码问题在哪吗
2019-03-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅