常见算法
不哭的超人
愿你孤独的努力终有回报,愿你前行的路上有人相伴。
展开
-
P3367 【模板】并查集~~手动模拟~~
题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入输出格式输入格式:第一行包含两个整数N、M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数Zi、Xi、Yi当Zi=1时,将Xi与Yi所在的集合合并当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N输出格式:如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N输...原创 2020-10-19 15:32:28 · 269 阅读 · 0 评论 -
完全背包
题目描述一个旅行者有一个最多能装M公斤的背包,现在有n种物品,每件物品数量无限的,它们的重量分别是wi,它们的价值分别是vi元。从中选取若干件(同一物品可以选任意件),求旅行者能获得最大总价值。输入第1行:两个整数,M背包容量(M<=1000)和n物品数量(n<=30);第2至n+1行:每行两个整数wi,vi,表示每个物品的重量和价值。输出一个数,表示最大总价值。样例输入...原创 2019-04-18 23:11:39 · 116 阅读 · 0 评论 -
P1060 开心的金明(01背包)
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的NN元。于是,他把每件物品规定了一个重要度,分为55等:用整数1-51−5表示,第55等最重要。他还从因特网上查到了每件物品的价格(都是整数元...原创 2019-04-15 11:55:26 · 109 阅读 · 0 评论 -
P3375 【模板】KMP字符串匹配
题目描述如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。为了减少骗分的情况,接下来还要输出子串的前缀数组next。(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)输入输出格式输入格式:第一行为一个字符串,即为s1第二行为一个字符串,即为s2输出格式:若干行,每行包含一个整数,表示s2在s1中出现的位置接下来1行...原创 2020-10-19 15:28:07 · 138 阅读 · 0 评论 -
P1226 【模板】快速幂||取余运算
题目描述输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。输入输出格式输入格式:三个整数b,p,k.输出格式:输出“b^p mod k=s”s为运算结果输入输出样例输入样例#1:2 10 9输出样例#1:2^10 mod 9=7/*快速幂*/#include <bits/stdc++.h>using namespace std...原创 2019-04-07 00:39:27 · 133 阅读 · 0 评论 -
快速排序。
归并排序是每一次的递归调用会确定正确排序中的一个值。然后这时只确定了个元素的位置。再通过fun(left,i-1);fun(i+1,right);确定这个元素两边的正确排序的位置#include <bits/stdc++.h>using namespace std;int a[5005];int fun(int left,int right){ if(left ...原创 2019-03-18 18:47:42 · 169 阅读 · 0 评论 -
括号匹配(C++栈)
判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", “]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。将”(“, , “[”, , “{“,逐个的进行压栈,分别遇到)] } 就将栈中的括号弹出。到最后判断栈中是否还有元素,如果还有元素,则说明不匹配做了7遍#include &lt;bits/stdc++.h&gt;#include &...原创 2019-03-18 12:42:27 · 490 阅读 · 0 评论 -
归并排序
按照程序走一遍mergesort函数的作用就是将数组不停的二分,直到分到left~midmid+1~right 各自只有一个单元素。接下来就是合并,left~midmid+1~right 这两部分在b数组中重新排序了。当然要放回原来的a数组中,a数组这时的起点是left这个图能表现出来#include <bits/stdc++.h>using namespace st...原创 2019-03-17 20:03:53 · 211 阅读 · 0 评论 -
哈希排序
#include <stdio.h>int a[999999];int ans = -1;int main(){ int n; scanf("%d",&n); for(int i = 1;i <= n;i++){ int x; scanf("%d",&x); if(x+n > ans){ ans = x+n; } a[...原创 2019-07-14 19:58:01 · 173 阅读 · 0 评论