acm基础
饮酒在风里
这个作者很懒,什么都没留下…
展开
-
n皇后问题(c++递归)
#include <iostream>#include <cmath>using namespace std;const int maxn=100;int n,m[maxn],shash[maxn]={0},flag=0;void que(int d){ if(d==n+1) { flag++; return ...原创 2019-03-01 21:06:01 · 1427 阅读 · 1 评论 -
哈希has散列-字符串hash
维护一个集合,支持如下几种操作:“I x”,插入一个数x; “Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“...原创 2019-09-22 13:34:34 · 572 阅读 · 0 评论 -
堆排序&&模拟堆排序
838. 堆排序输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤1051≤m≤n≤105,1≤数列中元素≤1091≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3#i...原创 2019-09-19 21:43:20 · 181 阅读 · 0 评论 -
基础算法-区间合并
#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>#include <vector>using namespace std;#defin...原创 2019-09-14 22:28:15 · 198 阅读 · 0 评论 -
离散化-求区间和
假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所...原创 2019-09-14 22:17:26 · 157 阅读 · 0 评论 -
大数乘法-大数除法模板(高精度)
乘法#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>#include <vector>using namespace std;#d...原创 2019-09-13 16:35:19 · 227 阅读 · 0 评论 -
大数加法-大数减法模板(高精度)
高精度加法#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>#include <vector>using namespace std;...原创 2019-09-13 13:47:32 · 143 阅读 · 0 评论 -
归并排序模板(nlogn)
#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>using namespace std;#define mem(f, x) memset(f,x,s...原创 2019-09-11 19:12:23 · 97 阅读 · 0 评论 -
拓扑排序入门题-B - 产生冠军 (判环,map)
B - 产生冠军有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。球赛的规则如下:如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定...原创 2019-07-10 11:07:20 · 138 阅读 · 0 评论 -
求N的N次方(快速幂取模)
分治算法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。例题:给定一个整数N(N<=1 000 000 000),求N的N次方的最后一个数字。首先,暴力的时间复杂度为O(N),对于较大的N显然太慢。所以我们选取快速幂取模 的方法,基于公式:(a×b)%c=((a%c)×(b%c))%c。时间复杂度为log2 N;#includ...原创 2018-09-21 19:05:35 · 4197 阅读 · 0 评论 -
栈的基本操作 c++
#define MAXSIZE 1000struct stack{ int data[MAXSIZE]; //存储数据的数组 int top; //栈顶}bool empty(stack &s){ return s.top==0; //判断栈是否为空}bool full(stack &s){ return ...原创 2018-09-26 22:15:08 · 1095 阅读 · 0 评论 -
不同进制之间的转换(c++)
#include <iostream>using namespace std;int main(){ int a,b,c; //p进制数转换为q进制数 先将p进制数转化为10进制数再转化为q进制数 cin>>a>>b;//将b进制数转a化为十进制数d int d=0,flag=1; while(a!=0)...原创 2019-03-01 16:57:24 · 558 阅读 · 0 评论 -
查询字符串在N个字符串中出现的次数(恰好由三个大写字母组成)——简单字符串hash
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn=100;char s[maxn][5],temp[5];int hashlist[26*26*26+maxn];//每个字符串由三个大写字母组成,每个字母可以是26个字母...原创 2019-03-01 17:16:09 · 375 阅读 · 0 评论 -
C++递归求Fibonacci斐波那契数列
#include <iostream>using namespace std;//求第n个斐波那契数(从1开始)int Fibonacci(int n){ if(n==1||n==2) return 1; else return Fibonacci(n-1)+Fibonacci(n-2);}int main(){ ...原创 2019-03-01 20:01:46 · 3572 阅读 · 0 评论 -
输出n的全排列(c++)
#include <iostream>using namespace std;const int maxn=100;int n,m[maxn],shash[maxn]={0};void allsort(int d){ if(d==n+1) { for(int i=1;i<=n;i++) { cou...原创 2019-03-01 20:48:53 · 2165 阅读 · 2 评论 -
最小生成树两大常用模板
稠密图: PRIM给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无...原创 2019-09-27 18:09:24 · 460 阅读 · 0 评论