#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 100010; int n, m; int h[N], e[N], ne[N], idx; int d[N],q[N]; int ans = N; v
#include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 100010, M = N * 2; int n; int h[N], e[M], ne[M], idx; bool st[N]; int ans = N;
宽度优先搜索 BFS 边权都为1,可以搜到最短路,一层一层搜索#include <iostream> #include <algorithm> #include <cstring> using namespace std; typedef pair<int, int> PII;
代码:// 第一种搜索顺序 #include <iostream> using namespace std; const int N = 20; int n; char g[N][N]; bool col[N], dg[N], udg[N]; void dfs(int u) { if(u == n) { for(int i = 0; i
给定一个整数n,将数字1~n排成—排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7#include <iostream> using namespace std; const int N = 10; int n; int path[N]; bool st[
给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2yr2,请你判断[L4 , r1]和[s, z这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l, r1,l2,r2,表示一次询问所涉及的两
n的二进制表示 第k位 是 几①先把第k位移到最后一位: n >> k②看个位是几: & 1n >> k & 1lowbit(x) :返回x的最后一位1 是多少 例如 1010 ---> 10, 101000 --->1000实现 : x & -x = x & (~x + 1)例: 输入一个数组返回数组中每个元素二进制形式中1的
用途:邻接表: 1.存储图 2. 存储树head - > 空 //head 为头指针head -> (val,*next) -> (val,*next) -> (val,*next)->空e[N] 表示值 ne[N] 表示指针实现一个单链表,链表初始为空,支持三种操作:(1)向链表头插入一个数;(2)删除第k个插入
数组 a1 a2 ... an 前缀构造 b1 b2 ... bn 差分使得 ai = b1 + b2 + ... + bi即 b1 = a1 b2 = a2 - a1 b3 = a3 - a2 ... bn = an- an-1an 是 bn 的前缀和, bn 是 an 的差分// 一维数
数组an a1 a2 ... an前缀和 Si = a1 + a2 + ... + ai①如何求②作用// 一维数组前缀和的计算 #include <iostream> using namespace std; const int N = 100010; int a[N], s[N]; int n, m; int main() { scanf("%d%d", &am
①确定分界点 mid = (l+r)/2②递归排序left right 左右两个数组③归并排序 合二为一 ★#include <iostream> using namespace std; const int N = 1e6+10; int n; int q[N], tmp[N]; void merge_sort(int q[], int l, int r) { if (l
给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i]+B们]= x的数对(i, j)。数据保证有唯一解。输入格式第一行包含三个整数n,,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数,表示数组B。输出格式共一行,包含两个整数i和j。#include <iostream> using names
substr() c_str() size()/length() empty() clear() #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <ve
STLvector 变长数组 倍增的思想 (系统为某一程序分配空间时,所需时间与空间大小无关,与申请请求次数有关)size() empty() clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运算#include <iostream>
维护一个集合,支持如下几种操作:1."I ×”,插入一个数x;2."Q ×”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为"I ×”,"Q ×"中的一种。输出格式对于每个询问指令“Q ×”,输出一个询问结果,如果x在集合中出现过,则输出"Yes”,否则输出"No"”。每个结果占一
输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共—行,包含m个整数,表示整数数列中前m小的数。数据范围1 ≤m ≤ n ≤ 10^51≤数列中元素≤10输入样例:5 3 4 5 1 3 2输出样例:1 2 3代码:#include <iostream> using namespace std; con
—共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:1."Mab”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;2."Qab”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为"M a b"或"Q a b”中的一种。输出格式对于每个询问指令"Qa b”,
维护一个字符串集合,支持两种操作:"I x"向集合中插入一个字符串x;"Q ×"询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为"l ×"或"Q ×"中的一种。输出格式对于每个询问指令”Q x”,都要输出一个整数作为结果,表示x在集合中出现的次数。每个结果占一行
题目要求:给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串M。输出格式共一行,输出所有出现位置的起始下标(下标从0开始计数)整数之间用空格隔开。数据范围1≤N≤
单调栈:给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤10^51≤数列中元素≤10^9输入样例:5 3 4 2 7 5输出样例:-1 3-1 2 2代码:#include &
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号