BFS
走迷宫给定一个 n×mn×m 的二维整数数组,用来表示一个迷宫,数组中只包含 00 或 11,其中 00 表示可以走的路,11 表示不可通过的墙壁。
最初,有一个人位于左上角 (1,1)(1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。
请问,该人从左上角移动至右下角 (n,m)(n,m) 处,至少需要移动多少次。
数据保证 (1,1)(1,1) 处和 (n,m)(n,m) 处的数字为 00,且一定至少存在一条通路。
输入格式第一行包含两个整数 nn 和 mm。
接下来 nn 行,每行包含 mm 个整数(00 或 11),表示完整的二维数组迷宫。
输出格式输出一个整数,表示从左上角移动至右下角的最少移动次数。
数据范围1≤n,m≤1001≤n,m≤100
输入样例:5 50 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0
输出样例:8
#include<bits/stdc++.h>#define x first#define y secondusing namespace std;const int N = ...
双指针与前缀和
最长连续不重复子序列给定一个长度为 nn 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入格式第一行包含整数 nn。
第二行包含 nn 个整数(均在 0∼1050∼105 范围内),表示整数序列。
输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。
数据范围1≤n≤1051≤n≤105
输入样例:51 2 2 3 5
输出样例:3
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N=1e6;ll q[N], c[N];ll n;int res;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1; i<=n; i++){ cin>>q[i]; } for(int i=1, j=1; i<=n; i++) ...
二分
模板数组: 3 4 4 5 5 5 6 7
找到第一个大于5的元素
// 数组下标从1开始bool isBlue(int x){ if(x<=5) return true; else return false;}int l=1, r=9; while(l+1!=r){ int mid = (l+r)/2; if(isBlue(q[mid])){ l=mid; }else{ r=mid; }}return r;
找到最后一个小于等于5的元素的位置(下标)
// 数组下标从0开始bool isBlude(int x){ if(x<=5) return true; else return false;}int l=-1, r=8;while(l+1!=r){ int mid = (l+r)>>1; if(isBlue(q[mid])){ l=mi ...
DFS
跳台阶一个楼梯共有 nn 级台阶,每次可以走一级或者两级,问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。
输入格式共一行,包含一个整数 nn。
输出格式共一行,包含一个整数,表示方案数。
数据范围1≤n≤151≤n≤15
输入样例:5
输出样例:8
#include<bits/stdc++.h>using namespace std;int f(int n){ if(n==1) return 1; if(n==2) return 2; return f(n-1)+f(n-2);}int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; cout<<f(n)<<endl; return 0;}
递归实现指数型枚举从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式输入一个整数 nn。
输出格式每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰 ...
模拟基础
输入输出cin/cout 与 scanf/print
万能头文件#include
cin 与 cout 是 C++ 提供的函数输入输出方便但速度较慢,所以需 要用指令进行输入输出加速,切记使用加速命令后不要同时使用 cin/cout 与 scanf/printf
#include<bits/stdc++.h>using namespace std;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int x, y; cin >>x >> y; cout << y << endl << x; return 0;}
scanf 与 printf 其实是 C 语言提供的函数。大多数情况下,它们 的速度比 cin 和 cout 更快,并且能够控制输入输出格式
%s 表示字符串。
%c 表示字符。
%lf 表示双精度浮点数 ( double ) 。
% ...
淘最热点
前置知识SHA-1算法SHA1的java实现MessageDigest sha1 = MessageDigest.getInstance("SHA-1");sha1.update("xiaojianbang".getBytes());sha1.digest();
特点摘要长度为160bit
加密后的字节数组可以编码成Hex、Base64
没有任何输入,也能计算hash值
初始化常量0x674523010xEFCDAB890x98BADCFE0X103254760XC3D2E1F0
AES算法根据长度不同,可以分成 AES-128、AES-192、AES-256
AES
密钥长度(比特)
分组长度(比特)
向量长度(比特)
加密轮数
AES-128
128
128
128
10
AES-192
192
128
128
12
AES-256
256
128
128
14
AES的java实现SecretKeySpec key = new SecretKeySpec("1234567890abcdef". ...
初探So
枚举各种枚举导入表通过枚举导入表,可以得到出现在导入表中的函数地址
var imports = Module.enumerateImports("libencryptlib.so");for(var i = 0; i < imports.length; i++){ console.log(JSON.stringify(imports[i]));}
枚举导出表通过枚举导出表,可以得到出现在导出表中的函数地址
var exports = Module.enumerateImports("libencryptlib.so");for(var i = 0; i < exports.length; i++){ console.log(JSON.stringify(exports[i]));}
枚举符号表通过枚举符号表,可以得到出现在符号表中的函数地址
var symbols = Module.enumerateSymbols("libencryptlib.so");fo ...
自定义View1-4Canvas对绘制的辅助
1 范围裁切范围裁切有两个方法: clipRect() 和 clipPath()。裁切方法之后的绘制代码,都会被限制在裁切范围内。
1.1 clipRect()使用很简单,直接应用,记得要加上 Canvas.save() 和 Canvas.restore() 来及时恢复绘制范围。
canvas.save()canvas.clipRect(left, top, right, bottom)canvas.drawBitmap(bitmap, x, y, paint)canvas.restore()
1.2 clipPath()其实和 clipRect() 用法完全一样,只是把参数换成了 Path ,所以能裁切的形状更多一些:
canvas.save();canvas.clipPath(path1);canvas.drawBitmap(bitmap, point1.x, point1.y, paint)canvas.restore()canvas.save()canvas.clipPath(path2)canvas.drawBitmap(bitmap, point2.x, point2.y ...
自定义View 1-3drawText()文字的绘制
1 Canvas 绘制文字的方式Canvas 的文字绘制方法有三个:drawText() drawTextRun() 和 drawTextOnPath()。
1.1 drawText(String text, float x, float y, Paint paint)drawText() 是 Canvas 最基本的绘制文字的方法:给出文字的内容和位置, Canvas 按要求去绘制文字。
val text = "Hello HenCoder"canvas.drawText(text, 200f, 100f, paint)
1.2 drawTextRun()drawTextRun() 是在 API 23 新加入的方法。它和 drawText() 一样都是绘制文字,但加入了两项额外的设置——上下文和文字方向——用于辅助一些文字结构比较特殊的语言的绘制。
额外设置一:上下文。
有些语言的文字,字符的形状会互相之间影响:一个字你单独写是一个样,和别的字放在一起写又是另外一个样。
不过我们就不用管它为什么这么神奇了,也不用替阿拉伯人操心这么复杂的文字他们使用起来会不会很 ...
自定义View2 Paint
自定义View1-2 Paint详解1颜色Canvas绘制的内容,有三层对颜色的处理:
基本颜色:1、Canvas.drawColor/ARGB() –颜色参数 2、Canvas.drawBitmap()–bitmap参数 3、Canvas图形和文字绘制–paint参数。
ColorFilter:Paiint.setColorFilter(CorlorFilter)。
Xfermode:Paint.setXfermode(Xfermode)。
1.1 基本颜色像素的基本颜色,根据绘制内容的不同而有不同的控制方式:
Canvas的颜色填充类方法drawColor/RBG/ARGB() 直接作为参数传入。
drawBitmap()的颜色与bitmap参数的像素颜色相同。
图形和文字(drawCircle()/drawPath()/drawText()…) 在paint参数中设置。
Paint设置颜色的方法有两种:一种是直接用 Paint.setColor/ARGB() 来设置颜色,另一种是使用 shader 来指定着色方 ...