
CS精英挑战营
fengbinstudying
这个作者很懒,什么都没留下…
展开
-
矩阵hash 习题
描述给定两个矩阵,判断第二个矩阵在第一个矩阵的哪些位置出现过。输入输入的第一行包含四个正整数a,b,c,d,表示第一个矩阵大小为a×b,第二个矩阵的大小为c×d。接下来是一个a×b的矩阵。再接下来是一个c×d的矩阵。保证矩阵中每个数字都为正整数且不超过100。输出若第二个矩阵在第一个矩阵的(i,j)位置出现(即出现位置的左上角),输出i和j。若有多个位置,按字典序从小到大的顺序依次...原创 2019-08-17 20:25:26 · 376 阅读 · 0 评论 -
计算几何(一) by 邓俊辉老师
计算几何诞生于上世纪八十年代中后期。在竞赛中考察概率不高,因为不易编成竞赛题,但是遇到的情况会非常多。计算几何的特点 - 注重于符号 仅有加法乘法没有除法in-Triangle Test每三个点(P、Q、R)确定一个三角形。如何判断第四个点,落在三角形内部还是在三角形外部。正确且简洁的办法。做一条射线,穿越奇数词(odd)在内部;穿越偶数次(even 0,2)在外部。要用到分而治之和...原创 2019-08-07 21:11:34 · 3478 阅读 · 4 评论 -
倒水问题BFS CS精英挑战营
倒水问题问题分析操作分类:本质上是六种操作。如果采用暴力枚举的方法,O(6^t) (t<=4 可以用搜索算法)采用动态规划算法。 与记忆化搜索类似。通过搜索算法去优化。 只要A杯水u中和B杯水v中的量是相同的,并且操作数为i,dp[i][u][v],那么就可以认为是相同的状态。dp[i+1][x][y] 来表示下一次可以到达的水量x,y。 若为零则表示不能到达。若为一,则表示...原创 2019-08-09 21:07:04 · 533 阅读 · 0 评论 -
散列 桶排序 最大间隙 基数排序 bitmap by邓俊辉老师
散列call by value 通过值去索引。java 中有 HashMap散列 和 Hashtable散列表 利用key-value pair存到相应的位置。python 中有 dictionary字典 利用hashtable数据结构和算法是硬币的两面。数据存储的问题???1、space 空间大小,效率。2、time 需要做一个初始化。for… memset…哈希算法:如果...原创 2019-08-06 21:36:21 · 685 阅读 · 0 评论 -
计算几何(二) by邓俊辉老师
凸包算法 最简。极点算法—极边算法—incremental javis march or 类似于insertion sort更快地 O(nlogn) R.Graham Scan 线性时间进行扫描就可以了。sort all vertices by polar angle 。关于LTL lowest then leftmost 根据他们的极角进行排序。实际上不用算出每一个角度。无非是对每一个...原创 2019-08-08 22:17:10 · 1048 阅读 · 1 评论 -
凑零钱 母函数 cs精英挑战营习题
代码参考博客:http://blog.youkuaiyun.com/xiaofei_it/article/details/17042651//母函数即生成函数#include <stdio.h>#include <string.h>#include <iostream>using namespace std;/*v[i]表示该乘积表达式第i个因子的权重,...原创 2019-07-28 13:43:39 · 241 阅读 · 0 评论 -
字符串匹配 蛮力搜索 KMP BC GS 数据结构Trie by邓俊辉老师
字符串:一连串的字符连在一起。是一种线性结构。仅能存储字符集。特点:非常长、比一般的线性序列长一些。call by pattern 根据模式进行访问。子字符串substr(i,k)=S[i,i+k) 左闭右开。一共k个字符 与 subseqence 子串 不同 前者更多是一些切片slice,后者就是一些子串。substring的特例:前缀prefix(k)=S[0,k)和后缀suff...原创 2019-08-05 21:35:50 · 590 阅读 · 0 评论 -
搭积木 求组合数 CS精英挑战营习题
#include <stdio.h>#include <iostream>using namespace std;#define P (1000000000+7)int b[2][2000];int C(int n , int m){ bool cur = 1, last = 0; for(int i=0; i<=n; i++) ...原创 2019-07-28 11:52:22 · 174 阅读 · 0 评论 -
重编码-k cs精英挑战营 Huffman树/编码构造
#include <queue>#include <cstdio>#include <vector>#include <stdlib.h>using namespace std;typedef long long LL;// =================== 代码实现开始 ========================...原创 2019-07-27 20:59:32 · 165 阅读 · 0 评论 -
背包问题 变式 DP
如果单独将某个物品去除,每次做一个01背包。时间复杂度为O(nqnv)如果将其拆分为,两个体积为V1、V2的背包。采用前缀背包和后缀背包。拆成两部分#include <stdio.h>#include <utility>#include <math.h>#include <algorithm>#include <string....原创 2019-08-10 19:15:03 · 436 阅读 · 0 评论 -
奶牛吃草 DP
奶牛吃草时间限制:4 sec空间限制:256 MB问题描述有一只奶牛在一条笔直的道路上(可以看做是一个数轴)。初始,它在道路上坐标为 K 的地方。这条道路上有 n 棵非常新鲜的青草(编号从 1 开始)。其中第 i 棵青草位于道路上坐标为 x[i] 的地方。贝西每秒钟可以沿着道路的方向向前(坐标加)或向后(坐标减)移动一个坐标单位的距离。它只要移动到青草所在的地方,就可以一口吞掉青草,它...原创 2019-08-10 19:39:47 · 926 阅读 · 0 评论 -
最长公共子序列实质(LIS)最长递增子序列 nlogn做法
最长公共子序列时间限制:1 sec空间限制:256 MB问题描述给定两个 1 到 n 的排列 A,B (即长度为 n 的序列,其中 [1,n] 之间的所有数都出现了恰好一次)。求它们的最长公共子序列长度。输入格式第一行一个整数 n ,意义见题目描述。第二行 n 个用空格隔开的正整数 A[1],…,A[n],描述排列 A。第三行 n 个用空格隔开的正整数 B[1],…,B[n],描...原创 2019-08-10 20:09:43 · 440 阅读 · 0 评论 -
基数排序 习题
基数排序时间限制:10 sec空间限制:1 GB问题描述给定 n 个 [0,2^k) 之间的整数,请你将它们升序排序。由于 n 可能很大,为了避免过大的输入、输出规模,我们会在程序内部生成数据,并要求你输出排序后序列的哈希值。具体方法如下(用c++代码展示):typedef unsigned int u32;u32 nextInt(u32 x){x^=x<<13;x^...原创 2019-08-17 19:37:47 · 1035 阅读 · 0 评论 -
KMP算法。习题两道循环节&字符串匹配。cs精英挑战营
循环节由Next表可知。#include <cstdio>#include <cstring>#define maxl 1000000void getNext(char * s, int len, int next[]){ int t=next[0]=-1; int j=0; do ( 0>t || s[j]=...原创 2019-08-16 21:26:30 · 233 阅读 · 0 评论 -
TRIE树 习题-前缀
前缀 CS精英挑战营,trie树典型题#include <cstdio>#include <cstring>#include <iostream>using namespace std;// ================= 代码实现开始 =================const int M = 505, L = 1000005;//...原创 2019-08-16 19:46:25 · 211 阅读 · 0 评论 -
邓公总结课
python listpython 语法一般从list开始讲起。list 插入、删除元素比较容易,查找比较慢。两种对list进行翻转操作。def reverse_1(L){ lo,hi = 0, len(L)-1 #从首末元素开始 平行赋值 while lo<hi #依次令对称元素 L[lo],L[hi] = L[hi], L[lo] #互换,然后 lo,hi = ...原创 2019-08-25 16:57:35 · 513 阅读 · 0 评论 -
组合数学复习
1、排列和组合计数基本原理,加法法则和乘法法则无重复无遗漏排列 组合排列可重排列 mulitiset 依赖于无限集26个英文字母能组成多少4位数的字符串 26的四次方26个英文字母能组成多少4位数的字符串,其中每位字母不相同 P(26,4)26个英文字母能组成多少4位数的字符串,其中每位字母不相同且b和d不相邻容斥原理去除bd相邻的情况 C(24,2)*3!*2多重 所...原创 2019-08-25 12:18:41 · 780 阅读 · 0 评论 -
凸包模板
凸包描述给定n个二维平面上的点,求他们的凸包。输入第一行包含一个正整数n。接下来n行,每行包含两个整数x,y,表示一个点的坐标。输出令所有在凸包极边上的点依次为p1,p2,…,pm(序号),其中m表示点的个数,请输出以下整数:(p1 × p2 × … × pm × m) mod (n + 1)样例1输入107 9-8 -1-3 -11 4-3 96 -47 56...原创 2019-08-20 20:01:59 · 343 阅读 · 0 评论 -
判断点是否在凸包内
周测5描述二维平面上,给定n个点{ai}和m个点{bi},且保证这n+m个点中,任意两个点的x坐标或y坐标均不相同。对于每个bi,判断是否存在由3个ai,aj,ak(1≤i,j,k≤n,i≠j≠k)点组成的三角形包含bi(在三角形边上也算包含;允许三点共线的三角形,此时只有bi在三点中任意两点的线段上才算包含)。输入第一行为一个整数n。接下来n行,其中第i行有两个整数,表示ai的横纵坐标...原创 2019-08-20 19:54:58 · 4759 阅读 · 0 评论 -
小棕圈地 凸包旋转卡壳
小粽圈地问题描述小粽家里有一块地,地上有 n 个木桩。小粽家的地可以看作是一个平面,并且小粽知道每个木桩的坐标 (xi,yi)。小粽很喜欢四边形,现在她想从这些木桩中选出 4 个来围成一个四边形(这个四边形为简单多边形,即每条边不能和自己相交,但不一定要为凸四边形),并使得这个四边形的面积最大。请你帮小粽算出这个最大值是多少。输入格式第一行一个正整数 n 表示木桩的大小。接下来 n 行...原创 2019-08-20 16:39:45 · 315 阅读 · 0 评论 -
排序二叉树 构建与遍历 cs精英挑战营 习题
#include<stdio.h>#include<iostream>#include<vector>using namespace std;const int N = 100001;// 排序二叉树,左小右大struct node{ int val,l,r;}t[N];//利用结构体数组来形成二叉树的数据结构/*java 语言...原创 2019-07-27 20:46:05 · 129 阅读 · 0 评论 -
全排列 by马昱春老师
全排列。递归普通递归,新加入的数字在中间穿梭递归算法存在爆栈的问题利用深度优先搜索DFS的递归方式。1-n的排列的一一对应,存在一种顺序关系。字典序法排列是有续的,除去最后一个排列中,都有前驱。除去第一个排列,都有后继。所谓一个的下一个,就是折光仪he一个字符串与下一个有尽可能长的共同前缀,也即变化尽可能限制在尽可能短的后缀上。123 132 213 231 312 321如...原创 2019-08-06 09:45:07 · 341 阅读 · 0 评论 -
周测1最大字典序出队。但是进队只能从尾部进 cs精英挑战营
//#include <bits/stdc++.h>#include <queue>#include <deque>#include <vector>#include <stdio.h>using namespace std;// ================= 代码实现开始 =================//...原创 2019-07-25 00:49:57 · 228 阅读 · 0 评论 -
图搜索 (BFS广度优先搜索 DFS宽度优先搜索)by 邓俊辉老师
广度优先搜索BFSBreadth First Search以s为中心,每一单位时间向外传递。以草和火种作为比喻,源头为火种,待点燃的点为草。每单位时间向外蔓延一个单位。前锋面越来越大在图搜索的过程中在模拟这个火种蔓延过程。注二叉树的层次遍历也是有顺序的。图搜索模板:first in first out - queue 每一个前锋面都排成一个队列,先进先出template<t...原创 2019-07-29 21:59:06 · 713 阅读 · 0 评论 -
数据结构&贪心算法(一) by邓俊辉老师
前言:1、大O记号(Big-O)消耗的资源越少越好。时间&空间越少越好。先研究时间T(n):将常系数、低次项忽略。2、数据结构线性结构数组Array: A[n] A[0,n) 长度为n A[lo,hi) low-high 左闭右开 右减左即元素个数向量vector:O(1)时间即可取出该元素、查找快、插入删除元素慢 call by rank列表list:逻辑依然相连...原创 2019-07-17 21:27:44 · 469 阅读 · 1 评论 -
过河问题 (人、狼、羊、菜) cs精英挑战营 OJ c++
#include<iostream>#include<iomanip>using namespace std;struct state{int H,W,S,V;};state s[20]; //记录状态转移过程,原案的数量int choice[20] = {0}; //记录状态转移过程的决策号int k;state d[5]={{0,0,0,0},{1...原创 2019-07-17 15:50:19 · 944 阅读 · 0 评论 -
中位数 cs精英挑战营 OJ
#include <queue>#include <cstdio>using namespace std;/* ===================== 代码实现开始 =================== */typedef priority_queue<int, vector<int>,less<int> > Big...原创 2019-07-23 23:53:00 · 151 阅读 · 0 评论 -
分组 CS精英挑战营 习题
分而治之#include <bits/stdc++.h>using namespace std;// ================= 代码实现开始 =================/* 请在这里定义你需要的全局变量 */// 将所给数组分成连续的m份,使得数字之和最大的那一份的数字之和最小// n:数组大小// m:题中的m// a:所给数组,大小为n/...原创 2019-07-29 00:26:39 · 308 阅读 · 0 评论 -
分而治之 by邓俊辉老师 主定理 最大子序和 归并排序 众数 linearselect diameter cloest pair
分而治之divide and conquer将一个问题分成两个子问题。两个问题的规模相当、两个子问题加起来的规模不能比原规模大。最好两个子问题不相关。如果两个子问题耦合性太强那么可以考虑动态规划。分而治之不得不利用递归。其算法性能的描述:T(n) = a*T(n/b) + O(f(n))f(n) 包含了上层的divide和merge a个子问题。Master Theorem:主定理...原创 2019-07-23 22:23:52 · 1195 阅读 · 0 评论 -
动态规划 by邓俊辉老师 fibonacci 快速幂 最短向上路径 最长曼哈顿道路 最长公共子序列 背包问题 传递闭包 任何两点最短路径
分而治之也是存在前提的。 分而治之是一种递归问题可以分,分出来的规模也差不多。分出来的问题,是彼此不相关的,相互独立的。可以分而治之。但是存在一些不是相互独立 的子问题。会造成工作量的爆炸。呈指数级别增加。但是动态规划能够有效发现这类问题,但不能够解决全部此类问题。DP是把递归的思路反向变为递推。最优化子结构。#也是一种贪心Fibnacci:recursion斐波那契数列。每隔一个月就可...原创 2019-07-30 21:32:16 · 618 阅读 · 2 评论 -
抽象思维&OOP面对对象程序设计 by徐明星老师
抽象思维:提取共性,应对变化用于做程序设计维护、应用。。抽象:认识和表达世界对比算法,发现共性对比下楼问题和跳马问题下楼问题与跳马问题 见https://blog.youkuaiyun.com/weixin_43829465/article/details/96004805两个问题的差异:1、是否达到目标;2、新位置的计算(高度、落点坐标);3、判断是否合法#include<iostrea...原创 2019-07-16 21:16:30 · 227 阅读 · 0 评论 -
等式 清华OJ 训练营 c++实现
等式描述有n个变量和m个“相等”或“不相等”的约束条件,请你判定是否存在一种赋值方案满足所有m个约束条件。输入第一行一个整数T,表示数据组数。接下来会有T组数据,对于每组数据:第一行是两个整数n,m,表示变量个数和约束条件的个数。接下来m行,每行三个整数a,b,e,表示第a个变量和第b个变量的关系:若e=0则表示第a个变量不等于第b个变量;若e=1则表示第a个变量等于第b个变量...原创 2019-07-23 12:08:28 · 369 阅读 · 0 评论 -
铺路 CS精英挑战营习题
七种方法图解:/*题解:先得到递推关系式f(n)=f(n-1)+f(n-2)*6用f(n)表示3*n的地板的方案数,它可以这样铺:第i列只用1*1的块,那么只有一种方案,也可以i和i-1列一起用2*2与1*1的块铺,或者用2*2的三角和1*1的块铺,这样有6种可能。然后得到f(n)+2f(n-1)=3(f(n-1)+2f(n-2))得到f(n)+2f(n-1)关于3^n的表达式...原创 2019-08-04 19:58:31 · 439 阅读 · 0 评论 -
堆&减而治之-最短路径(Dijkstra) by邓俊辉老师
数据结构(三)堆实际上是一种特殊的树。是一种几乎完美的树也就是一种完全二叉树完全二叉树只能在最底层&次底层出现不满的叶子节点,最底层必须在左边。满二叉树,每一层都是满的。堆的好处,对于顺序存储的堆——父节点k:左孩子2k+1,右孩子2k+2。即LC(k)=(k<<1)+1 RC=(k+1)<<1对堆的操作——insert(e)、getMax() ...原创 2019-07-22 21:53:25 · 501 阅读 · 1 评论 -
站队 第一类斯特林数 csJ精英挑战营习题
利用第一类斯特林的通项公式求解S(n,k)=S(n−1,k−1)+S(n−1,k)∗kS(n, k)=S(n-1, k-1)+S(n-1, k) * kS(n,k)=S(n−1,k−1)+S(n−1,k)∗k#include <stdio.h>#include <iostream>using namespace std;#define P (1000000000...原创 2019-07-31 14:02:27 · 208 阅读 · 0 评论 -
k小数 CS精英挑战营
求第k大的数据类似于快排。但是求第k个的递归子问题只有一个。#include <cstdio>#include <cstdlib>#include <cassert>#include <iostream>template<typename T>inline void swap(T& a, T& b){...原创 2019-08-03 20:07:08 · 197 阅读 · 0 评论 -
序列计数 CS精英挑战营习题
序列计数描述给定一个n个整数的序列以及一个非负整数d,请你输出这个序列中有多少个连续子序列(长度大于1),满足该子序列的最大值最小值之差不大于d。连续子序列:序列1 2 3中长度大于1的连续子序列有:1 22 31 2 3输入第一行包含两个整数n,d。接下来一行包含n个整数。输出输出一个整数,表示满足条件的连续子序列个数。样例1输入8 55 5 4 8 -10 10 0...原创 2019-08-03 19:45:03 · 329 阅读 · 0 评论 -
kruskal算法实现 —c++ 最小k生成森林问题 cs精英挑战营 柿子问题
//#include <bits/stdc++.h>#include <stdio.h>#include <vector>#include <iostream>using namespace std;// ================= 代码实现开始 =================#define MAXN 100000+10...原创 2019-07-25 21:43:51 · 366 阅读 · 0 评论 -
计算思维 by徐明星老师 逻辑推理、下楼、跳马、分书、八皇后、人鬼过河
任务1.1 谁做的好事A:不是我B:是CC:是DD:他(C)胡说四个人只有一个人做了好事。三个人说真话,一个人说假话。请判断谁做了好事。布尔代数(离散数学):将自然语言转换为机器语言(关系表达式)。用ABCD代表四个人A:不是我 thisman != ‘A’B:是C thisman = = ‘C’C:是D thisman = = ‘D’D:他...原创 2019-07-15 21:57:10 · 933 阅读 · 1 评论 -
数据结构&贪心(二) by邓俊辉老师
数据结构&贪心(二)BST binary search tree 二叉搜索树对一个二叉搜索树,从根节点开始比较大小搜索。任意节点:左后代比根节点小、右后代比根节点大。左小右大。BBST:balanced binary search tree 平衡二叉树。对于深度比较深的节点,步骤会比较多一些。对于树进行平衡化,深度比较平均散列表-哈希表 hashtable怎么去做这么一个映...原创 2019-07-18 21:32:49 · 410 阅读 · 0 评论