自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CocosCreator 2D物理系统坑爹二三事

Cocos的内置物理系统不能说是很垃圾, 只能说是没什么用. 只要你想做一点超出碰撞检测范围的物理效果, 那么就可以直接抛弃内置物理系统了. 以下内容摘自Cocos Creator 3.8官方文档, 可以看到官方文档明确写着不支持的能力.由于 Builtin 2D 物理系统只带有碰撞检测的功能,所以刚体对于 Builtin 2D 物理系统是不生效的,本篇设置只对 Box 2D 物理系统产生作用。关节组件在 Builtin 2D 物理模块中是无效的。

2024-04-17 10:47:13 444

原创 IO多路复用——select、poll和epoll

select#include <sys/select.h>int select(int maxfdp1, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds, struct timeval *restrict tvptr...

2018-06-02 11:16:47 215

原创 记一次由于智能指针shared_ptr循环引用而产生的C++内存泄漏

自从 C++ 11 以来,boost 的智能指针就被加入了 C++ 新标准之中。其中,广为人知的 shared_ptr 被用的最多,以引用计数的方式来管理指针指向资源的生命周期。看起来有了智能指针后,C++ 程序再也不用担心内存泄漏了,就可以像 Java 一样愉快的创建堆上对象了。但事实并非如此,C++ 的智能指针和 Java 的引用实现原理上有本质的区别。在“循环引用”这个问题上,Java 可以...

2018-05-30 23:06:04 2232

原创 基础中的基础——MyString类实现

MyString 类是学习 C++ 的过程中一个很重要的例子,涉及到面向对象的封装、堆内存申请和释放、函数的重载以及 C++ 的 “Big Three”。本例子重点在于复习和理解上述的 C++ 特性,实现的功能并不多。MyString 类的 HeaderMyString 的声明中包含了一个带指针的 C++ 类应有的函数,并且包含了一些常用的功能。其中终点讨论一下用 friend 关键字...

2018-05-25 17:52:51 3256

原创 BZOJ 1008: [HNOI2008]越狱 - 组合数学

监狱有连续编号为1…N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱直接计算产生相邻的情况相当复杂,但发生相邻的情况数量等于总数量减去不相邻数量。不相邻数量可以按照如下方法构造:第一个人有 mmm 种可能,要不产生相邻则第二个人只有 m−1m−1m-1 种选择,第三个人也是,以此类推,...

2018-05-11 21:39:41 202

原创 欧拉函数:计算1~N中与N互质的数的个数

欧拉函数定义:对于所有的 a,ba,ba, b,若 gcd(a,b)=1gcd(a,b)=1gcd(a, b)=1,则称 a,ba,ba, b 互质。计算方式:[1,N][1,N][1, N] 中与 NNN 互质的数的个数被称为欧拉函数,记为 ϕ(N)ϕ(N)\phi(N)。int phi(int n) { int ans = n; for (int i = 2; i &l...

2018-05-11 21:28:36 4516

原创 无根树(无环连通无向图)的Prufer编码

Prufer 数列,可以用来解一些关于无根树计数的问题。 Prufer 数列是一种无根树的编码表示,对于一棵 nnn 个节点带编号的无根树,对应唯一一串长度为 n−1n−1n-1 的 Prufer 编码。 (1)无根树转化为 Prufer 序列。 首先定义无根树中度数为 111 的节点是叶子节点。 找到编号最小的叶子并删除,序列中添加与之相连的节点编号,重复执行直到只...

2018-05-10 23:15:42 4259

原创 单调栈之最大子矩阵的大小 [LeetCode84]

1、使用暴力算法枚举所有的端点计算其最小值,复杂度为 O(n2)O(n2)O(n^2)2、观察特点,很多区间的左边和右边其实还可以拓展,产生更大的面积3、拓展的边界就是第一个小于这个原始区间中最小的那个高度4、所谓单调栈,就是可以快速找到之前的,第一个比当前值小的那个位子5、先确定右边的极限,再找小于右边极限的第一个位子,就是最长的底,可以使用单调栈如果下一个矩形的高度比上一个...

2018-04-06 01:16:16 924

原创 单调队列之生成窗口最大值数组 [LeetCode239]

求滑动窗口的最大值数组Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.Therefore, return the max sliding window as [3,3,5,5,6,7].1、对每个可能出现的窗口遍历一次找到最大值,其时间复杂度为 O(kn)O(kn)O(kn)2、观察遍历窗口的过程,会出现一个值是好多窗口的最大值的情况3、可以...

2018-04-05 23:25:16 567

原创 环境变量与 shell 的那些事

0. 前言及废话你是否每次配置环境变量都要百度一番?你是否不解为何 export 后环境变量就会直接生效而退出再登录就没用了?你是否不明白为何已经改了配置文件还要 source 命令一下,source 命令的原理又是什么?如果答案是 Yes,则此文非常适合你!本文讲述了 shell 的环境变量的内存存储位置、shell 内置命令的原理,以及其配置文件初始化顺序,对于不知道环境变量如何配置和...

2018-04-04 21:05:11 328

原创 《挑战程序设计竞赛》第二章-最基础的“穷竭搜索”-习题

深度优先搜索POJ-1979 Red and Black从字符为 ‘@’ 的格子开始向 ‘.’ 的格子搜索,输出与之连通的 ‘.’ 的格子有多少个,包括 ‘@’ 在内。1、DFS 内直接计数,能进入这个 DFS 的均是合法位置 2、为已经访问过的格子做标记,将原来的 ‘.’ 可达变为 ‘#’ 不可达 3、朝四个方向分别进行判断,位置合法:不超出范围、字符为 ‘.’,则进入#...

2018-03-23 11:18:04 205

原创 My Standard Code Library

=============图论=============匈牙利算法// 时间复杂度为 O(n4) 的匈牙利算法,可继续优化到 O(n3) // 等我来优化之int W[maxn][maxn], n;int Lx[maxn], Ly[maxn]; // 顶标int left[maxn]; // left[i]为右边第 i 个点的编号bool S...

2018-03-22 14:17:25 230

原创 《挑战程序设计竞赛》水题放这里

POJ-18521、不能按照题意走,读完题目后一定要重新建模,否则所有的题最后都会被写成暴力。 2、这种棍子上密密麻麻蚂蚁来回爬动的场景,从直觉上来看不好模拟。有点像两个城市间两个人相向而行,一条狗在中间跑来跑去的小学奥数题,其实是非常简单的模型。#include <algorithm>#include <iostream>using namespace ...

2018-03-18 22:27:35 260

原创 HihoCoder上网络流算法题目建模总结

经过了几天的学习和做题,我利用刘汝佳书上的网络流算法模板完成了HihoCoder上的几个网络流算法,HihoCoder可能还会继续更新网络流算法,所以我也会接着总结。这个主要是对网络流算法的建模做分析和理解,不具体分析网络流算法,网络流算法会单独总结。网络流一·Ford-Fulkerson算法题目连接本题没有建模,就是标准的网络最大流求解,将图建完后直接应用最大流算法即可解决。但在此记录几点注意的地

2016-10-10 23:24:47 1503

原创 几个字符串相关的题目,来自LeetCode和LintCode

C++实现如下:class Solution {public: int strStr(string haystack, string needle) { if (haystack.empty() && needle.empty()) return 0; if (haystack.empty()) return -1; if (needle.e

2016-07-21 17:11:09 958

原创 APUE 头文件 "apue.h" 中包含的头文件解释

重读 APUE,这次的任务是要弄清楚一些细节问题,首先就是所包含的头文件#include <sys/types.h>#include <sys/stat.h>#include <sys/termios.h>#include <sys/ioctl.h>#include <stdio.h>#include <stdlib.h>#include <stddef.h>#include <str

2016-02-23 17:20:21 720

原创 LeetCode 80. Remove Duplicates from Sorted Array II

这是26. Remove Duplicates from Sorted Array 的升级版,仅仅做了一点改动:允许两个相邻的元素相同,超过两个则不允许。我所做的就是在原来的基础上添加一个变量用来记录连续的个数,如果一直相同则这个变量一直累加下去,如果出现不同,那么这个变量置 1。判断指针是否同时后移的条件则是如果不等或者 相同的个数小于 2。第一份代码:class Solution {publi

2016-01-28 20:43:19 354

原创 LeetCode 26.Remove Duplicates from Sorted Array

给出一个经过排序后的 int 型数组,将其中重复的值剔除掉。这道题目实际上使用两个指针,一前一后比较是否等值。如果等值,那么后面的指针再后移一位,如果不等值,前面的指针指向的元素更改为后面指针指向的元素,两两后移。第一份代码:class Solution {public: int removeDuplicates(vector<int>& nums) { if (nums.

2016-01-28 20:21:55 508

原创 对于UVa12096“集合的集合”的理解

这里为每个集合分配了一个唯一的 ID,使用了 std::map 实现集合到整数类型的对应。map 中的集合属于对象类型,起初难以接受,不过既然是模板,那么什么类型都是可以装载的。 函数 ID 起到了从 Set 到 int 的转换,并且添加了新家入的集合和整数ID的映射以及ID到集合的存取int ID(Set x) { if (IDcache.count(x)) return IDcache

2016-01-26 14:02:38 697

原创 C++集合操作,使用STL的set容器

Set 是 STL 中给定的容器,会根据设定的排序准则对元素自动排序。Namespace std { template <class T, class Compare = less<T>, Class Allocator = allocator<T> >Class set;Template <class T, Class Compare = less<T>, Cl

2016-01-26 10:36:13 1153

原创 《Effective C++》读书笔记

前言:鄙人又无耻的弄C++去了,自从比赛后就再也没碰ACM,打算暑假再弄,放假前先让自己的C++更NB。因为比赛中一定会用到C++STL,于是我再比赛前认真的看了STL的使用,于是比赛中真的用到了,但是大部分时间都在Debug让我很不爽,我就在之后借了本C++书好好弄弄STL,结果发现以前很多C++都忘了,模板封装多态继承设计模式等等。所以就有了这本书的阅读。对于某些条款并没有写也不可能都写,因为会

2015-07-06 22:40:13 413

原创 HDU5246 超级赛亚ACMer

此是一道贪心题目。。。是特么贪心吗? 日后重新更新下,此题待更之。。。typedef long long LL;const int maxn = 10005;LL arr[maxn]; LL m, k;int n;int main() { int T, kase = 1; scanf("

2015-06-26 19:26:15 453

原创 ZJU2136 Longest Ordered Subsequence

这是一道经典的最长上升子序列问题,首先确定阶段和状态。然而每个阶段仅仅有一个状态,使用一位数组递推。 令 dp[i] 表示以 i 结尾的最长上升子序列的长度,则有dp[i] = { max(dp[j]) + 1 | 0 <= j <i, seq[i] > seq[j] }边界 dp[0] = 1 表示首个为结尾的最长串长度为1。#define LOCAL#include <iostream>#

2015-06-24 19:47:52 536

转载 最长上升子序列nlogn算法

这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。A.O(n^2)算法分析如下: (a[1]...a[n] 存的都是输入的数) 1、对于a[n]来说,由于它是最后一个数,所以当从a[n]开始查找时,只存在长度为

2015-06-24 18:41:52 492

原创 动态规划题目总结(持续更新)

暂且按照《训练指南》上的顺序写,每种题型对应HDU上的一道或者几道题目数字三角形数字三角形其实是在枚举每个阶段中的状态,此状态就是能从前一阶段已经解决的最大和问题中配合当前的状态得到的当前最大和。设 d(i, j) 表示第 i 阶段的第 j 个状态(格子)出发能得到的最大和,得到了一个状态转移方程: d(i, j) = a(i, j) + max{ d(i + 1, j), d(i + 1, j

2015-06-19 12:42:16 557 2

原创 My Standard Code Library

=============图论=============匈牙利算法// 时间复杂度为 O(n4) 的匈牙利算法,可继续优化到 O(n3) // 等我来优化之int W[maxn][maxn], n;int Lx[maxn], Ly[maxn]; // 顶标int left[maxn]; // left[i]为右边第 i 个点的编号bool S[maxn], T

2015-06-09 17:03:21 540

原创 HDU1010 Temper of the Bone

刚刚上实验课,榨果汁。。。自觉学不到什么东西,就来到了机房,看看HDU上的题。一道搜索,其中包含了几个我从没想到过的剪枝方法,例如奇偶剪枝、路径剪枝还有在主函数中的一个剪枝,诸见代码与注释,虽然看起来没什么用的剪枝没准会遇到变态的测试数据导致最后的完蛋,所以只要能想到的剪枝就尽量写上去。 注:这题的代码来自标程。/* Exe.Time Exe.Memory Code Len.

2015-05-26 11:12:26 480

原创 HDU1312 Red and Black

大致题意:搜索邻接字符到底有多少个#define LOCAL#include <iostream>#include <fstream>using namespace std;const int maxn = 20 +1;char maze[maxn][maxn];int dx[4] = {0, 1, 0, -1};int dy[4] = {1, 0, -1, 0};int sum;int

2015-05-05 22:56:56 420

原创 POJ3617 Best Cow Line

大致题意:每次从一个字符串的左或者右边取一个字符,直到字符串空构成了一个新的满足字典序最小的串。 这题贪心法的代码如下:#define LOCAL#include <iostream>#include <fstream>using namespace std;const int maxn = 2000 + 10;char S[maxn];int n;void solve(){ //

2015-05-05 22:16:00 367

原创 LA3644 X-Plosives

这题是刘汝佳书中的并查集范例,我使用了《挑战程序设计竞赛》书上提供的并查集模板。当我们读到一道题的时候,在读懂题意后应该思考这个问题适用于哪种数据模型,并通过经验来判断使用何种算法,而不是无头苍蝇乱撞。 大致题意:每次给并查集中的数字使用一个并集操作,前提是这两个数字目前并不在同一个集合之中。可能比较含糊,看给出的测试用例:1 23 43 53 12 34 12 66 5-1一点点

2015-04-29 22:01:11 519

原创 HDU1016 Prime Ring Problem

大致题意:有这样的几个排列,使得从1到n的排列中,相邻的两个数的和都是素数且首位两个也符合这个要求。 使用深度优先搜索加上剪枝美其名曰“回溯法”:DFS(int cur) if (递归终点达到): 输出一个解 else 从cur + 1到n : if (不满足剪枝条件) : 构造状态 DFS(cur +

2015-04-28 20:13:20 388

原创 HDU2553 N皇后问题

大致题意:在N*N的棋盘上摆放N个皇后,注意是正好N个皇后二不是小于N,使横竖左右均没有对应的皇后,完成一次求解。统计这样的次数。 大致思路:如果做过Fire Net (http://acm.hdu.edu.cn/showproblem.php?pid=1045)的话会很自然想到建立一个10 * 10 的二维数组来保存这样的棋盘,每次放置一个棋子并且判断是否可以放置,如果可以放置则进行下一次的搜索

2015-04-25 16:28:28 443

原创 HDU1232 畅通工程

这题使用并查集来解决,先贴上代码:// 并查集的题目,我还没有掌握到并查集的精髓,仅仅是知道有这么个东西// 以及它的操作,而真正的原理还没懂// TODO:查阅资料完全了解并查集的使用和原理。#define LOCAL#include <iostream>#include <fstream>#include <vector>#include <algorithm>#include <

2015-04-24 23:12:53 474

原创 HDU2161 Primes

这个是我们学校的2012年选拔赛中的一题,主要用到了素数的筛选法,我借鉴了网上的一个模板,先筛选素数然后判断输入就好了。 代码如下:#define LOCAL#include <iostream>#include <fstream>#include <iomanip>#include <cmath>#include <algorithm>using namespace std;const

2015-04-24 22:40:35 396

原创 HDU1013 Digital Roots

这题本来想着用模拟来着,于是写着写着发现测试用例子没问题但提交后会WA,那就说明了输入一定是大整数了,如果使用大整数继续模拟那么应该会AC的。但我想看看是否有更加精妙的解法,于是发现大神的博客大致是这么写道:通过找规律得到“roots = (n - 1) % 9 + 1”,规律就不再推到了。贴上我之前错误的代码:#include <iostream>using namespace std;// 搜

2015-04-24 19:37:52 406

原创 HDU1097 A hard puzzle

不好意思再一次的水了,但这次的题目是我自己推出来的,虽然没有多大难度但是这种关于数学的题目我是从心里不想去做,今天开了一个头。并且也应用了上篇报告关于 std::ios::sync_with_stdio(false) 的使用。#include <iostream>#include <cstdio>#include <cmath>using namespace std;int main(){

2015-04-24 18:56:45 366

原创 HDU1012 u Calculate e

大致题意:给一个公式,n越大e越准确,计算n从0到9时e的值。 虽然是简单题目,但是给我很大的启示,电脑是自己的,程序是自己的,想怎么改就怎么改:如下,我把前几个没法固定格式化的数字全都手动修改了,虽然不是很优雅,但是得到了正确的答案。#include <iostream>#include <fstream>#include <cstdio>using namespace std;int

2015-04-24 12:22:38 691

原创 HDU1032 The 3n + 1 problem

大致题意:给了一段算法,求给定输入区间内算法运行最多的次数。 这题好奇怪,我之前后输出a,b和结果就是WA,但是把a和b放到前面然后又加了个return 0就奇迹般的AC了。还有在计算max的时候我把sum = 1的初始化放在了外面导致出错,都是小的错误却影响了整个程序。#include <iostream>#include <fstream>using namespace std;int ma

2015-04-24 11:47:02 514

原创 HDU1045 Fire Net

大致题意:有障碍阻隔的简单四皇后问题,不需要回溯剪枝。 因为规模非常小,所以直接DFS也不会有任何的超时。我之前大致浏览过这题的代码,不过当时并没有什么思路,于是就干脆“浏览”了,没走心。昨晚在机房搞了接近一个小时,回寝室又搞了许久没解,早上醒来发现测试程序出错导致我以为我的那个judge函数是错的,来回的各种改最后发现还是错的,就从测试程序上找,结果发现写在了每个测试用while n–的外面 o

2015-04-24 08:20:52 380

原创 HDU1018 BigNumber

题意大致:求 n! 的位数 例如 10! = 3628800 是一个7位数 这是一个叫做斯特林的公式,用来取n的阶乘近似值的公式。 或者如下 但我又搜索到了另外一种解法,是纯推理出来的,也很不错。 (int)log10(num) + 1 就是num这个数字阶乘的位数。推导如下:log10(12345) = log10(1.2345 * 10 ^ 4) =

2015-04-23 19:33:47 403

空空如也

空空如也

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

TA关注的人

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