KMP算法
KMP —— 一种字符串匹配算法(学习自董晓算法)给定一个模式串P和一个主串S,求模式串P在主串S中出现的位置。(字符串下标均从1开始)
去最长的想等前后缀,可以保证不漏解
通过模式串前后缀的自我匹配长度,计算next函数(降低事件复杂度的关键),给j指针打一张表,失配时跳到next[j]的位置继续匹配。
next函数next[i]表示模式串P[1,i]中相等前后缀的最长长度
next数组代码ne[1] = 0;for (int i = 2,j = 0; i <= n; i++) { while (j && p[i] != p[j + 1]) j = ne[j]; if (p[i] == p[j + 1]) j++; ne[i] = j;}
双指针: i扫描模式串, j扫描前缀。初始化,ne[1]=0,i=2,j=0.(固定的)每轮for循环,i向右走一步。
若p[i]!=p[j+1],让j回跳到能匹配的位置,如果找不到能匹配的位置,j跳回0.
若p[i]==p[j+1] ...
别踩白块儿
鼠标判断不正常(待填的坑)#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<easyx.h> //图形库,绘制图形,输出文字#include<stdlib.h>#include<time.h>/** 别踩白块:c+easyx**/#define INTERVAL 100 //标题高度#define GRID_W 100 //块的宽度#define GRID_H 150 //块的高度//定义数组,存储黑块int flags[4] = { 0 };//统计成功点了多少个黑块int gCount = 0;void init(){ //设置随机数种子 srand((unsigned int)time(NULL)); //随机生成黑块 for (int i = 0; i < 4; i++) { flags[i] = rand() % 4;//0,1,2,3 }}void draw(){ const char ...
字符串函数模拟实现
size_t strlen(const char* str)求字符串长度#include <stdio.h>#include <assert.h>//1.计数器版本int my_strlen(const char* str){ int count = 0; assert(str != NULL); while (*str != '\0') { count++; str++; } return count;}int main(){ char arr[] = "abc"; int len = my_strlen(arr); printf("%d", len); return 0;}
字符串已经以’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’)。–{‘a’,’b’}不可以
参数指向的字符串必须要以’\0’结束
函数的返回值是size_t,是无符号的
char* strcpy(char* d ...
指针练习
指针练习(一)
下列程序的结果#define _CRT_SECURE_NO_WARNINGS_#include <stdio.h>int main(){ int a[5] = { 1,2,3,4,5 }; int* ptr = (int*)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); return 0;}
结果是 2,5
首元素地址+1指第二个元素的地址,即2。&a + 1 指向的是5后面一个的地址,-1又回去了
2.
#define _CRT_SECURE_NO_WARNINGS_#include <stdio.h>struct Test{ int Num; char* pcName; short sDate; char cha[2]; short sBa[4];};//假设p的值为0x100000,如下表达式的值分别为多少//Test的大小是20字节int main(){ printf(" ...
数学建模中的问题C解决
假币问题问题描述利有 12 枚银币。其中有 11 枚真币和 1 枚假币。假币看起来和真币没有区别,但是重量不同。但赛利不知道假币比真币轻还是重。于是他向朋友借了一架天平。朋友希望赛利称三次就能找出假币并且确定假币是轻是重。例如:如果赛利用天平称两枚硬币,发现天平平衡,说明两枚都是真的。如果赛利用一枚真币与另一枚银币比较,发现它比真币轻或重,说明它是假币。经过精心安排每次的称量,赛利保证在称三次后确定假币。
Input:
输入有三行,每行表示一次称量的结果。赛利事先将银币标号为 A-L。每次称量的结果用三个以空格隔开的字符串表示: 天平左边放置的硬币 天平右边放置的硬币 平衡状态。 其中平衡状态用,up, down, 或 even表示, 分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。
Output:
输出哪一个标号的银币是假币,并说明它比真币轻还是重(heavy or light)。Sample Input1ABCD EFGH evenABCI EFJK upABIJ EFGH evenSample OutputK is the counterfeit coin and it ...
联合查询输入
联合查询注入 来自:sechub1.判断注入点我们可能存在SQL注入变量的后边添加以下payload:
and 1=1 / and 1=2 回显页面不同(整型判断)
单引号判断’显示数据库错误信息或者页面回显不同(整型,字符串类型判断)
\ (转义符)
-1 / +1 回显下一个或上一个页面 (整型判断)
注:加号’+’在URL中有特殊含义,因此在需要对其进行URL编码为%2b
2.判断是整型注入还是字符型注入数字型与字符型的最大区别在于: 数字类型不需要引号闭合,而字符类型需要使用引号闭合。
数字型:
select * from table where id = 1;
字符型:
select * from table where username = 'admin';
3.根据不同的分类进行注入根据SQL注入语法分类:
UNION query SQL injection(可联合查询注入)
Error-based SQL injection(报错型注入)
Boolean-based blind SQL inje ...
MySQL学习笔记
连接数据库mysql -u root -p123456 --登陆时密码-p后不能有空格update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost'; --修改用户密码flush privileges; -- 刷新权限所有语句结尾都是用;结尾show databases; -- 查看所有数据库mysql> use home -- 切换数据库 use 数据库名show tables; -- 查看数据库中所有的表describe student; -- 显示数据库中所有信息
create database westos; -- 创建一个数据库exit; -- 退出连接-- 单行注释(SQL的本来的注释)/* SQL多行注释123*/
数据库xxx语言 CRUD增删改查
DDL 定义
DML 操作
DQL 查询
DCL 控制
操作数据库操作数据库->操作数据库中的表-> ...
牛客小白赛68失败经验
参赛经历本来是去初学者试炼营,偶然点进小白赛,发现参赛的方式不是很复杂,蛮试一下
A题Tokitsukaze and New Operation
我的思路是用模10,除10的方法遍历每位数,再去做,途中也遇到很多问题,相乘小于10,要乘的10的不同次方,在解决种种问题后,自测运行过了
判断位数是否一致int istrue(int x, int y){ int countx = 0; int county = 0; do { x = x / 10; countx++; }while (x != 0); do { y = y / 10; county++; }while (y != 0); if (countx == county) return 1; else return 0;}
计算各位数相乘int cacux(int x, int y){ int count = 0; int num = x;//注意x的值不能变,引入变量 do { num = num / 10; count++; ...
学生基本信息输入输出引发的思考
BC11 学生基本信息输入描述:依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩(注:输出成绩时需进行四舍五入且保留2位小数)。
数据范围:学号满足 1≤n≤20000000,各科成绩使用百分制,且不可能出现负数
输入描述:学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。
输出描述:学号,3科成绩,输出格式详见输出样例。
解题:在开始读入数据时,刚想用int存储学号,想到int能够存取整数的范围,它存的下吗?
#include <stdio.h>int main(){ printf("int size is %d byte.\n" , sizeof(int)); return 0;}
实际上int的取值范围依赖于计算机系统,这里显示的4Byte,说明可以存取的数字范围是-2147483648~2147483647机2^32 ~ 2^32 - 1,所以用int类型就够了。
剩下的三个数用float即可,但题目又有要求要四舍五入,如果直接用%.2f的形式他会自动四舍 ...
三子棋
文件#pragma once//符号的定义#define ROW 3#define COL 3#include <stdio.h>#include <stdlib.h>#include <time.h>//函数的声明//初始化棋盘void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘void DisplayBoard(char board[ROW][COL],int row,int col);//玩家下棋void PlayerMove(char board[][COL], int row, int col);//电脑下棋void ComputerMove(char board[ROW][COL], int row, int col);//1.玩家赢了-*//2.电脑赢了-#//3.平局-Q//4.游戏继续-C//判断是否赢游戏char IsWin(char board[ROW][COL], int row, int col);//判断是否继续游戏int IsFull(char boa ...
