自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 有限状态自动机(一个简单例子面向对象实现)

即状态+动作==》下一个状态+动作 并再其中处理该过程的函数中,改变状态和做出响应 以上门禁闸机模型: 闸机有两个状态:lock,unlock 每个状态有两个动作:card(刷卡),pass(试图通过) 进一步分析: lock+card:闸机状态==.unlock lock+pass:警告,不能通过 unlock+card:感谢(已经刷卡,可以通过) unlock+pass:通过之后,闸机状态==》lock #include <iostream> using namespace std; ty.

2022-05-25 15:41:13 527

原创 c++左值,右值以及消亡值

1.左值和右值 C++11中的定义:左值表达式表示的是一个对象的身份(在内存中的位置),而右值表达式表示的是对象的值(内容)。 左值和右值都是针对表达式而言的,左值是持久的,右值是短暂的:左值在表达式结束后仍然存在,右值在表达式结束后会被销毁。 区分左值和右值的方法:看能不能进行取地址操作,若能,则为左值,否则为右值。 1.1右值: void fun(int &x) { // } int main() { fun(10); return 0; } 编译的时候提示: error: in

2022-05-09 21:17:11 607

原创 简洁版的线程池

一个简洁版的线程池 去除了minthreadnum,maxthreadnum进一步控制线程数目的功能 只是实现维持一定数量线程,在有任务时唤醒去执行的简单逻辑。 #include <iostream> #include <mutex> #include <queue> #include <thread> #include <condition_variable> #include <cassert> #include <windo

2022-05-06 12:12:13 355

原创 linux_mysql安装和c++代码

mysql安装 mysql的使用 一些修改密码的骚操作: 不小心修改了 sudo cat /etc/mysql/debian.cnf 导致只能skip密码来修改密码 启动mysql数据库 sudo /etc/init.d/mysql start 重启 sudo /etc/init.d/mysql restart 关闭 sudo /etc/init.d/mysql stop 1.修改数据库配置文件绕过密码登录 sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

2022-05-04 17:59:11 1474

原创 树状数组&线段树

树状数组:顾名思义,用数组来模拟树形结构。 树状数组可以解决的问题:区间上的更新以及求和问题。以**o(logn)**获得任意(区间)前缀和 树状数组可以解决的问题都可以用线段树解决,那么区别在于,树状数组的系数要少很多。 优点:修改和查询的复杂度都是o(logN),而且比线段树系数要少很多,比传统数组要快,而且容易写。 缺点:遇到复杂区间问题还是不能解决,功能有限。 咱们的二叉树: 用数组建立树,黑色为原来的数组,红色代表我们的树状数组。 c为树状数组(红色),黑色为原来的数组A 管辖长度为从i向前,管

2022-05-03 21:32:36 1060

原创 c++socket套接字通信

单线程非io多路复用 server.cpp #include <iostream> #include <unistd.h> #include <string.h> #include <arpa/inet.h> using namespace std; int main() { int lfd = socket(AF_INET, SOCK_STREAM, 0); if (lfd == -1) { perror("sock

2022-03-17 17:41:16 1568

原创 关于线程和C++11的线程类

单核cpu需要对多线程访问共享资源加锁吗 需要。时间片完,也会引起线程的调度,需要对共享资源加锁。 线程参考 线程创建 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 参数: thread: 传出参数,是无符号长整形数,线程创建成功,会将线程

2022-03-16 21:32:19 1277

翻译 C++线程池

#pragma once #include<queue> #include<pthread.h> using namespace std; using callback =void(*)(void* arg); //task struct template<typename T> struct Task{ Task(){ function =nullptr; arg=nullptr; } Task(callback f,void* arg){

2022-03-16 20:55:56 170

原创 蓄水池抽样和洗牌算法

#include <iostream> using namespace std; // int[] reservoir = new int[m]; // // for (int i = 0; i < reservoir.length; i++) // { // reservoir[i] = dataStream[i]; // } // for (int i = m; i < dataStream.length; i++) // { // // 随机获得一个[0

2022-03-15 12:38:23 221

原创 平衡二叉树的c++实现

插入节点: (为什么可以将其移动到另一方作为子树,考虑其左小于父节点以及右大于父节点的性质,即可理解可移动) 二叉树删除节点: 1.若删除节点为叶子节点==》直接删除 2.欲删除节点只有一个子树,删除该head,把子树移到head位置 3.欲删除节点有双子树,(右子树的最左节点为大于且最接近欲删除节点的值)找到该最接近节点node将其与欲删除节点交换,问题转换为{ 删除右子树中,值为node->key的节点(该节点为叶子节点或只有右子树的节点)<即转换为1,2情况> } AVLTree.

2022-03-14 17:54:41 1203

原创 C++基础与提高部分

C++基础

2022-03-11 11:15:46 1093

原创 C++项目:高并发内存池

内存池 1. 池化 池化是一种常用设计模式:程序运行过程中常用的资源频繁申请/释放,对于该共享资源使用时还要竞争加锁使用。如果放到一个池通过池来管理资源(在使用前先申请,由程序管理申请和释放,可提高资源利用率)。 常用池化技术: 1. 内存池 不使用用内存池:通常情况下,程序员习惯直接使用new,delete,malloc,free等API申请和释放内存,在一个程序运行期间频繁申请释放不定长内存,使内存中出现很多内部碎片和外部碎片。 无回收机制,导致内存泄漏(由于疏忽或错误造成程序未能释放已经不再使用的 内

2022-03-09 20:21:00 635

原创 二叉树的各种遍历

二叉树前序遍历 中左右 void preorder(vector<int>&ret,TreeNode*root){ if(root==NULL) return ; ret.push_back(root->val); preorder(ret,root->left); preorder(ret,root->right); } vector<int> preorderTraversa

2021-09-08 17:48:25 131

原创 01背包问题(动态规划)

题目描述 PIPI有一台笔记本电脑,一台台式机电脑,两台电脑的性能相同,现在小明手里有N个等待运行的程序,每个程序运行所需的时间分别为n1,n2,n3,n4……,一台电脑同一时刻只能运行一个程序,一个程序只需要运行一次。两台电脑同时开始运行,请问小明该如何分配程序在这两台电脑上运行,使得最后结束运行的电脑的运行时间最短。 输入 输入不超过30组数据,每组数据第一行为N,代表有N个等待运行的程序,...

2020-04-12 15:53:27 361

原创 栈和队列

1209: 模拟出入栈游戏 题目描述 PIPI现有a-z 26个小球模拟出入栈操作,小球按照a~z的顺序压入栈,在栈顶的元素可以随时被取出,在游戏开始前给出任意26个字母的一些排列,问是否能够由出栈顺序得到这个排列。 输入 输入包含多组测试用例。 每组测试用例包含26个字母组成的一个序列。 输出 若出栈顺序合法,输出"yes",否则输出"no". 样例输入 abcdefghijklmnopqrst...

2020-04-12 10:10:14 620

原创 记忆化dfs(爱吃奶酪的肥老鼠)

题目描述 PIPI家里来了一只肥老鼠!!! 它的活动区域在一个n*n的方格矩阵中,其中每个方格上都一些奶酪,肥老鼠很懒,当它在一个方格吃完奶酪的时候,他最多往上下左右其中一个方向直走k步去找下一块奶酪。肥老鼠也很饿,当它在一个方格吃完奶酪之后,他的下一个目标方格的奶酪必须比当前的奶酪大。现在肥老鼠从(0,0)出发,请问: 肥老鼠最多能吃到多少奶酪? 输入 输入包含多组测试用例。 对于每组测试用例,...

2020-03-30 23:05:26 540

原创 问题 B: PIPI发工资(拓扑排序遍历)

题目描述 PIPI开了一个工厂,工厂里面有许许多多的员工。每次要发工资的时候PIPI就开始思考了,如何才能给员工发最少的工资呢? 发工资的原则是这样的: 每个员工的工资都是一个整数,其中基本工资是888元,但是如果 A 是 B的上司,那么A的工资就要比B高。 现在给出员工的数量和员工之间的关系,PIPI想问下胖虎他最少要发多少钱?? 输入 输入包含多组测试用例。 对于每一组测试用例,第一行包含两个...

2020-03-30 14:43:56 522

原创 尺取法

尺取法 poj 3061 下图取自网上博客 #include <stdio.h> int main(){ int t; int N; long long S,sum; int arr[100010],i,left,right,minlen; scanf("%d",&t); while(t--){ scanf("%d %I64d",&N,&S); ...

2020-03-27 11:15:43 193

原创 pipioj:取数游戏

问题 E: 取数游戏 题目描述 PIPI和POPO在玩一个取数游戏。 给定两个长度为N的整数数组A1, A2, … AN和B1, B2, … BN。他们轮流选择一个非空数组,取出该数组的第一个整数,加到自己的分数中。直到2N个整数都被取走为止,分数高的选手获胜。 现在PIPI是先手,他知道POPO一定会采取最优策略。PIPI想知道自己最多能得多少分。 输入 第一行一个整数N。 第二行包含N个整数A...

2020-03-27 11:12:05 782

原创 1046: 数组分拆

题目描述 PIPI得到了一个数组作为他的新年礼物,他非常喜欢这个数组! 在仔细研究了几天之后,PIPI成功的将这个数组拆成了若干段,并且每段的和都不为0! 现在PIPI希望知道,这样的拆分方法一共有多少种? 两种拆分方法被视作不同,当且仅当数组断开的所有位置组成的集合不同。 输入 多组数据。 每组输入的第一行为一个正整数N,表示这个数组的长度 第二行为N个整数A1~AN,描述PIPI收到的这个数组...

2020-03-25 21:09:35 409

原创 前缀和 1041: 最大子矩阵

前缀和 1041: 最大子矩阵 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 输入 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于100...

2020-03-22 15:41:06 433

原创 pipioj 1039 重复子序列问题

题目描述 1039 PIPI有两个字符串A和B,请你求出字符串A最少重复几次才能使得B是A的子序列。 我们称X是Y的子序列当且仅当可以从Y中删除若干个字符得到X。 例如对于A=“abb”, B=“bbaa”,则A重复3次之后得到"abbabbabb",此时B="bbaa"是"abbabbabb"的子序列。 注意,原始串A即算作重复一次。 输入 多组数据。 第一行包含一个字符串A。 第二行包含一个字...

2020-03-22 13:13:56 881

原创 全排列的三种实现

题目描述 生成由1至n个数的全排列。 输入 输入包含多组样例,每组样例输入一个整数n(1≤n≤9)。 输出 按照字典序反序输出,每个数值之间用空格隔开。每个排列单独占一行。 我做的该题,要求逆字典序就改了一下大于小于号 字典序 #include <stdio.h> #include <stdlib.h> int num[10]; int cmpfunc (const vo...

2020-03-20 00:48:05 463

原创 dfs bfs

http://www.pipioj.online/problem.php?id=1033 题目描述 PiPi喜欢把别人的名字拆开来,比如“螺”就可以拆成“虫田糸”,PiPi的语文学的不是很好,于是她决定使用编程的方式来解决这个问题。 给出一个01矩阵,1占据的部分即为需要拆的字,如果两个1分享一条边,那么它们连通。连通具有传递性,即如果a、b连通,b、c连通,则a、c连通。 连通的一系列1被看做可...

2020-03-15 13:06:40 312

原创 最短路径

bhaskd

2020-03-12 22:54:17 201

原创 规律题 防水堤坝

1013: 防水堤坝 时间限制: 1 Sec 内存限制: 128 MB 提交: 635 解决: 146 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 在太平洋的一个小岛上,岛民想要建立一个环岛的堤坝,我们可以将小岛简化为一个二维平面,你需要使用K条边(这些边要么是水平或者垂直长度为1的边,要么是45度倾斜的长度为sqrt(2)的边)围成一个多边形,多边形的顶点必须位于整点,然...

2020-03-06 20:55:59 565

原创 动态规划

动态规划 动态规划分化为具有重复问题的子问题 分冶将问题划分为互不相交的子问题 最长上升子序列 第一种 #include <stdio.h> #include <string.h> int main(){ int n,i,j; int num[1001]; int dp[1001]; int maxlen; while(scanf("%d",&n)!=EOF){ ...

2020-03-02 21:53:32 200

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除