自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 进位/借位标志(CF)和溢出标志(OF)

CF和OF

2022-08-19 15:05:17 12329 1

原创 王道数据结构课后题 5.4.4-12

王道数据结构5.4.4-12

2022-07-14 21:51:32 243

原创 #ifndef与#pragma once区别

#ifndef 和 #pragma once的区别

2021-12-11 17:29:33 2399

原创 背包dp(模版)

背包模版 + 例题

2021-12-02 21:32:00 385

原创 题集(线段树1 & 离散化模版)

线段树 自用离散化

2021-11-30 21:10:17 102

原创 N皇后(正常回溯法 & 位运算法)

n皇后问题(正常回溯法 & 位运算法)

2021-11-25 16:33:12 113

原创 多边形 Polygon(动态规划)

题目链接每次答案肯定是由两段经过符号合并而成,最终答案也是如此maxl左半边最大值, maxr右半边最大值, minl左半边最小值, minr右半边最小值类似于矩阵连乘时候的切割点,需要找出每次切掉的边+号:加号时候的最大值一定是maxl + maxr 而最小值一定是minl + minr*号:乘号有所不同,因为存在负数,所以最大值和最小值不能简单定义为maxl + maxr 和 minl + minr最大值 = max(maxl * maxr, maxl * minr, minl * max

2021-11-11 19:58:03 202

原创 算法实验:划分问题(动态规划)

Description给定一个正整数的集合A={a1,a2,….,an},是否可以将其分割成两个子集合,使两个子集合的数加起来的和相等。例A = { 1, 3, 8, 4, 10} 可以分割:{1, 8, 4} 及 {3, 10}Input第一行集合元素个数n  n <=300 第二行n个整数Output如果能划分成两个集合,输出任意一个子集,否则输出“no”Sample Input51 3 8 4 10Sample Output3 10dp[i][j] 表示{a1, a2,

2021-11-09 15:28:44 937

原创 算法实验:矩阵连乘(动态规划)

题目链接Description给你2个矩阵A、B,我们使用标准的矩阵相乘定义C=AB如下: A数组中栏(column)的数目一定要等于B数组中列(row)的数目才可以做此2数组的相乘。若我们以rows(A),columns(A)分 别代表A数组中列及栏的数目,要计算C数组共需要的乘法的数目为:rows(A)columns(B)columns(A)。例如:A数组是一个 10x20的矩阵,B数组是个20x15的矩阵,那么要算出C数组需要做101520,也就是3000次乘法。 要计算超过2个以上的矩阵相乘就

2021-11-09 15:12:41 626

原创 Gym-103373-C. A Sorting Problem

题目链接本题用O(nlogn)时间求逆序对,我用的归并排序求逆序对#include <cstring>#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>using namespace std;#define ll long long const int M = 200020;int str[M];int str1[M];ll a

2021-10-31 18:36:39 290

原创 Multiplication Puzzle(区间dp)

题目链接动态转移方程 : dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + num[i] * num[j] * num[k])先求出长度较短的子问题的解,以自底向上的方法求出大问题的最优解长度从 3 开始设置,每次求出从[l, l + len - 1] 内的最优解,最终求出答案#include <iostream>#include <cstring>#include <cstdio>using namespac

2021-10-25 21:53:28 120

原创 题集 (简单数据结构)

题单A Sliding Window(POJ - 2823)B Bad Hair Day (POJ - 3250)A Sliding Window(POJ - 2823)(单调队列)题目链接本题维护两个单调队列就可以了在求窗口内最大值时,需要我们维护一个单调递减的队列,队头所对应的元素永远是最大的,只有在当前位置到队头位置长度超过窗口长度时,才将队头弹出,在维护递减性时,如果当前位置所对应元素比队尾所对应元素要大,那么弹出队尾,直到队空或者找到一个比当前位置所对应元素大的。而求窗口最小值时反之

2021-10-25 20:42:48 76

原创 CCPC2021网络赛重赛 umping Monkey(并查集重构 + dfs)

题目链接(hdu 7136)本题可以根据权值最大的点作为突破口,权值最大的点一定是最优解的最后一步,那么我们可以依次倒推,每次删去最大的点以及该点连接的边最后推到每一个点。实现过程:我们可以将所有点按照权值从小到大排出,每次枚举出的新点因为权值比前面的大,所以可以将他作为原先连通块的新祖宗,这样在搜寻深度倒推的时候就能够实现优先删除一个连通块中权值较大的点,再删除权值较小的点,每次倒推与该点相连的点的时候,与该点相连的点的深度为该点深度加1,直到倒推到无法倒推。代码:#include <i

2021-10-18 20:29:28 83

原创 快速幂、快速乘、矩阵快速幂

目录一 快速幂二 快速乘三 矩阵快速幂一 快速幂目的:当我们在求f(x) = a ^ x % mod时,f(x)的结果会呈指数型增加,如果我们在最终求完之后进行取模,那么最终的那个结果无论int 或者 long long 都无法装下这么大的数据。所以我们需要一个防爆的方法来求出正确答案那么有人问了:如果我要是求把x次方拆分成x个a相乘,每次进行取模可以吗?这样做有问题吗?没有问题,它可以出答案,但时间复杂度太高,太慢了我们能接受吗?不能接受,我们不但要出答案,还要更快那么我们就需要引入快速幂这个

2021-09-17 14:26:15 431

原创 题集(A* & 双向广搜)

题单A Eight(POJ-1077)二级目录三级目录A Eight(POJ-1077)(双向广搜 或 A*)题目链接首先说一下这个没有解决方案的情况,在本题中只有四种移动状态,上下左右,先看左右,他不会对改变状态后的逆序数大小进行变化,再看上下,他会对改变状态后的逆序数大小进行±2的改变(让改变的位置到x中间的2个数都加减1)或者不会对改变状态后逆序数大小进行改变(让改变的位置到x中间的2个数分别加减1),所以所有状态的奇偶性都和初始状态相同,那么我们只需要判断初始状态到最终状态(“123456

2021-09-11 12:24:58 185

原创 “红旗杯”第十五届东北地区大学生程序设计竞赛 D - Lowbit (gym-103145-D)

题目链接一开始看官方题解没看懂 看了一波大佬的题解…链接(线段树 + 思维)本题是给出两种操作 一种是 给出一个区间,将区间内的数字都加上自身的lowbit 另一种是求出区间总和 如果暴力单点修改每个点加上自身lowbit肯定是会TLE,我们需要去进行区间修改我们可以发现所有2的n次方加上自身的lowbit都可以用乘2(左移1位)来达到0x2 = 10 0x4 = 100 0x8 = 1000 0x16 = 10000而且所有的非2的n次方加上自身的lowbit就是将最右边的1左移1位,那么

2021-09-07 15:18:39 632

原创 算法:线性时间选择(求第k小元素)

一开始我是想利用优先队列的大顶堆,存储当前遇到的最小的k个数,时间复杂度是O(nlogk)果断tle然后我就去学习了一下线性时间选择算法先将整个数组每5个分成一份

2021-09-03 20:57:15 1400

原创 题集 (搜索扩展)

题单A 胜利大逃亡(续)A 胜利大逃亡(续)

2021-08-31 15:18:01 121

原创 题集 (最短路 并查集扩展)

题单A Coloring Contention(Gym 102433C)**B** Jzzhu and Cities(CodeForces 449B)C  Find them, Catch them(POJ 1703)A Coloring Contention(Gym 102433C)最短路spfa + 链式前向星存储题目链接题目意思是 使用能够使Bob变换最多次数的方法,求出Bob变换的次数,已知是最优,那么Bob第一步确定颜色,其余每一步必须改变颜色,所以两点间距离可以设置为1,求出Bob到达终

2021-08-29 16:45:37 92

原创 Jogging (Gym - 103081D)

该题因为是可以在一条路径上来回跑 所以只需要判断跑步中的最大米数是否大于起点到每条边的两个点中的最短路的最小值乘2 也就是说 这两个点任何一个点到起点的最小距离乘2 小于跑步中的最大米数 这条边就可以被选取 答案加1所以只需要用dijkstra跑出来到所有点的最短距离再进行判断答案就可以了#include <iostream>#include <queue>#include <cstdio>#include <algorithm>#include

2021-08-22 15:56:50 239

原创 多重背包(单调队列优化)

话不多说,直接上题,先看一道单调队列的经典题,理解一下单调队列(大佬跳过)题目链接AC代码#include <iostream>using namespace std;const int M = 1000100;int que[M], head, tail, ans1[M], ans2[M], que2[M];int map1[M];int main(){ int n, k; cin >> n >> k; for (int i = 0; i &l

2021-06-05 16:09:10 137

原创 memset的坑

先来看样例#include <iostream>#include <string.h>using namespace std;int main(){ int a[12]; memset(a, 1, sizeof(a)); for (int i = 0; i < 12; ++i) cout << a[i] << " "; return 0;}这个输出的是而 16843009 转化成二进制

2021-05-22 20:36:27 86

原创 POJ 1077 Eight(双向广搜)

题目链接代码:#include<stdio.h>#include<iostream>#include<map>#include<queue>using namespace std;#define ll long long ll dir[4][2]={{0,1},{-1,0},{1,0},{0,-1}};int main(){ map<ll,int>vis;//1表示正向搜索过,2表示反向搜索过 map<l

2021-03-09 16:50:59 75

原创 全排列函数

头文件:#include<algorithm>next_permutation例子:#include<algorithm>#include<stdio.h>using namespace std;int main(){ int a[4]={1,2,3,4}; do{ for(int i=0;i<4;++i) printf("%d",a[i]); printf("\n");

2021-01-04 16:23:58 143 2

原创 Conservation(拓扑排序)

题目链接(自用)该题可以从实验室1开始或者从实验室2开始用拓扑排序从实验室1开始跑一遍,再从实验室2开始跑一遍,求最小值就可以了#include <map>#include <set>#include <cmath>#include <deque>#include <queue>#include <stack>#include <vector>#include <cstdio>#includ

2020-11-21 14:53:48 110 1

原创 Improve SPAM(两次dfs或者bfs+拓扑排序)

先给出两个数,有n个点,其中1-m点是发送邮件点,然后有m行,第i行的第一个数,代表着第i个发送邮件点能够发送的地址。可以用两个dfs跑出来,或者用bfs预处理,再跑一遍拓扑dfs:#include<stdio.h>#include<iostream>#include<vector>#include<memory.h>#include<queue>using namespace std;#define mem(a,b) memse

2020-11-12 15:14:54 124

原创 1024快乐

1024快乐

2020-10-24 08:20:53 58

原创 欧拉筛板子

洛谷P3383 【模板】线性筛素数欧拉筛板子#include<bits/stdc++.h>#include<ext/rope>using namespace std;#define mem(a,b) memset(a,b,sizeof(a));#define ll long long intconst int INF = 0x3f3f3f3f;bool prime[100000010];int num[6000010],cnt=0;void olprime(int

2020-10-21 19:37:49 126

原创 快速幂板子

题目链接洛谷P1226#include<bits/stdc++.h>using namespace std;#define mem(a,b) memset(a,b,sizeof(a));#define ll long longconst int INF = 0x3f3f3f3f;ll quick(ll a,ll b,ll c)//每步都要mod c{ ll ans=1,base=a%c;//ans为答案,base为a^(2^n) while(b)//比如为11则他

2020-10-20 20:51:47 91

原创 并查集+克鲁斯卡尔+最小生成树板子

#include<bits/stdc++.h>#include<ext/rope>using namespace std;#define mem(a,b) memset(a,b,sizeof(a));#define ll long long intconst int INF = 0x3f3f3f3f;int pre[5005];int n,m;struct node1{ int x,y,w;}node[200020];void init(){

2020-10-20 19:51:16 108

原创 2020牛客国庆集训派对day3(补题)

补题J:Flowers题目链接tot(为花的贡献和)本题给出数据n,m,n为花卉种类,m为每束花应该有m种,check中的x为x束花,假设有x束花,则应该有xm朵花,在n种花中,(check过程)如果a[i]>x则说明花的数量大于花束的数量,这种花可以用在每一种,而且还多出来,tot中加上x,反之第i种花的数量小于花束的数量则tot应该加上该种花的数量(a[i])。如果tot最终大于xm则花的贡献量大于应该有的花数,则check函数返回1(最佳答案大于等于x也就是传过去的mid),使ans值等于

2020-10-09 18:53:44 126

原创 2020牛客国庆集训派对day4 补题

添加链接描述补题B:本题求最长等差序列的长度代码:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<set>#include<vector>#include<queue>#include<stack>#

2020-10-06 20:39:05 115

原创 2020牛客国庆集训派对day2 补题J

2020牛客国庆集训派对day2补题J:VIRUS OUTBREAK题目描述The State Veterinary Services Department recently reported an outbreak of a newly found cow disease. All cows found to have affected by the disease have since euthanized because of the risk to the industry. Number o

2020-10-06 19:03:54 285

原创 Elven Postman(hdu5444)

题目链接hdu5444从总根出发,如果比当前根值大往左继续查询且输出W,比当前根值小往右继续查询且输出E,在根就换行并且返回,且每一个快递都是从最顶部出发#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<set>#include<vecto

2020-07-30 14:16:31 95

原创 The order of a Tree(二叉树的前序遍历)(hdu3999)

本题构建二叉树,并且前序遍历输出即可#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<set>#include<vector>#include<queue>#include<stack>#include&l

2020-07-30 12:58:27 239

原创 kmp

大佬kmp详解写个博客记下来POJ3461 Oulipo#include<stdio.h>#include<string.h>#include<iostream>using namespace std;const int maxn1= 1e4+5;const int maxn2 =1e6+5;char s1[maxn1],s2[maxn2];int next[maxn1];int cnt;int len1,len2;void kmp(char *

2020-07-24 20:09:24 96

原创 POJ 3468 A Simple Problem with Integers(线段树 区间修改)

本题数组要开大点,而且要用long long代码:#include<iostream>#include<stdio.h>using namespace std;typedef long long ll;const ll maxn=100010;ll lazy[4*maxn],tr[4*maxn],r[4*maxn];void pushdown(ll po,ll ljs,ll rjs)//向下推lazy标记{ if(lazy[po]) {

2020-07-16 17:38:39 89

原创 hdu 1754 I Hate It(tle有坑)

原题链接本题有坑,如果你一直tle的话,可能是空间开小了,建议开到3或4倍,亲测,我wa了5次,就是因为开小了,改成3倍多点就A了代码:**#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<set>#include<vector>

2020-07-15 19:37:27 232 2

原创 hdu 1429胜利大逃亡(续)

震惊,某大学生下午净在家中做出这种事情!描述Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)……这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方。刚开始Ignatius被关在(sx,sy)的位置,离开地牢的门在(ex,ey)的位置。Ignatius每分钟只能从一个坐标走到相邻四个坐标中的其中一个。魔王每t分钟回地牢视察一次,若发现Ignatius不在原位置便把他拎回去。经过若干次的尝试,Ignatius已画出整

2020-07-10 16:35:43 140

原创 hdu1428漫步校园

LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划分为n*n个小方格,代表各个区域。例如LL居住的18号宿舍位于校园的西北角,即方格(1,1)代表的地方,而机房所在的第三实验楼处于东南端的(n,n)。因有多条路线可以选择,LL希望每次的散步路线都不一样。另外,他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近(否则可能永远都到不了机房了…)。现在他想知道的是,所

2020-07-08 18:40:30 231

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除