
编程
文章平均质量分 55
China__int128
你没有落后, 亦没有领先。
展开
-
关于斜率优化
你会斜率优化吗?原创 2022-06-04 20:41:49 · 369 阅读 · 0 评论 -
强连通分量
强连通分量前置芝士首先熬过了 树剖,mjlmjlmjl 终于开始讲解一些码量偏小的题目。于是,就愉快地探索什么是强连通分量……以上是它的一些基本概念。其实强连通就是一个环,主要是解决一些有向图求最值问题(最少需要几个物品完成所有节点覆盖……)。Tarjan之前在学习 LCA 时就以接触过这位大佬的算法,是离线的,时间复杂度达到了优秀的 O(n+q)O(n+q)O(n+q),不过常数极大,被树剖秒掉。但是 Tarjan 在 强连通分量 是在线的,也是正常搜索的时间复杂度,于是它就成为了不原创 2022-05-14 17:07:59 · 272 阅读 · 0 评论 -
2022-05-04定时训练
好耶~又是炸裂的一天首先这次的题目难度其实中肯,T1水,T2考思维,T3大模拟,T4小清新图论,T5***。T1 镜像字符串它的题面然后你就可以发现它是一道水题了……但是存在一个细节,就是当且仅当:第一个字符与第二个字符相同,直接输出两次第一个字符。否则遇见相同情况继续循环遍历,证明如下:于是就可以愉快地敲代码了……#include<bits/stdc++.h>using namespace std;inline int read(){ int num=0,ch=0;原创 2022-05-14 17:05:41 · 213 阅读 · 0 评论 -
树链剖分的总结
什么是树剖?here.以下是它的一些基本概念:关于树剖,最基本的就是求取 LCA,而他的时间复杂度到达了 O(logn)O(logn)O(logn),虽说并比不上离线的 Tarjan 算法,只不过后者常数巨大,因此树剖便成为了不二之选。首先理解一下树剖的过程:我们假设一棵树它是长这样的。不难发现,重链就是 1,4,9,12,13,141,4,9,12,13,141,4,9,12,13,14.树链剖分求 LCA 的思想就是把一个图剖分成 lognlognlogn 条链,然后在链上进行跳跃。综原创 2022-05-02 21:01:16 · 863 阅读 · 1 评论 -
关于LCA的补充
结合之前的 LCA blog.我们又发现如果使用 tarjan 算法,时间复杂度为 O(nq)O(nq)O(nq),如果询问次数 qqq 较大,再结合一些小小的常熟,可能会 TLE。于是我们有了新的思路——欧拉序结合 RMQ。什么是欧拉序?还是这张图该图的欧拉序即为:abacdcecaabacdcecaabacdceca然后我们可以发现,如果求 bbb 与 eee 的 LCA 就是欧拉序中 bbb 至 eee 中层数最小的所对应的字母,而区间最小用什么,当然是 RMQ 啊!所以我们只需要跑原创 2022-04-04 23:01:58 · 459 阅读 · 0 评论 -
P1484 种树题解
如题细看题目,这不就是那道数据备份(其实这类题目有4道左右)。题目简单理解:在 n−1n-1n−1 条路里选择 kkk 个不相邻的路段,使得路段长度总和最小。初看题目,你会联想到线性DP,再看一下数据范围:能水部分分为了不空间超限,我们压维(发现第一维只用记录前3个数值)有了如下代码(不完整):#include<bits/stdc++.h>using namespace std;int n,k,A[100005],a[100005],dp[5][500005];int mai原创 2022-01-08 16:52:12 · 159 阅读 · 0 评论 -
SP1553 BACKUP - Backup Files题解
如题细品一下,发现此题和数据备份十分的相似,简单理解一下题意:在 n−1n-1n−1 条路里选择 kkk 个不相邻的路段,使得路段长度总和最小。然后你就找到了此题的多倍经验……初看题目,你会联想到线性DP,再看一下数据范围:能水70分为了不空间超限,我们压维(发现第一维只用记录前3个数值)有了如下代码(不完整):#include<bits/stdc++.h>using namespace std;int n,k,A[100005],a[100005],dp[5][500005]原创 2022-01-08 16:51:11 · 283 阅读 · 0 评论 -
solution--智力大冲浪
题目描述小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 mmm 元。先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则:首先,比赛时间分为 nnn 个时段,它又给出了很多小游戏,每个小游戏都必须在规定期限 tit_iti 前完成。如果一个游戏没能在规定期限前完成,则要从奖励费 mmm 元中扣去一部分钱 wiw_iwi , wiw_iwi 为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参原创 2021-10-09 09:40:57 · 170 阅读 · 0 评论 -
c++day5
从今天起,开始循环结构循环,循环,如下例:从前有座山,山里有座庙,庙里有个和尚讲故事:“从前有座山,山里有座庙,庙里有个和尚讲故事:‘从前有座山,山里有座庙,庙里有个和尚讲故事……’”像一些用条件选择难以表示的代码,总可以看到循环有1~100这100个数,判断其中的哪些是偶数,依次输出条件选择:if(1%2==0)printf("1 ");if(2%2==0)printf("2 ");if(3%2==0)printf("3 ");if(4%2==0)printf("4 ");……实在原创 2021-08-22 09:59:37 · 163 阅读 · 0 评论 -
局域网(net)
题目描述某个局域网内有n(n≤100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象。因为连接计算机的网线本身不同,所以有一些连线不是很畅通,我们用f(i,j)表示i,j之间连接的畅通程度(f(i,j)≤1000),f(i,j)值越小表示i,j之间连接越通畅,f(i,j)为0表示i,j之间无网线连接。现在我们需要解决回路问题,我们将除去一些连线,使得网络中没有回路,并且被除去网线的Σf(i,j)最大,请求出这原创 2021-08-18 18:55:13 · 381 阅读 · 0 评论 -
c++入门day4
今天就刷刷题吧!if练习题目描述期末考试成绩出来了,我们把它分下类:90~100为"Great"70~89为"Good"60~69为"Average"0~59为"Poor"输入格式一行一个整数,为分数输出格式输出对应的等级样例输入样例77输出样例Good数据范围与提示分数保证在0~100范围内注:一道水题,练练手#include<cstdio>#include<cmath>int main(){ int a; scanf("%d",&a原创 2021-08-17 09:59:33 · 403 阅读 · 0 评论 -
c++入门day3
介绍了变量与占位符,今天来补充一下顺序结构,开始选择结构。保留几位小数printf("%.6lf",M_PI);以上是保留6位小数下的园周率,C++系统默认的圆周率只有48位。三种取整方式ceil floor round,三种取整方式。(1)ceil是向上取整,即时3.90->4,2.000004->3;(2)floor是向下取整,即时3.90->3,2.000004->2;(3)round是四舍五入,即时3.90->4,2.000004->2;其实也原创 2021-08-16 11:18:52 · 331 阅读 · 0 评论 -
c++入门day2
昨天介绍了c++的输出以及换行格式,输入即将来临。c++考试题目99.99%都会存在输入,因为没有输入,就……话说c++提供了两种输入输出方式,见下cin>>"输入处";例如:cin>>>n>>m;scanf("输入处");例如:scanf("%d %d",&n,&m);n,mn,mn,m是你定义的变量名,变量有以下几种形式:intintint:整数型doubledoubledouble:双精度浮点型floatfloatfloa原创 2021-08-15 11:38:33 · 161 阅读 · 0 评论 -
最短路Dijkstra算法强化版
#include<bits/stdc++.h>typedef long long ll;const ll MAXN=15e5;using namespace std;struct edge{ ll to,val;};bool operator<(const edge&a,const edge&b){return a.val>b.val;}vector<edge>G[MAXN];ll n,m,s,t,x,y,w,dis[MAXN];boo原创 2021-08-15 11:11:52 · 116 阅读 · 0 评论 -
c++入门day1
c++是一门十分NB的语言,原因在于它有奖,银牌强基计划最高条约,这是五大学科竞赛中唯一的,金牌只要进了国家集训队,报送!!!(清北再也不是梦想)认识c++,首先要和这几行代码打交道#include<bits/stdc++.h>using namespace std;int main(){ return 0;}在此直接用了万能头文件 #include<bits/stdc++.h> ,没办法,太方便。而且综合纪念赛事来看一般不会被Ban。这是学习c++的基础框架原创 2021-08-14 21:52:34 · 239 阅读 · 0 评论 -
To:每一个csp选手
祝愿每一位大佬csp出成绩,洛谷红名金钩!!!保佑:#include<bits/stdc++.h>不被banbanban第一轮不会爆冷出局数据让人水些分,尤其是模拟或搜索优化题一等奖!!!#include<bits/stdc++.h>using namespace std;int main(){ while(1){ if(你未来看此篇博客)break; RP++;RP++;RP++; } return 0;}...原创 2021-08-09 21:21:45 · 251 阅读 · 0 评论 -
关于排序那些事
排序顾名思义,排序是对一堆无序数的处理,及一些基础操作,本篇博客对排序的几种方式进行一个整理。No.1 sort排序#include<cstdio>#include<algorithm>using namespace std;long long int a[1000005];int main(){ long long int n; scanf("%lld",&n); for(int i=1;i<=n;i++)scanf("%lld"原创 2021-06-26 10:19:13 · 137 阅读 · 0 评论 -
奇怪的电梯
题目描述大楼的每一层都可以停电梯,而且第 iii 层楼 (1<=i<=N)(1<=i<=N)(1<=i<=N) 上有一个数字 K[i](0<=K[i]<=N)K[i](0<=K[i]<=N)K[i](0<=K[i]<=N) .电梯只有四个按钮:开、关、上、下。上下的层数等于当前楼层上的那个数。当然,如果不能满足要求,相应的按钮就会失灵。例如:555层的大楼其数字分别为 333 333 111 222 555 。从111楼开始,按“上原创 2021-08-02 21:47:34 · 253 阅读 · 0 评论 -
CD题解及思路
一道简单的 0/10/10/1 背包,输出sum的数值十分简单,即是 0/10/10/1 背包问题,注意初始化为 000 (细节!!!),而在状态转移比大小中不可以直接使用 max\maxmax ,因为这无法更新 pre 数组的值,也无法输出答案。然而对于输出序列,主要思路与输出最大上升子序列一致。首先,我们可以使用一个 pre 二维数组来存储状态。如果 pre[i][j] 等于1,则表示当前CD已选择,自然,是说前 i 张CD进行 j 分钟时选择了该CD。反之 pre[i][j] 等于 000原创 2021-07-25 10:48:12 · 233 阅读 · 0 评论 -
P1174 打砖块
简单读一下题目,发现处理每列打砖个数,奖励以及状态方面难以处理,果不其然是道蓝题,心中平衡了许多。之后联想到线性dp,敲好了代码。联想看到输入格式,最开始可能直接搜索,然后就爆了。其实,记忆化搜索和与动态规划实现思想都一样,所以搜索大佬在TLE\text{TLE}TLE时也可以勉为其难地去想象用动态规划来实现。说到动态规划,不妨联想到背包,可是如若用0/1背包,说到无后效性,那么子弹数量又驳回了你坚定的思路,于是想到将子弹数定义进入状态,那就是线性动态规划。至此,我们想到使用线性动态规划,欲知思路原创 2021-07-25 10:40:13 · 138 阅读 · 0 评论 -
对称二叉树
这是蒟蒻认真写的第一篇题解,如有欠缺,请理解题目描述一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:1、二叉树;2、将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。下图中节点内的数字为权值,节点外的ididid表示节点编号。现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数最多。请输出这棵子树的节点数。注意:只有树根的树也是对称二叉树。本题中约定,以节点为TTT子树根的一棵“子树”指的是:节点TTT和它的全部后代节点构成的二叉树。输原创 2021-07-16 21:29:34 · 454 阅读 · 1 评论 -
单词查找树
题目描述在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都画出与单词列表所对应的单词查找树,其特点如下:1.根结点不包含字母,除根结点外每一个结点都仅包含一个大写英文字母;2.从根结点到某一结点,路径上经过的字母依次连起来所构成的字母序列,称为该结点对应的单词。单词列表中的每个单词,都是该单词查找树某个结点所对应的单词;3.在满足上述条件下,该单词查找树的结点数最少。4.例如图3-2左边的单词列表就对应于右边的单词查找树。注意,对一个确定的单词列表,原创 2021-07-16 16:22:05 · 574 阅读 · 0 评论 -
随机数生成
大家都知道随机数生成函数randrandrand只不过……它简直又不随机又小,下面展示一下#include<bits/stdc++.h>using namespace std;int main(){ int n=rand()%21093801; for(int i=1;i<=n;i++){ cout<<rand()%515156315<<endl; } return 0;}虽然十分方便,但是如果用它来出数据,那么……就怕被喷太水,于是乎原创 2021-07-15 21:22:06 · 96 阅读 · 0 评论 -
BFS(图论)
BFS 全称是Breadth First Search,中文名是宽度优先搜索,也叫广度优先搜索。是图上最基础、最重要的搜索算法之一。所谓宽度优先。就是每次都尝试访问同一层的节点。 如果同一层都访问完了,再访问下一层。这样做的结果是,BFS 算法找到的路径是从起点开始的 最短 合法路径。换言之,这条路所包含的边数最小。在 BFS 结束时,每个节点都是通过从起点到该点的最短路径访问的。算法过程可以看做是图上火苗传播的过程:最开始只有起点着火了,在每一时刻,有火的节点都向它相邻的所有节点传播火苗。实现转载 2021-07-15 20:29:59 · 2909 阅读 · 1 评论 -
求后序遍历
题目描述输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。输入格式共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。输出格式一行,表示树的后序遍历序列。样例样例输入abdecdbeac样例输出debca代码时间#include<bits/stdc++.h>using namespace std;char a[30],b[30];int n;void tree(char a[],char b[]){原创 2021-07-15 18:15:15 · 134 阅读 · 0 评论 -
DFS(图论)
DFS 全称是 Depth First Search,中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。该算法讲解时常常与 BFS 并列,但两者除了都能遍历图的连通块以外,用途完全不同,很少有能混用两种算法的情况。DFS 常常用来指代用递归函数实现的搜索,但实际上两者并不一样。有关该类搜索思想请参阅 DFS(搜索).DFS 最显著的特征在于其 递归调用自身。同时与 BFS 类似,DFS 会对其访问过的点打上访问标记,在遍历图时跳过已打过标记的点,以确转载 2021-07-15 18:15:40 · 1121 阅读 · 0 评论 -
有序表的最小和
题目描述给出两个长度为 n 的有序表 A 和 B,在 A 和 B 中各任取一个元素,可以得到 n*n 个和,求这些和中最小的 n 个。输入格式第 1 行包含 1 个整数正 n(n≤400000)。 第 2 行与第 3 行分别有 n 个整数,各代表有序表 A 和 B。一行中的每两个整数之间用一个空格隔开,大小在长整型范围内,数据保证有序表单调递增。输出格式输出共 n 行,每行一个整数,第 i 行为第 i 小的和。 数据保证在 long long 范围内。样例【输入样例】31 2 52 4原创 2021-07-15 11:36:58 · 481 阅读 · 1 评论 -
关于最短路的算法大整合
直接上代码未完待续……#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f3f3f3f3f;ll n,m,e[1005][1005],x,y;int Floyd(ll x,ll y){ int dp[1005][1005]; for(int i=1;i<=1005;i++){ for(int j=1;j<=1005;j++){ dp[i原创 2021-07-14 21:56:49 · 91 阅读 · 0 评论 -
原来高精度还是那么简单
高精度c++用户一直以来有个烦恼……由于int存储空间太小,市面上一直流传着这样一句:十年OI一场空,不开long long见祖宗!!!虽说如今的大赛很少涉及到高精度,但是高精度作为c++用户的一个必备技能,只能乖乖地补一补了。什么方法可以在短时间内提高高精度,答案很粗暴——把之前做过的每一道题都加一个高精度高精度加法1.1 加法原理中国人都知道:满十进一1.2 实现思想我们都知道,c++中一个数组可以存储很多元素,实在不行,还可以用到map,可是,其实string最好用,简单介绍一下stri原创 2021-07-10 21:35:22 · 1001 阅读 · 2 评论 -
铺砖2
题目描述对于一个2行N列的走道。现在用1 * 2,2 * 2的砖去铺满。问有多少种不同的铺法?输入格式整个测试有多组数据,请做到文件结束。每行给出一个数字N,0≤N≤250输出格式输入多少行,输出就多少行每行对应2*n的总铺法样例样例输入2812100200样例输出317127318451004001521529343311354702511071292029505993517027974728227441735014801995855195223534251代码时间原创 2021-07-06 21:57:23 · 688 阅读 · 1 评论 -
相似字符串
题目描述自动AC机的开发已经到了测试阶段,郭老师想出了一种奇妙的测试方法。郭老师定义两个字符串和相似,当且仅当满足下列条件之一:1、和逐字符相等2、把分成长度相等的两半和,把也分成长度相等的两半和,满足下列条件之一:(1) 和相似且和相似(2) 和相似且和相似现在自动AC机已经判断字符串和字符串相似,请你来验证是否正确。输入格式第一行 个整数 ,表示测试数据的组数。每组测试数据两行,其中:第一行 个字符串 。第二行 个字符串 。数据保证每组测试数据的两个字符串长度相。输出格式原创 2021-07-04 11:16:30 · 204 阅读 · 0 评论 -
图的基础
图首先推荐一个图的超实用网站Graph Editor简单自学了一下图……关于图的搜索#include<bits/stdc++.h>using namespace std;int n,m,a,b,c,ans=2147483647,P[1005][1005];bool vis[1005];void dfs(int x,int sum){ if(sum>ans)return; if(x==n){ ans=sum; return; } for(int i=1;i&原创 2021-06-27 10:20:48 · 80 阅读 · 0 评论 -
关于背包那些事
几类背包问题1.0/1背包顾名思义,既是指一个背包,指定一些物品质量(体积)与价值(每种物品只有一个),求出可装的最大价值。每种物品有0(不选)、1(选)两种状态。而基本思路为dp:已知条件有第n个物品的重量w[i],价值c[i],以及背包的总容量v简单分析假设当前已经处理好了前i-1个物品的所有状态,那么对于第i个物品,当其不放入背包时,背包的剩余容量不变,背包中物品的总价值也不变,故这种情况的最大价值为dp[i-1][j];当其放入背包时,背包的剩余容量会减小,背包中物品的总价值会增大 ,故原创 2021-06-20 13:45:38 · 97 阅读 · 0 评论