自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 洛谷 P2872 [USACO07DEC]Building Roads S

​​​​​​原题链接还是用kruskal,稍微复杂了一丢丢,但是也不难啦,和无线网那题一样,要用勾股定理求下所有点间的距离(写个求距离的函数就ok了),然后就是给定的m条边用数组标记就好了,然后在求距离时把这些边归0就可以,bool vis[N][N]; cin>>u>>v; vis[u][v]=true;if(vis[i][j]==1) edge[k].len=0;//已存在的边把它长度归0 总之就是整体就改动下模板就好了。但是!没这么容易过就是

2022-02-18 02:13:55 247

原创 洛谷 P1195 口袋的天空

原题链接很简单,照搬kruskal算法的模板稍微改动一下就可以了#include<bits/stdc++.h>using namespace std;const int N=1005;const int M=10005;int n,m,k;int minsum=0;int parent[N];struct Edge{ int x,y,l;}edge[M];void initial(){ for(int i=1;i<=n;i++) { pare

2022-02-18 00:25:49 320

原创 洛谷 P2121 拆地毯

原题链接还是用kruskal算法,只不过把最短路换成了最大路,还只能留下最大的k条路。可以说是最大生成树?//第一遍的代码,结果错了,发现是美丽度最大,然后就把cmp函数里的<改成了>,很奇怪,不出结果#include<bits/stdc++.h>using namespace std;const int K=100005;int parent[K];int n,m,k;int cnt=0,maxlen=0;// K 条地毯的最大美丽度之和struct E

2022-02-18 00:01:42 233

原创 洛谷 P3366 【模板】最小生成树

用的kruskal算法,用到了并查集,算法思路和代码实现过程都很好理解,标准的模板题#include<bits/stdc++.h>using namespace std;const int N=5005;const int M=200005;int n,m;//n个节点,m条无向边long long int lens=0;//最小生成树的各边的长度之和int cnt=0;//连接上的边数 int parent[N];//父节点 struct Edge{ int x

2022-02-17 00:17:36 651

原创 洛谷 P1991 无线通讯网

原题链接还是用kruskal 算法,把模板改动一下就好了本质就是张图,当成所有哨所都互通,排序各哨所间的距离。卫星电话不限距离,所以只要考虑(P-S)个哨所,排序后选(P-S)个哨所中最大的距离(即最小传输距离D),保证所有哨所连通(即接上(P-S)条边)。#include<bits/stdc++.h>using namespace std;const int P=505;int s,p;//卫星电话数,哨所数 int parent[P];double D;//表示无线

2022-02-17 00:14:49 153

原创 洛谷 P1359 租用游艇

题目描述长江游艇俱乐部在长江上设置了 nn 个游艇出租站 1,2,\cdots,n1,2,⋯,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 ii 到游艇出租站 jj 之间的租金为 r(i,j)r(i,j)(1\le i\lt j\le n1≤i<j≤n)。试设计一个算法,计算出从游艇出租站 11 到游艇出租站 nn 所需的最少租金。输入格式第一行中有一个正整数 nn,表示有 nn 个游艇出租站。接下来的 n-1n−1 行是一个半矩阵 r(i,j)r(

2022-02-15 01:08:23 606

转载 洛谷 P2910 [USACO08OPEN]Clear And Present Danger S

题目描述Farmer John is on a boat seeking fabled treasure on one of the N (1 <= N <= 100) islands conveniently labeled 1..N in the Cowribbean Sea.The treasure map tells him that he must travel through a certain sequence A_1, A_2, ..., A_M of M (2 <

2022-02-15 00:56:26 202

原创 洛谷 P2957 [USACO09OCT]Barn Echoes G

题目描述The cows enjoy mooing at the barn because their moos echo back, although sometimes not completely. Bessie, ever the excellentsecretary, has been recording the exact wording of the moo as it goes out and returns. She is curious as to just how much o

2022-02-13 19:05:40 134

原创 洛谷 P1102 A-B 数对

题目描述出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!好吧,题目是这样的:给出一串数以及一个数字 CC,要求计算出所有 A - B = CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格式输入共两行。第一行,两个整数 N, CN,C。第二行,NN 个整数,作为要求处理的那串数。输出格式一行,表示该串数中包含的满足 A - B = CA−B=C 的数对的个数。输入输出

2022-02-13 19:02:01 151

原创 洛谷 P2580 于是他错误的点名开始了

题目背景XS中学化学竞赛组教练是一个酷爱炉石的人。他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON900)。题目描述这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)输入格式第一行一个整数nn,表示班上人数。接下来nn行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过5050...

2022-02-11 00:25:11 132

原创 洛谷 P3375 【模板】KMP字符串匹配

题目描述给出两个字符串s_1s1​和s_2s2​,若s_1s1​的区间[l, r][l,r]子串与s_2s2​完全相同,则称s_2s2​在s_1s1​中出现了,其出现位置为ll。现在请你求出s_2s2​在s_1s1​中所有出现的位置。定义一个字符串ss的 border 为ss的一个非ss本身的子串tt,满足tt既是ss的前缀,又是ss的后缀。对于s_2s2​,你还需要求出对于其每个前缀s's′的最长 bordert't′的长...

2022-02-10 12:12:44 718

原创 洛谷 P3370 【模板】字符串哈希

题目描述如题,给定NN个字符串(第ii个字符串长度为M_iMi​,字符串内包含数字、大小写字母,大小写敏感),请求出NN个字符串中共有多少个不同的字符串。友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转PJ试炼场:)输入格式第一行包含一个整数NN,为字符串的个数。接下来NN行每行包含一个字符串,为所提供的字符串。输出格式输出包含一行,包含一个整数,为不同的字符串个数。输入输出样例输入 #1复制5abcaaaaabcabcc123...

2022-02-08 18:08:27 647

原创 P7939 [B1] Alice Wins(easy version)

题目描述The difference between the versions is the limit of operations.Alice is a cute girl who has a lot of dolls.There are4\cdot n4⋅ndolls playingrock-paper-scissors. They are divided into two teams: Team A and Team B. Each team contains2\cdot n...

2022-01-24 14:01:56 200

原创 CF12B Correct Solution?

题目描述One cold winter evening Alice and her older brother Bob was sitting at home near the fireplace and giving each other interesting problems to solve. When it was Alice's turn, she told the numbernnto Bob and said:—Shuffle the digits in this number ..

2022-01-24 11:44:50 222

原创 洛谷 P4913 【深基16.例3】二叉树深度

直接用深搜就可以了#include<iostream>using namespace std;struct Node{ int lc,rc;};struct Node root[1000010];int n,deep=1,maxdeep=0;void dfs(int x,int deep){ if(x==0) return; maxdeep=max(maxdeep,deep); dfs(root[x].lc,deep+1); dfs(root[x].rc

2022-01-22 22:37:37 444

原创 洛谷 P1030 [NOIP2001 普及组] 求先序排列

后序遍历最后一个是根节点,还是根据后序遍历,不断在中序遍历中找根,切割区分左右子树其实用dfs就可以做#include<iostream>#include<cstring>#include<cstdlib>using namespace std;char in[10],post[10];char lchild,rchild,root;char dfs(int L1,int R1,int L2,int R2){ if(L1>R1) r

2022-01-22 22:14:05 216

原创 洛谷 P1827 [USACO3.4]美国血统 American Heritage

画个图就很清楚了,用递归还原二叉树#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring> using namespace std;char pre[30],in[30];struct Node{ char data; struct Node *lchild,*rchild;};struct Node *root;void comb...

2022-01-22 14:56:46 450

原创 洛谷 P1111 修复公路

其实还是考查并查集,但是增加了一个问题,就是任意两个村庄都可通车的最短时间(可以是多条公路连成一条道路),看输出结果这些公路大概是能同时修的,还是先套用并查集的模板先把输入的公路都连通,然后考虑如何检查是否有两个村庄无法通车,再考虑如何计算通车时间。1.利用了parent数组并初始化所有结点为-1,所以所有村庄通车后只会有一个村庄的数组标记还是-1(根节点),所以只要检查所有村庄中是否存在两个或以上村庄仍=-1就行,没有就可以通车。2.计算最短时间可以看有没有环存在,没有环存在那么说明村庄与村庄之间

2022-01-21 21:12:46 485

原创 洛谷 P1455 搭配购买

还是并查集,n朵云,m个搭配,和手里的钱w,然后是每朵云的价钱和价值,再是云与云之间的搭配。思路:1.还是用combine函数把所有搭配连起来(可能有分散的不知道多少个集合)2.增加的一个难点就是统计每个集合的总价钱和总价值 (每个集合的根节点都还是初始化的-1)3.将每个集合的总价值比较,求出总价值最大且总价钱不超过w的难点的解决办法:每朵云都有编号,parent[编号]就代表这朵云的父节点所代表的云的编号,根节点的父节点的值是-1,在每一次的结合过程中,把结合进去的云或云...

2022-01-21 14:56:40 300

原创 洛谷 P2078 朋友

思路是分为两个并查集,然后计算下男女人数,然后直接比较,选小的代码写的有点麻烦好像,交上去也没过,虽然结果对了其实第一遍已经发现有问题了,因为比较的时候不小心把小于号打成大于号,然后就输出了朋友较多的男方,但是结果居然是5,交上去果然错了,后面第二遍代码就继续试了下男方,是对的,3,但是交上去还是unexpected 30.想想好像是要考虑负号,毕竟数组没有a[-1],改成了combine_2(abs(x2),abs(y2));加了绝对值,交上去还是错的,有点烦了...

2022-01-21 01:31:25 649

原创 洛谷 P1551 亲戚

本质还是并查集,模板套用一下就可以了,挺简单#include<iostream>using namespace std;#define MAX_TREE_SIZE 10010int parent[MAX_TREE_SIZE]={0};//创建一个结点数组 int deep[MAX_TREE_SIZE]={0}; void initial(int n)//初始化 { for(int i=0;i<n;i++) { parent[i]=-1; deep[i..

2022-01-20 15:49:49 275

原创 洛谷 P1177 【模板】快速排序

第一遍时间超限#include<stdio.h>int a[100010];void Quick_Sort(int left,int right){ if(left>=right) { return; } int f=a[left]; int l=left,r=right; while(l!=r) { while(a[r]>=f&&l<r) r--; while(a[l]<=f&am...

2022-01-19 23:50:51 235

原创 洛谷 P3367 【模板】并查集

看了并查集的视频,讲的挺清楚的:https://www.bilibili.com/video/BV13t411v7Fs?p=2然后就分模块写了代码:创建一维数组并初始化#define MAX_TREE_SIZE 10010int parent[MAX_TREE_SIZE]={0};//创建一个结点数组 void initial(int n)//初始化 { for(int i=0;i<n;i++) { parent[i]=-1; }}寻找根节点...

2022-01-19 15:38:02 450

原创 最快合并链表(线性表)

#include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; struct Node* next;}LinkList;LinkList *CreateLinkList(LinkList *head, int x)//创建新链表{ LinkList *p, *q; head = (LinkList*)malloc(sizeof(LinkList)); q=hea.

2022-01-17 22:26:43 480

原创 链表排列(线性表)

感觉这题简单些,我可能就是移动结点搞不太清,这个可以直接用双重while循环按冒泡排序来搞。直接上代码了#include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; struct Node *next;}LinkList;LinkList *head,*p,*q;int m,i,j;void creatLinkList(){ p=head=(LinkList*)mal...

2022-01-17 16:10:18 294

原创 链表查找(线性表)

最开始的错误代码以及做题思路和草稿纸上写的过程画的图:#include<stdio.h>#include<stdlib.h> //提供malloc()和free()#include<string.h> //提供strcpy()等struct Node{ int data; //数据域 struct Node* next; //指针域(指向节点的指针)};struct Node* head;struct Nod...

2022-01-17 16:04:25 401

原创 洛谷 P2036 PERKET

求总酸度和总苦度的最小绝对值差,自行选取配料咯,有点麻烦。总酸度=总乘积,所以int sum1=1;总苦度=总和,所以int sum2=0;还是用DFS,搜就对了。。循环搜索回溯,比较绝对值大小,生干。。害。开始改了好久结果都是0,结果发现没给cha赋初值#include<iostream>#include<cmath>#include<cstring>using namespace std;int n;//in...

2022-01-13 23:42:46 163

原创 洛谷 P2392 kkksc03考前临时抱佛脚

可以同时计算 2 道不同的题目,但是仅限于同一科必须一科一科的复习,求能够完成复习的最短时间这个可以用01背包问题,不过背包问题我还没学,就直接用的搜索找问题找了好一会儿,结果只是错在x>s[i]该成这之后交上去AC了#include<iostream>using namespace std;int s[10],a[30];//1<=s1,s2,s3,s4<=20int sum=0,l,r,mintime;void df...

2022-01-13 20:57:17 169

原创 洛谷 P1443 马的遍历

到达某个点最少走几步,涉及广度优先搜索(BFS),要用到队列。做题思路:由输出的矩阵看出这个马只能按照象棋中的走法跳,由此可以定义一个移动的数组:int dir[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};//可以跳八个方向不能到达则输出 -1,那么可以用数组标记bool vis[410][410];不用数组标记也可以直接把矩阵初始化为-1,可用双重for循环,也可以用memset函数int

2022-01-13 16:29:41 442

原创 洛谷 P1162 填涂颜色

dfs熟练后做起来很快,所以没写什么注释了。做题思路:(将1组成的闭合圈内的0都填为2,只有一个闭合圈且圈内至少有一个0 ,围圈只走上下左右四个方向)那么就可以用反向思维,先把圈外所有的0搜出来并标记(用dfs,搜最外圈),再用双重循环把所有未标记的0换成2并输出即可。#include<iostream>using namespace std;int n;int mp[35][35];//1<=n<=30int dir[4][2]={{-1,0},{1,

2022-01-13 13:39:54 70

原创 链表插入(线性表)

刚接触链表,有点迷糊,昨天和前天看视频看博客拼拼凑凑学了创建链表打印链表和插入节点什么的,之前写的被注释在后面了,还是请教学姐修改了很多才勉强把这道题弄出来。放代码:#include<stdio.h>#include<stdlib.h> //提供malloc()和free()#include<string.h> //提供strcpy()等struct Node{ int data; //数据域 struct Nod.

2022-01-12 22:52:28 447

原创 洛谷 P1596 Lake Counting S

AC代码在最下面。做题记录:昨天没过的:今天重新理了下思路:水坑问题思路:用双重for循环搜索'W',搜到后cnt++然后用dfs搜索这个水坑占的所有格子,标记或换成'.',以免重复搜索,然后继续搜索下一个'W'主要是写好dfs函数把格子标记完又保证能搜到其他格子就有点麻烦要搜索八个方向错误代码:#include<iostream>#include<string.h>using namespace std;int n,m...

2022-01-12 22:06:01 225

原创 洛谷 P1101 单词方阵

第一次的错误代码:#include<stdio.h>int n;char zm[100][100];//输入的单词矩阵 char a[8]="yizhong";int xx[]={1,1,1,0,0,-1,-1,-1};int yy[]={1,0,-1,1,-1,1,0,-1};//八个摆放的方向 int vis[100][100];//标记 int mp[100][100];//染色 void dfs(int x,int y){ for(int i=0;i&lt

2022-01-12 14:46:26 173 2

空空如也

空空如也

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

TA关注的人

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