char

【洛谷 P5422】【USACO19OPEN】Compound Escape P(轮廓线dp / 最小表示法)

岁酱吖の 提交于 2020-03-12 03:48:21
传送门 首先看数据范围和题就知道是轮廓线 d p dp d p 最小表示法压连通性 但是由于脑残 还是 w a + t l e wa+tle w a + t l e 了 把每次转移的预处理出来 每次可以直接枚举 2 k 2^k 2 k 横边情况和 2 k − 1 2^{k-1} 2 k − 1 竖边情况转移 # include <bits/stdc++.h> using namespace std ; # define cs const # define re register # define pb push_back # define pii pair<int,int> # define ll long long # define fi first # define se second # define bg begin cs int RLEN = 1 << 20 | 1 ; inline char gc ( ) { static char ibuf [ RLEN ] , * ib , * ob ; ( ib == ob ) && ( ob = ( ib = ibuf ) + fread ( ibuf , 1 , RLEN , stdin ) ) ; return ( ib == ob ) ? EOF : * ib ++ ; } inline int read ( ) {

基于STM32之UART串口通信协议(三)接收

蹲街弑〆低调 提交于 2020-03-12 02:00:20
一、前言 1、简介   回顾上一篇 UART发送 当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作。 2、UART简介   嵌入式开发中,UART串口通信协议是我们常用的通信协议之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。 3、准备工作   在 UART详解 中已经有了详细的说明,按照里面的说明即可。 注:   建议每次编写好一个相关功能且测试功能成功使用后,保存备份并压缩成一份Demo例程,方便日后有需要的时候可以直接使用。   例如: 二、CubeMx配置及函数说明 说明:   如果有看过我写的 UART发送 的兄弟姐妹们应该会知道,在 UART发送 和 UART详解 中的CubeMx配置都是一样的。   但这一次不同,会在原本配置CubeMx的基础上,添加一些UART的中断配置来实现中断接收操作。 1、CubeMx配置 1)按照 UART详解 配置UART(若配置过,可以继续使用) 2)使能串口中断 3)设置中断优先级(如果没开启其他中断,那就默认即可,直接跳过) 4)代码生成(点击前最好把原本的工程关掉,不然有可能会有问题) 2、函数说明 1)CubeMx生成的UART初始化(在usart.c中) 说明:   会与上一篇 UART发送

peewee.InternalError: (1071, 'Specified key was too long; max key length is 1000 bytes')

两盒软妹~` 提交于 2020-03-11 20:07:15
原因 :使用peewee创建表时,有类似于这样的语句: field_name = CharField(primary_key=True) (也就是把char类型的字段设置成了主键。) 解释 :utf8mb4 编码下 1 char = 4 bytes。而varchar默认长度为255(255*4 = 1020),超过报错显示的最大长度 1000 bytes。 解决 :设置CharField的最大长度参数: max_length=num (num <= 250) 参考 : Python peewee.CharField() Examples 来源: https://www.cnblogs.com/sfriend/p/12462842.html

读MySQL5.7 官方文档11.3.2 The CHAR and VARCHAR Types章节的总结

巧了我就是萌 提交于 2020-03-11 19:52:22
作者:魏新平,知数堂第5期MySQL实战班学员,第10期MySQL优化班学员,现任职助教。 varchar(n) 和char(n)的最大长度 相信作为dba,经常会被问到这个问题吧。那什么是最大长度。多少个字节还是多少个字符。其实这样讲不是很明白,简单的理解就是能放多少个字。一个字母,一个空格,一个中文字,一个标点符号的长度都是1。那么varchar(2),char(2)最大可以放两个字。那么这个n最大到底可以设置为多少呢。 这里需要先讲一个大前提,就是表的一行最长只能存放65535个字节,这个可不是能放多少个字的意思,由于设置的字符集的不同,可以存放的字的最大数量也是不同的。比如gbk存一个中文是2个字符,而utf8当中一个中文是3个字符.(后面的举例会涉及到这个知识点) char(n)当中的n设置范围是0到255,也就是说最大可以存放255个字。 varchar(n)当中n的设置范围就不一样了,他没有一个固定的最大值,会随着表当中其他的列所占用的字节数和所设置的字符集而影响到n的最大值。而且varchar自己还要占用一个到两个字符来确定后面数据字节的长度。 接下来我们举例 admin@localhost [weixinping_test] 14:15:01>create table test_char(a char(256)); ERROR 1074 (42000):

编译原理——正规式转DFA算法概述

让人想犯罪 __ 提交于 2020-03-11 19:05:21
一、概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata)。正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具;有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nondeterministic Finite Automata,NFA)。对于任意的一个单词,将其输入正规式的初始状态,自动机每次读入一个字母,根据单词的字母进行自动机中状态的转换,若其能够准确的到达自动机的终止状态,就说明该单词能够被自动机识别,也就满足了正规式所定义的规则。而DFA与NFA之间的差异就是对于某一个状态S,输入一个字符a,DFA能够到达的下一个状态有且仅有一个,即为确定的概念,而NFA所能到达的状态个数大于或等于一个,即不确定的概念。因为NFA为不确定的,我们无法准确的判断下一个状态是哪一个,因此识别一个正规式的最好的方式是DFA。那么,如何为一个正规式构造DFA就成了主要矛盾,解决了这个问题,词法分析器就已经构造完成。从正规式到DFA需要通过两个过程来完成:  

C语言中的神兽strdup

混江龙づ霸主 提交于 2020-03-11 16:24:21
  C语言的确博大精深,在C语言的世界中遨游了那么多年,发现自己仍是菜鸟一枚,很多利器没有能够驾驭,今天介绍一个神兽,威力无比,但是却很少人能用得好。 函数原型: #include <string.h> char *strdup(const char *s); 函数介绍:   strdup()函数是c语言中常用的一种字符串拷贝库函数,一般和free()函数成对出现。 strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。该函数的返回值是返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。 函数实现: char * __strdup(const char *s) { size_t len = strlen(s) +1; void *new = malloc(len); if (new == NULL) return NULL; return (char *)memecpy(new,s,len); } 函数实战: #include <syslib.h> #include<string.h> int main(void) { char *src =”This is the strdup test”; char *dest; dest = strdup(s); printf(

const真香

守給你的承諾、 提交于 2020-03-11 14:28:00
这个const,用着用着,竟不断发现它有许多长处,对它的好感度日渐攀升,觉得它有这般价值和意义,实在值得拥有一篇自己的专栏 1.用 const限定数据 本身可以避免不小心修改这个数据。 2.用const 限定指针 ,保证指针永远指向这个值。 比如,把1和2合并起来用 const char * const char months [ 12 ] = { "January" , "Februry" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "Novenmber" , "December" } ; 这个数组保护的特别周全,两道屏障,第1个const保证了数组是常量数组,元素都是常量,即不能通过这个指针来修改数组元素的值;第2个const保证了指针是const常量,即永远指向这个数组的第一个字符串 这种常量数组通常都是定义为 外部变量 即全局变量的,所有文件的函数都可以访问。 3.用 const形参 使函数可以处理const和非const数据,但是普通形参只能处理非const数据。 4.用 const引用 可以使得函数在传入的参数类型不匹配或者类型对但是是常量值时,生成匿名的临时变量作为引用变量,保证函数正确完成任务。所以 通常直接把引用形参声明为const 。 5

string char* char[]之间的转换

折月煮酒 提交于 2020-03-11 13:09:30
一、string转为char* char[] 主要通过string类内部的几个方法:data(),c_str(),copy 1、data()方法返回 const char * 格式的字符串数据 比如 string str = "world"; const char *p = str.c_data();//要加const或者等号右边用char* char *q = (char*)str.c_data();//同上,要加const或者等号右边用char* cout << p << endl << q << endl; q[5] = '!'; q[6] = '\0';//手动加结尾 cout << q << endl; 根据上面运行结果,可知,通过char 转换,可以继续进行后续修改。 2、c_str()方法返回 const char 格式的字符串数据 代码就不贴了,将data()换为c_str()即可,运行结果是一样的 3、copy方法 string str = "world123"; char p[6];//此处不能使用char* p;或者char* p=" ";或者char* p=""; str.copy(p, 5, 0); *(p + 5) = '\0'; cout << p << endl; 以上代码在部分IDE上可能报错C4996,可以通过修改项目属性-C+±预处理器

OpenCV实现仿射变换

老子叫甜甜 提交于 2020-03-11 10:51:32
什么是仿射变换? ¶ 一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移). 综上所述, 我们能够用仿射变换来表示: 旋转 (线性变换) 平移 (向量加) 缩放操作 (线性变换) 你现在可以知道, 事实上, 仿射变换代表的是两幅图之间的 关系 . #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> #include <stdio.h> using namespace cv; using namespace std; /// 全局变量 char* source_window = "Source image"; char* warp_window = "Warp"; char* warp_rotate_window = "Warp + Rotate"; /** @function main */ int main( int argc, char** argv ) { Point2f srcTri[3]; Point2f dstTri[3]; Mat rot_mat( 2, 3, CV_32FC1 ); Mat warp_mat( 2, 3, CV_32FC1 ); Mat src, warp_dst,

android之WIFI小车编程详述

纵饮孤独 提交于 2020-03-11 01:45:32
有了前几篇wifi模块eps8266的使用,单片机设置eps8266程序,android TCP客户端,现在就做一个wifi小车 先上图 小车是四个轮子的,每个轮子上都有电机驱动,前进后退的时候四个轮子同时前进和后退,转弯的时候,小车两边的轮子按反方向转。 为了达到更好的操作效果(一直按下前进,小车前进,按下左右转小车左右转,松开左右转,小车继续前进。松开前进,小车停止。后退同理),在单片机程序里加入了前进或后退的标志位。先说明一下,,,,,, 按下前进向单片机发送‘0’,按下后退向单片机发送‘1’,按下左转向单片机发送‘2’,按下右转向单片机发送‘3’,松开前进或后退向单片机发送‘5’,松开左转或右转向单片机发送‘6’,这样子发数据也是为了获得更好的操作体验 前进 后退 左转 右转按钮是使用的setOnTouchListener方法,以便在按钮按下或松开时发送数据, 就看一下前进代码 我在前面声明了一下 //前进, 关于OnTouchListener的使用,,找度娘,我也是找的度娘,不要偷懒呦 //前进 private OnTouchListener forwordButtonTouch = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO