KMP
首先了解两个概念:字符串的前缀集合和后缀集合。比如对于字符串ababacb他的前缀集合为a,ab,aba,abab,ababa,ababac他的后缀集合为b,cb,acb,bacb,abacb,babacb
与低效的暴力算法不同,kmp效率更加的高,它利用到了一个前缀数组的知识点。
CPP标准模板库の打开方式
stl容器的遍历(使用vector数组进行演示):
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
int main()
{
int n; cin >> n;
vector<int> pq;
for(int i = 1; i <= n; i++)
{
int inst;
cin >> inst;
pq.push_back(inst);
}
for(auto i = pq.begin() ; i != pq.end() ; i++)
{
cout << *i << ' ';
}
cout << '\n';
for(vector<int>::iterator it = pq.begin() ; it != pq.end() ; it++)
{
cout << *it &l ...
错题集
搜索:
luogu P1162 填涂颜色:作为一道简单的bfs搜索题,竟然把临界条件给弄错了(开始时候写成了(x >= 0 && x <= n+1 && x >= 0 && y <= n+1)),最后显示暴空间浪费了大量的时间,实在是不应该。
11.19 牛客校赛总结:(2/6/9)花了大量的时间写b,c,d三道题,结果却几乎都是tle,写了一下i题。用的bfs写,结果先是爆栈,又是超时,或许应该考虑双广优化。其次是b题,据说要用到线段树或者树状数组,纯纯のhash表自然鉴定为t。c题用的Omn遍历,结果也是超时,事实上是有On的算法的。d题用到floyd,我没有学,dfs硬存最短路劲,直接费。鉴定为寸寸地飞舞。1 要好好地研究时间复杂度和内存空间的问题,这应该是一个算法竞赛er的基本功2 考虑到双向广搜的优化,关键是如何处理相交的地点3 可以开始研究floyd了,发现会bfs的大概有3/4不会floyd,可以提高自己的竞争力4 对于时间的把控理 ...
python2
https://www.liaoxuefeng.com/wiki/1016959663602400/1017328655674400
reference:https://www.liaoxuefeng.com/wiki/1016959663602400/1017328655674400
高阶函数可以吧函数本身赋值给变量
>>> f = abs
>>> f(-10)
10
如果把abs指向其它的对象,比如令abs=10,就会发现无法通过abs(-10)调用这个函数了,因为abs这个变量已经不指向求绝对值函数而是指向10这个整数。函数名也可以是变量
传入函数既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
一个最简单的高阶函数:
def add(x, y, f):
return f(x) + f(y)
Python内建的filter()函数用于过滤序列。Python内置的sorted()函数就可以对list进行排序。reverse方法可以将列表元素反序len()方法可以检测数组一个维度的元素个数
map的 ...
c++与面向对象编程1
前置全文使用使用visual studio 2022
为什么不建议使用using namespace std;因为这会造成命名空间的污染
比如你在你的一个文件当中引用了stl库和mystl库。你如果预处理声明这两个库的命名空间,之后便不用写std::和mystl::了,这好像很方便。但是有一种情况,比如说这两个库都恰好都包含有vector()这个函数,当你在文件中不加前缀直接使用vector的时候,你难以判断这个vector是对应哪个头文件下的function。而std::vector和mystd::vector就非常直观,这对于代码的可读性,尤其是到了大项目的时候是有很大影响的。所以这是为什么不建议使用using namespace std;
从0重新开始的c++学习之旅C++的基本工作原理以下面最简单的程序为例子。一开始你有一些源文件,上面有你写的文本,这些文本会通过编译器被转换成二进制文件,这个binary可以说某种库,或者是实际的可执行文件excutable。
#include <iostream>
int main()
{
std::cout <&l ...
python入门
前置文字部分几乎都refer自www.liaoxuefeng.com/
笔记用,来自:www.liaoxuefeng.com/和蟒蛇书,自用非原创
python中的一些语法细节
2**10 = pow(2,10); = 1024
a+b = 在没有做int处理的话,经常会发生字符串相加的情况,比如若a=3,b=1则a+b输出31
print()会依次打印每个字符串,遇到逗号“,”会输出一个空格
Python允许在数字中间以_分隔
“”或者‘’都可以包含字符串
转义字符和c类似' "都可以用来输出’ “等
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用’’’…’’’的格式表示多行内容
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定 ...
背包dp
导入:动态规划,与贪心算法不同,能用贪心算法解决的问题具有所谓的‘最优子’的结构,也就是能够从‘局部最优解’导出最终答案。而动态规划问题一般不具有这种结构,这个时候就可以想办法将原来的问题分解成一堆子问题,通过所有子问题的局部最优解导出最终的答案,其中最具典型的便是‘背包问题’。
#1.01背包问题
[NOIP2005 普及组] 采药题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
输入格式第一行有 2 个整数 T(1 \le T \le 1000)和 $M$(1 \le M \le 100),用一个空格隔开,$T$ 代表总共能够用来采药的时间,$M$ 代表山洞里的草药的数目。
接下来的 M行每行包括两个在 1到 10 ...
Unity 从Built in升级到Universal Render PipeLine
Unity 从Built in升级到Universal Render PipeLine
因为可能会经常发生这种事,就在这里加强一下记忆好了,,,
过程
之后就是将shader升级成URP
遇到的问题当你使用Universal Render Pipeline之后,你可能会有一些shader会无法正常使用,比如在下面的场景,我模拟屏幕环境光遮蔽的时候scene和game的看到的场景不一样
分析原因:
我这两个物体使用了屏幕环境光遮蔽SSAO技术,需要在渲染所有的透明物体之前获取深度纹理,因为这两个物体实际上渲染队列是Transparent,unity默认在渲染队列当中Transparent是在Opaque之后进行渲染的,我们用这个特性,可以获取到在摄像机视角下这个物体背面遮挡(如果存在的话)的深度值,并且使用特殊的方式将非线性深度值转变成真实的线性深度距离,来获取到这个被遮挡物体表面的位置信息,之后我们使用裁剪空间的 w 分量来获取透明物体距离摄像机的距离
所以核心在于,我们需要在渲染所有的透明物体之前获取深度纹理,而Universal Render PipeLine在给摄像机进行渲染 ...
Unity 设计生存游戏制作笔记
在 Unity 中,Update 和 FixedUpdate 是两个常用的函数,用于在每一帧中更新游戏对象的状态和行为。它们的区别在于调用时间和执行频率不同。
我们首先创建了这些东西
1.控制鼠标移动的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseMovingScript : MonoBehaviour
{
public float mouseSensitivity = 100f;
float xRotation = 0f;
float yRotation = 0f;
public float topClamp = -90f;
public float bottomClamp = 90f;
// Start is called before the first frame update
void Start()
{ ...
字符串基本操作
常见的处理字符串的函数
strlen或者**.length()**获取字符串长度
**strcmp(a,b)**从第一个字符开始比较字符串的ascii码,a>b 返回正数,a=b返回0,a<b返回负数
strcat(被连接的一方,连接的一方)源字符串必须以 ‘\0’结束。目标空间必须有足够的大,能容纳下源字符串的内容。目标空间必须可修改。
**strcpy(a,b)**将a字符串复制到b字符串源字符串必须以 ‘\0’结束。会将源字符串中的 ‘\0’拷贝到目标空间。目标空间必须足够大,以确保能存放源字符串。目标空间必须可变。 ’\0’是判定字符数组结束的标识,表示这串字符到结尾了; 注意:在字符数组中’\0’是占一个位置的!
memsetmemset是对一个字节进行操作的,所以如果是对char类型进行操作的话,完全没有问题,因为char类型本身就是占一个字节。但是对其余类型的变量进行操作,只有赋值0的时候,才是正确的,否则就会出现其他的值。
reverse翻转函数reverse(str.begin(), str.end());在涉及到回文的问题时很好用。 ...