- 博客(41)
- 收藏
- 关注
原创 关系型数据库
单一的数据结构 ------ 关系现实世界的实体及实体间的各种联系均用关系来表示逻辑结构 ------ 二维表从用户角度 关系模型中数据的逻辑结构是一张二维表关系模型是建立在集合代数的基础上==关系模式 ( Relation Schema)==是对关系的描述 关系模式是型 关系是值(1) 元组集合的结构属性构成 属性来自的域 属性与域之间的(2) 一个关系通常由赋予它的元组语义确定(3) 现实的世界中还存在着完整性约束关系模式可以形式化的表示为 :RUDDOMFR。
2023-03-28 12:36:01
1466
原创 01背包与完全背包
01背包与完全背包 01背包 题目: 有 NNN 种物品和一个容量是 VVV 的背包,每种物品都只能使用一次。 第 iii 种物品的体积是 viv_ivi,价值是 wiw_iwi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数,N,VN,VN,V,用空格隔开,分别表示物品种数和背包容积。 接下来有 NNN 行,每行两个整数 vi,wiv_i,w_ivi,wi,用空格隔开,分别表示第 ii 种物品的体积和价值。 输出格式 输出一个
2022-05-31 15:18:58
414
原创 力扣剑指 Offer II 095. 最长公共子序列
力扣[剑指 Offer II 095. 最长公共子序列] 题目: 思路: 动态规划,定义一个大小为m,nm,nm,n的二维数组 定义dpijdp_{ij}dpij为s1s1s1字符串前iii个字符与s2s2s2字符串前jjj个字符的最长公共子序列 不难发现当i=0∣j=0i=0|j=0i=0∣j=0时,dpi,jdp_{i,j}dpi,j一定等于000 刚好数组初始化所有之都为000,所以我们从i=1,j=1i=1,j=1i=1,j=1开始循环查表 对于每一个dpi,jdp_{i,j}dpi,j它
2022-05-26 11:20:13
154
原创 蓝桥杯2020年第十一届省赛真题-子串分值和
蓝桥杯2020年第十一届省赛真题-子串分值和 题目: **思路: 不难发现,对于 a1a_1a1 ,它的分值就等于有多少个字串包含它 但是对于 a2a_2a2 ,它的分值就等于所有包含它的字串减去同时字串里包含a1a_1a1的字串 所以a2a_2a2加分的子字符串的起点应该从a1a_1a1的后一个字符串开始算 对于每一个字符ana_nan就应该等于区间[an−1+1,end][a_{n-1}+1,end][an−1+1,end]所有包含它的子字符串 endendend为字符串结尾 an=[
2022-05-22 12:34:35
720
1
原创 蓝桥杯 [长草]
蓝桥杯 [长草] 题目: 思路: 把草的初始位置加入队列,开始广搜, 把遇到的每一块坐标合法且时间不超过kkk个月的草加入队列, 直到队列为空 再使用一个二维数组标记草的位置为111,其他位置为000,最后按题意输出即可 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; int N, M, k; typedef struct A { int x;
2022-05-21 16:24:34
278
原创 蓝桥杯 [九宫重排]
蓝桥杯 [九宫重排] 题目: 思路: 以字符串的形式记录每一次的状态,从初始状态开始,把每一次没有遇到过的状态加入队列,再次进行下一次搜索,直到第一次遇到与结束位置一样的就是我们要找的最短次数 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; string Head;//开始位置 string End;//结束位置 typedef struct AA {
2022-05-21 16:18:19
201
原创 蓝桥杯 [调手表]
蓝桥杯 [调手表] 题目: 思路: 从000开始广搜,把第一次遇到用一个数组存起来它的次数,第二次遇到直接retrunretrunretrun就行,因为第一次遇到的一定是最快到达的,在以当前为起点加111或者加kkk,把没遇到的添加到队列再开始广搜,直到队列为空说明都搜到了 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; int Bk[100010]={0
2022-05-21 16:11:27
286
2
原创 洛谷[P1120 小木棍]
洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意不可能的情况就直接剪枝,不然会超时 代码: #include<bits/stdc++.h> using namespace std; int arr[100]; int Len=0; int BK[100]={0};//木棍状态 // 目标长度 根数 上次循环
2022-05-20 18:43:04
1184
原创 洛谷P1019 [NOIP2000 提高组] 单词接龙
# P1019 [NOIP2000 提高组] 单词接龙 题目: 思路: 循环判断,首字母为"龙"开头的字母开始搜索,isstris_strisstr函数判断有没有重叠区间(能不能接上),能的话就接上再搜索 valvalval始终维护历史最长长度 注意每个字符串可以用两次,所以判断的时候注意不是等于000才能用 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5
2022-05-20 15:30:30
323
原创 牛客 跳马游戏
牛客 [跳马游戏] 题目: 思路: 广搜,遇到终点或者队列为空退出, 遇到能进的点就加入队列,每次从队列前面的开始搜 第一次遇到肯定是路径最短的 因为题目最大长度为400,所以直接定义数组就行,不用vector 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; int Map[500][500]; int N,M;//地图大小 int Zx,Zy;//终点坐
2022-05-20 13:33:28
108
原创 牛客 [走出迷宫]
牛客[走出迷宫] https://ac.nowcoder.com/acm/problem/14572 题目: 思路: 从起点开始深搜,使用一个boolboolbool值进行判断,如果遇到了终点就变成truetruetrue 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; char Map[510][510]; bool is=false; //
2022-05-20 10:48:24
176
原创 洛谷[P1605 迷宫]
洛谷[P1605 迷宫] https://www.luogu.com.cn/problem/P1605#submit 思路: 从起点开始深搜,遇到终点次数加一即可 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; int Map[510][510]; int N,M; int ans=0; int Zx,Zy;//终点坐标 void dfs(int x,i
2022-05-20 10:41:47
91
原创 洛谷[P1162 填涂颜色]
洛谷 [P1162 填涂颜色] https://www.luogu.com.cn/problem/P1162#submit 题目: 思路: 先遍历一遍边框,把边框上为 000 的数字为起点进行深度搜索(因为在边框上,说明没有被111围住),把遇到的所有000标记为 −1-1−1 然后再输出即可,遇到−1-1−1则输出000,遇到000(说明这个000是被111包围起来的)则输出222,111的输出不变 代码: #include<bits/stdc++.h> using namespace st
2022-05-20 10:38:11
265
原创 蓝桥杯真题[玩具蛇]
蓝桥杯真题 [玩具蛇] https://www.lanqiao.cn/problems/1022/learning/ 题目: 思路: 暴力搜索,因为正方形是对称的,所以我们起点只需要在左上角,最后答案乘4即可 从起点开始深度搜索,如果步数等于161616,也就说明把玩具放完了,ansansans就加一 代码: #include<bits/stdc++.h> using namespace std; #define ll long long const ll MAX = 1e5 + 5; in
2022-05-20 10:29:57
235
原创 蓝桥杯2017年第八届真题-k倍区间
#蓝桥杯2017年第八届真题-k倍区间** 题目: 思路: 区间和可以看作是前缀和的差 arr[l,r]=S[r]−S[r−l−1] arr[l,r]=S[r]-S[r-l-1] arr[l,r]=S[r]−S[r−l−1] 那么问题就转换成的有多少对前缀和的差能够整除k S[r]−S[r−l−1]≡0(modk) S[r]-S[r-l-1]≡0(mod k) S[r]−S[r−l−1]≡0(modk) S[r](mod)k−S[r−l−1](mod)k≡0 S[r](mod)k-S[r-l-1](mod
2022-05-18 10:35:44
218
原创 二维数组前缀和
二维数组前缀和 对于二维数组求前缀和,我们先预处理第一行跟第一列的前缀和 第一行跟第一列的前缀和可以看作一维数组的前缀和 前缀和数组的0,0等于原数组的0,0,第一行为原数组第一行的前缀和,第一列为第一列的前缀和 预处理: //原数组 int arr[10][10]={ {1,2,3,4,5,6,7,8,9,0}, {6,7,8,9,0,1,2,3,4,5}, {1,2,3,4,5,6,7,8,9,0}, {1
2022-05-18 09:57:12
2708
4
原创 洛谷P4552 [Poetize6] IncDec Sequence
洛谷P4552 [Poetize6] IncDec Sequence 题目: 思路: 题目要求原数组的任意区间的值加一或者减一nnn次之后,数组的所有值都变成一样 求nnn的最少值与能得到多少种结果 题目可以转换成把原数组的差分数组的值除了第一项都变成000,每一次左端点加一或者减一,右端点减一或者加一 最少次数我们可以再差分数组找到一对对的正数与负数or负数与正数,因为原数组[l,r][l,r][l,r]区间加一或者减一,差分数组就是diff[l]+1∣∣−1diff[l]+1||-1diff[l]+1
2022-05-17 23:54:53
185
原创 差分数组 力扣[1526. 形成目标数组的子数组最少增加次数]
差分数组 力扣[1526. 形成目标数组的子数组最少增加次数] 差分数组: 定义: 差分数组的第一个值等于原数组第一个值,其他每项为原数组两两相邻值的差值 int arr[10]={1,2,6,8,9,7,3,1,4,3};//原数组 int diff[10];//差分数组 int len=10; diff[0]=arr[0];//第一项等于原数组的第一项 for(int i=1;i<len;i++){ diff[i]=arr[i]-arr[i-1];//其他每项为原数组两两相邻值的差值
2022-05-17 23:03:58
331
原创 713. 乘积小于 K 的子数组
713. 乘积小于 K 的子数组(双指针) 题目: 思路: 双指针遍历 每一次 r 遇到就用 sum 乘起来,如果大于 k ,左指针就右移知道 sum 小于k,每次循环都 cont 都加上r-l+1,因为合法才会出循环 代码: class Solution { public: int numSubarrayProductLessThanK(vector<int>& nums, int k) { int cont=0; long long sum=
2022-05-15 21:44:19
76
原创 167. 两数之和 II - 输入有序数组
[力扣167. 两数之和 II - 输入有序数组] (map,双指针) 题目 思路: 题目求找两个和为 terget 的数 terget=a+b terget=a+b terget=a+b 我们固定一个 a ,那么 b 的值也是唯一的 每次遍历到当前的数时,可以找唯一的b有没有出现 因为题目只有一个唯一的答案,所以找到的直接return 没找到就把当前a的下标存到map中l 代码: class Solution { public: vector<int> twoSum(vector&l
2022-05-15 21:06:59
84
原创 牛客月赛24 组队-B
牛客小白月赛24 组队-B 题目: 思路: 先给数组排序 答案为参加的人数 二分答案找前缀 最后输出右端点的值即可 代码: #include <bits/stdc++.h> using namespace std; int is_cont(int cont,int max,int nums[],int len){ for(int i=1;i+cont-1<=len;i++){ if(nums[i+cont-1]-nums[i]<=max){
2022-05-15 21:06:48
119
原创 题目 2618 蓝桥杯2021年第十二届国赛真题-123 满分写法
蓝桥杯2021年第十二届国赛真题-123 题目: 思路: 先转换成二维数组 1 1 2 1 2 3 1 2 3 4 … 假设有 n 行,那么数组长度 len 应该等于 len=n+n22 len = \cfrac{n+n^2}{2} len=2n+n2 题目给出我们数组长度,逆推公式最大值可找到行数 查找行数函数: int max_len(int n){ int l=1,r=n; while(l<=r){ int mid = (l+r)/2; if(
2022-05-15 10:40:09
1911
3
原创 P2678 [NOIP2015 提高组] 跳石头
洛谷P2678 [NOIP2015 提高组] 跳石头 题目练习: 思路: 题目要求找出最短跳跃距离 暴力,假设距离是 1 , 2 , 3, 4, 5, … 判断函数: bool is_jump_max(int max,int nums[],int len,int k){ int mark=0;//前一块石头的下标 for(int i=1;i<=len;i++){//从第一块石头开始遍历 if(nums[i]-nums[mark]<max) {
2022-05-14 22:01:36
200
原创 牛客月赛37 加减-I 满分写法
牛客小白月赛37 加减-I 题目描述 思路: 假设出现次数最多的元素的次数为 q 二分答案,不难发现 当 q 为一时 ,一定符合 而题目求最大的 q ,当 q 一路增加时 会遇到一个分界点 x ,x左边的值都符合,右边的值都不符合 二分答案 设左端点的值为1,右端点的值为数组的长度 判断函数: int Abs(int n){ return n<0?n*-1:n; } bool is(int q,int nums[],int len,int k){ for(int i=1;i
2022-05-14 22:01:19
704
2
原创 前缀和二分查找字串长度 , 求第一个大于 x 的平方数 ,求根号 x 的精确值(小数点后五位)
前缀和二分查找字串长度 , 求第一个大于 x 的平方数 ,求根号 x 的精确值(小数点后五位) 1.给定一个正整数序列,让你去一个字段,使得其区间的和大于等于x,问你这个字段最短可能长度是多少. 思路: 前缀和 遍历 固定一个左端点,右端点二分查找 找到最小值即可 代码: #include <bits/stdc++.h> using namespace std; int main() { int map[1010] = { 0,1,2,4,7,9 }; int len =
2022-05-13 18:14:51
315
原创 map,二分查找,状态压缩,暴力(假硬币)
c++ map,二分查找,状态压缩,暴力(假硬币) 1.map 一个键值对应一个值,值的初始为零 #include <bits/stdc++.h> using namespace std; int main() { map<int, int> a; //键值为 int ,值也为 int 的一个 map a[4]=5; //键值 4 的值 为 5 //遍历 for(auto i : a){ cout <<
2022-05-11 17:14:12
896
原创 总结(取余,快速幂 , c++STL 库部分容器的使用)
笔记 一.取余 (1)两数相加取余: (a + b) % p = (a % p + b % p) % p (2)两数相减取余: (a - b) % p = (a % p - b % p) % p a或者b小于零的情况下对p取余看, a每次加p直到为正数为止,再对p取余 代码: #include <bits/stdc++.h> using namespace std; int abs(int a, int b) { while (a
2022-05-09 15:37:35
972
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人