程序设计
文章平均质量分 62
oi、acm、icpc
YUK_103
随缘更新
展开
-
[单源最短路径]求多条最短路
问题从1到5一共有几条最短路?思考我们思考一下上一篇的代码,发现for(i=head[now];i!=-1;i=vec[i].nex){ if(dis[vec[i].v] > dis[now] + vec[i].w) { dis[vec[i].v] = dis[now] + vec[i].w; q.push(make_pair(dis[vec[i].v],vec[i].v)); }}这里只是找到比其小的路径就覆盖并且放入队.原创 2020-10-08 17:48:32 · 495 阅读 · 0 评论 -
[单源最短路径]dijkstra(堆优化)
前言相信大家对dijkstra普通的方法已经有所了解,不过O(n^2) 的时间复杂度还是让人十分头痛。由普通的代码可知,我们的时间全部都浪费在遍历寻找最小的边上面,如果我们用一个小根堆去维护那么就可以将查询最小的边的时间压缩到 O(logn)我的板子:#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <iostream>#d原创 2020-10-08 17:28:47 · 276 阅读 · 0 评论 -
两种建表的方法
直接上代码邻接表的创立#include <cstdio>#include <cstring>#include <vector>#include <iostream>using namespace std;int n,m;const int N = 2000000;int head[N];struct node{ int u,v,w,nex;};vector <node> vec;void addEdge(int原创 2020-09-26 17:43:58 · 300 阅读 · 0 评论 -
[堆] 奶牛晒衣服
惯例的传送门思路用一个堆去维护所有的衣服,每次取湿度最大的一件进行烘干,当最大的那一件也被烘干后便是答案。这个堆的作用就是保证heap[1]永远是最大的。你也可以用sort进行排序,但是数据好大可能会超时。上两份代码第一份(常规写法)/*Author : yukkiTime : 2020.9.1OJ : luoguPid : 1843*/#include <cstdio>#include <algorithm>#include原创 2020-09-26 00:12:35 · 104 阅读 · 0 评论 -
[图论+BFS]最小转机
传送门还是要把题目摘抄一下第一行输入n , m , start , end , 其中n表示城市数,m表示航线数,start表示起点城市,end 表示终点城市。紧接着输入m行,每行是一条类似a b这样的数据表示城市a和城市b之间有航线,也就是说城市a和城市b之间可以互相到达。城市a和城市b之间可以互相到达。 存双边思路邻接表存图,bfs找终点上代码/*Author : yukkiTime : 2020.9.21OJ : aojPid : 1952*原创 2020-09-22 01:08:04 · 322 阅读 · 0 评论 -
[模拟]解密QQ号
题目描述新学期开始了,小哈是小哼的新同,小哼向小哈询问QQ号,小哈当然不会直接告诉小哼。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的QQ啦。现在你来帮帮小哼吧。小哈给小哼加密过的一串数是“6 3 1 7 5 8 9 2 4”。解密后小哈的QQ号应该是“6 1原创 2020-09-12 15:46:43 · 268 阅读 · 0 评论 -
2018年安徽省程序设计大赛B编译错误
感想11点出去溜了个弯,回来看了看STL一些使用方法和求有向图是否存在环。调试几次后一遍过了。感动思路这题很好想:这和平常的图论题的差别就是平常的图论题的点是数字,本题是一个字符串。很容易令人想到用map转换一下。首先:用一个set集合看看是否存在该字符串,不存在就map新添加一个映射,并且再set集合种报备一下;存在的话直接转化成数字即可。如下便是样例字符串转化成数字后的结果。1 22 34 33 52 56 55 75 81 2============2 33 44原创 2020-09-08 01:26:56 · 157 阅读 · 0 评论 -
[动态规划]经典之01背包
传送门思路很显然这就是一个01背包经典题目,对于每一个“物品”都可以选择采或者不采。采的话那就获得了本物品的价值并且花费了采药的时间。不采的话那就既不获得本物品的价值也不花费时间。状态转移方程为F[i][j]=max{F[i−1][j−w[i]]+v[i],f[i−1][j]}F[i][j] = max\{F[i-1][j-w[i]]+v[i],f[i-1][j]\}F[i][j]=max{F[i−1][j−w[i]]+v[i],f[i−1][j]}F(i,j)表示当拥有j个时间时选取前i原创 2020-08-21 21:37:47 · 109 阅读 · 0 评论 -
[二分答案]路标设置
传送门其实与跳石头无异上代码#include <cstdio>int len,n,k;int a[100010];int l,r;bool check(int llen){ register int i; int cnt = 0;//记录当前距离需要添加多少个路障 /* 假设当前为0 101两个路障,当前llen为51 需要添加的路障数为(101-0)/51 = 1 如果llen为50 需要添原创 2020-08-19 23:08:27 · 213 阅读 · 1 评论 -
[二分查找/二分答案]寻找第一个比给定数字大/小的数字
比给定数字小的int bin_search(int key){ int l,r; l = 1; r = 5; int mid; while(l<r) { mid = (l+r)>>1; if(a[mid] >= key) r = mid-1; else l = mid; } return l;}比给定数字大的in原创 2020-08-18 16:49:48 · 752 阅读 · 0 评论 -
[二分查找/二分答案] A-B数对
传送门本题思路写代码的时候顺手放进去了这里稍微补充一些首先数据100%的时候为2*10^5,数据过大两层循环可能存在超时,而常规思路就是两层for循环找答案,放弃该思路我们先行排序,然后从大到小循环一遍,当前数字减去m后所得到的值是固定的,只需要查找数组中有多少个数字符合条件即可时间复杂度O(nlogn)上代码#include <cstdio>#include <algorithm>using namespace std;#define scnaf sca原创 2020-08-18 15:46:07 · 315 阅读 · 0 评论 -
安徽2019ACM C卡牌对决
思想田忌赛马上代码:#include <cstdio>#include <algorithm>using namespace std;int n;int a[50010];int b[50010];bool vis[100010];int ans;bool cmp(const int &a, const int &b){return a>b;}int main(){ register int i; scanf("%d原创 2020-05-28 11:04:37 · 599 阅读 · 0 评论 -
[图论 + 搜索]查找文献
传送门没啥好说的了,直接上代码#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#define scnaf scanf#define MAXN 1000010using namespace std;int n,m;/*思路:由于向量星储...原创 2020-05-06 14:46:36 · 247 阅读 · 0 评论 -
[并查集]修复公路
传送门思考过程这个数据范围好大啊,我想省点空间于是就想到了vector,思路很简单,就是先根据建造时间排个序,然后从小到大的顺序合并,合并一次检查一次,如果最后祖先都一样那么就是通了。#include <cstdio>#include <algorithm>#include <vector>using namespace std;int fa[...原创 2020-05-05 16:14:48 · 269 阅读 · 0 评论 -
[并查集]一中校运会之百米跑
思路有什么好说的呢?我就多用了一个map将名字转换成了数字,其他无异。并查集走起。#include <cstdio>#include <string>#include <map>#include <algorithm>#include <iostream>using namespace std;int fa[20002];...原创 2020-05-04 21:38:36 · 263 阅读 · 0 评论 -
[二分答案]和为给定数
描述给出若干个整数,询问其中是否有一对数的和等于给定的数。输入共三行:第一行是整数n(0 < n <= 100,000),表示有n个整数。第二行是n个整数。整数的范围是在0到10^8之间。第三行是一个整数m(0 <= m <= 2^30),表示需要得到的和。输出若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,...原创 2020-05-02 01:38:33 · 561 阅读 · 0 评论 -
[二分答案]河中跳房子
描述每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。在比赛过程中,奶牛轮流从起点出发,尝试到...原创 2020-05-02 01:33:33 · 413 阅读 · 0 评论 -
[01BFS]hdu 2757 Ocean Currents
思路分析这显然是一个01BFS,根据其性质我们只需要将消耗为0的点放在前面,消耗为1的放在后面再一个一个遍历即可。然后不断更新当前点消耗能量的最小值,待遍历结束后输出ans[tx][ty]即可。这里用queue是不行的,需要使用优先队列来实现上述功能。注意:不能用vis来标记某个点是否被访问过,因为有可能第一遍被访问的时候并不是最优的解#include <cstdio>#i...原创 2020-04-30 23:14:48 · 185 阅读 · 0 评论 -
用STL打ACM
STL 相关文章说明count()解释注意文章说明这是我通过不断学习所总结出来的一些注意事项和知识点。将持续更新(TODO)count()解释首先这个函数需要<algorithm>文件头 ####重点它的格式是count(begin(),end(),value)如#include <iostream>#include <algorithm>...原创 2020-04-11 17:08:07 · 281 阅读 · 0 评论 -
2.22题目
#include<cstdio>int main(){ char c1[3],t,a,b,c; scanf("%s",c1); a=c1[0]; b=c1[1]; c=c1[2]; if(a>b) { t=a; a=b; b=t; } if(a>c) {...原创 2020-02-23 10:00:51 · 190 阅读 · 0 评论 -
递归篇 3
题目大意给定一排长度为N(0<N<40)的方格,向里面填入a,b,c三个数。要求仅数字C不能相邻。问:N个格子有几种填数方法思路当只有一个格子的时候就三种方法即F(1) = 3当有两个格子的时候:F(2) = 8,这个答案固然可以通过列举得到,但怎么通过上一个状态去得到本状态呢?分析每一个状态无非是通过上一个状态的其中一种情况得来的。无非是最后一个数字是C与否...原创 2020-04-11 17:09:52 · 136 阅读 · 0 评论 -
某个递归题引发的思考
题目大意给定一排长度为N(0<N<=50)的方格,向里面填入a,b,c三个数。要求任何相邻的方格数字不能相同,且首尾两格也不能相同。问:N个格子有几种填数方法方法一(玄学大法)首先进行暴力循环求结果得:1 : 32 : 63 : 64 : 185 : 306 : 667 : 126考虑到每一个数字开头都一样这里除以三发现:1 : 12 : 23 :...原创 2020-02-20 17:27:12 · 142 阅读 · 0 评论 -
从斐波那契数列了解递归
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …如果设F(n)为该数列的第n项(n>=3),那么这句话可以写成如下形式:F(n)=F(n-1)+F(n-2)問題がある:给定一个整数n,如何去求F(n)?由上面的式子可知:当n>=3的时候该式子成立,那当n=1或n=2的时候呢?由上面的数列可知:F(1) = 1,F(...原创 2020-01-10 16:46:59 · 473 阅读 · 1 评论 -
部分排序算法的实现
前言讲述部分排序算法的实现与利弊我认为你们掌握冒泡排序,归并排序,快速排序这三种足以冒泡排序概念:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现他们的排序与排序要求相反时,就将他们互换。代码实现#include <cstdio>int a[11] = {0,7...原创 2020-01-09 22:07:59 · 283 阅读 · 0 评论 -
如何入手ACM(新手高阶篇)
前言基本上所有基础的内容都交给你了,就剩下一个字符串没讲了。在c语言中是没有字符串这个东西的,我们只能用字符数组来存储一个字符串。但是在c++中我们可以直接定义一个字符串类型的变量,这两个是不同的。本章主要讲字符数组。字符的输入与输出c语言写法#include <cstido>#include <cstring>char x;char a[100];...原创 2019-11-28 20:17:23 · 270 阅读 · 0 评论 -
选拔试题题解
前言这些题目已经很简单了,你们主要的问题还是在语法上没有掌握该怎么去写。第一题不就是个简单的a+b吗,没什么要讲的吧,把这个格式记住了。#include <cstdio>int a,b;int main(){ scanf("%d%d",&a,&b);//输入/给变量赋值 printf("%d",a+b);//输出 return 0;}注意了:以...原创 2019-11-27 18:41:24 · 290 阅读 · 0 评论 -
NOIP2017 时间复杂度题解
前言两年了。向那段拼搏的时光致敬。分析题目链接:时间复杂度题目看似简单却陷阱重重,当时的我因为没有考虑到回溯的问题只拿到了40分。心痛。题目自己去看,我先分析一下思路如果x!=n & y=n —>答案加一。如果(x=n & y!=n )或(x=C & y=C & x>y)–>错误的循环,他下面的循环都无效其他情况–>答案不变...原创 2019-11-22 07:18:49 · 378 阅读 · 0 评论 -
洛谷P1008 三连击
题目链接:传送门我们来分析分析这个题目的思路:思路一:我们需要三个 数字不重复的 三位数使得其为1:2:3假设这三个数字为a,b,c。反正只是三位数,也就是从100-999,我们把a,b,c都循环一遍判断其中有无重复的数字不就行了?这样可以,计算量也就是(999-100+1)^ 3 = 7 2900 0000次运算,不过有点太大了。那么我们有没有更好的方法去优化一下呢?あるんだよ!...原创 2019-11-18 01:14:32 · 237 阅读 · 0 评论 -
如何入手ACM(新手进阶篇)
前言经过这一段时间的学习,相信你们起码写个a+b是没有问题了。下面给大家再解除一层封印:判断语句与循环语句我是按照洛谷训练新手村的顺序跟你们讲的。以后基本不会写完整的代码,全是代码片段,你们自己完善。判断语句判断语句总体上可分为两类:if……else型和switch型,记住:问题基本用if……else就能解决,我从未用过switch。>>> if……elsec语言是...原创 2019-10-30 20:29:25 · 700 阅读 · 0 评论 -
洛谷P1126 机器人搬重物题解
我太难了qwq肝了两天,重构了一次代码。真的很菜。算法标签:广搜题目链接:https://www.luogu.org/problem/P1126这题最坑的是:输入的是格子,不是点!!!需要把他转化成点图 for(i=1;i<=n;i++) for(j=1;j<=m;j++) { bool a; cin>...原创 2019-10-12 20:55:46 · 3282 阅读 · 0 评论 -
洛谷P1023 税收与补贴问题 解题全过程
题目链接:https://www.luogu.org/problem/P1023实不相瞒,我连题目都没看懂,看完这个讲解才明白的。。。https://www.luogu.org/discuss/show/119090再吐槽一句:此题数据好弱。。。思路:将给的数据放进一个结构体,第零个位置是成本价,后边的全是样例给的数据,然后按照单价进行排序,小在上大在下,再像讲解里那样把剩余的数据给补齐。...原创 2019-10-11 17:01:18 · 266 阅读 · 0 评论 -
C++ 中对于sort函数的cmp参数的注意事项
今天刷一道题目的时候用到了sort函数,结果被蒟蒻的自己搞疯了。简单总结一下sort函数几个注意事项:1)头文件 algorithm 要加上2) sort(a+(0/1),a+n,cmp)//看你数组起始与结尾数据的位置3)你的cmp函数一定要在每个节点都加一个return,不然就会出现上面那张图片的问题!!!以上。...原创 2019-08-14 00:29:43 · 1465 阅读 · 1 评论 -
洛谷 P1047 校门外的树 python题解
最近在学习python3,学习语言最好的方法当然是竞赛题刷刷刷啦题目连接:https://www.luogu.org/problem/P1047思路:把被覆盖的线段的两个端点分别放入两个list中,每次有新的点进来的时候先与原来的点对比一下。有没有重叠的地方,有就合并,没有就添加。最后减去每条线段上的数值就是ans啦代码如下// An highlighted blockli=input(...原创 2019-07-28 23:37:10 · 1232 阅读 · 0 评论 -
洛谷 P2141 珠心算测验 python题解
题目链接:https://www.luogu.org/problem/P2141思路:把数据存在list中在set中也备份一下,两个for循环计算相加数字,在set中存在也就是符合题意的数据再存到另一个set中,最后set的长度就是我们要的ans代码:// An highlighted blockn=input().split()l=input().split()s=set(l)l...原创 2019-07-29 15:35:26 · 735 阅读 · 0 评论 -
mingw安装
安装选择安装路径等待basic的 全部勾上把有g++ gdb gcc的全部勾上installation -->apply change–>apply然后接着等待原创 2019-10-08 13:19:04 · 194 阅读 · 0 评论 -
如何入手ACM(新手入门篇)
c语言入门说明标准代码说明这篇文章不面向大多数人,仅写给我19看的。标准代码#include <stdio.h>//c语言标准输入输出库,必须有int main(){ printf("hello world"); return 0;}...原创 2019-10-08 13:20:37 · 2803 阅读 · 4 评论