Welcome to my blog. The English verison of posts are in En page.

关于最近


谈谈算法

今天上午一个团体赛,晚上一个bestcoder,水了自己一脸呵。

究其原因,可能有中午没有休息,晚上来的太晚,没有好好吃饭等等。


探究原因

仔细想想,最近这段时间对于学习,生活,等等一系列的事情是否有够认真努力呢?

怕是一般情况吧= =。晚上做题的时候猛然发现之前有错的线性筛素数模版有问题,也是没有及时修正。此外,欧拉函数等等也是忘记的差不多了,太水。

没有做好,做完的事情: 操作系统的书写还是差着不少,另外,并行计算的文档还没有成型。。总之,感觉就像是什么事情都没有做好一样。心塞。

那么这段时间我到底干什么了呢?这个问题也是值得深究的。

  • 用了很多的时间在Python的学习以及Linux的学习上了。
  • 不能说是浪费时间,但是对于ACM,对于我现在要做的事情,的确是有所偏差。(应该算是另一种娱乐吧)
  • 此外,还学习了线性代数。但是学习的效果如何呢?是不是太慢了,或者太过于悠哉游哉了呢?

似乎就是有点吧,可能太过于悠哉游哉了。尽管没有完成任务,但是还是觉得自己做了点东西。星期四和星期五,也是没有好好的把时间铺在算法上面,看这个看那个——用封老师的话来说,就是没出息。

哈哈= =

生活中缺少一股紧张的气息,所以可能做的不够。这是目前给自己找的原因。我想我需要一个时间好好的思考一下,处理一下自己究竟应该怎么处理自己的学习问题。

如果每次都是有些遗留,或者忘记了自己本来的目的,那么真是浪费时间了。

Linux-管道

  • 本文出自<svtter.github.io>

  • 头文件: #include<unistd.h>

  • 使用方法: int pipe(int chan[2]);

  • 说明: pipe会建立管道,并将文件描述词通过chan返回。一般chan[0]为管道的读取端,chan[1]是写入端。

  • 返回值: 成功返回0,失败返回-1,错误信息保存在errno中

  • 错误信息:

    • EMFILE 进程已用完文件描述词最大量。
    • ENFILE 系统已无文件描述词可用。
    • EFAULT 参数filedes数组地址不合法

运行结果:

Linux-同步互斥

  • 本文出自<svtter.github.io>

使用pthread实现经典问题:生产者消费者

关于semaphore的相关信息就不再贴出来了。

编译的时候记得-pthread选项。

运行结果

操作系统经典问题:哲学家就餐问题

mutex是c++11的新功能。记得添加C++11支持。(在运行结果中包含编译选项。)

运行结果

操作系统经典问题:读者写者问题

读者优先

  • 使用了c++11的新特性thread

运行结果

由于可以同时阅读,所以读者reading输出可能出现少许问题。

写者优先


  • 使rsem中只有一个读者在等待,保证了如果有写者,写者优先写

运行结果

  • 基本上结果就是写者写完,才会有读者阅读
cpp 

Linux系统函数简介

本文出自<svtter.github.io> 系统调用函数说明、参数值及定义 本文摘自老师的资料= = 使用这些函数的时候记得将头文件unistd.h包含到程序中 1、fork() 创建一个新进程 int fork() 其中返回int取值意义如下: 0:创建子进程,从子进程返回的id值大于0:从父进程返回的子进程id值 -1:创建失败 2、lockf(files,function,size): 用作锁定文件的某些段或者整个文件,本函数适用的头文件为: #include<unistd.h> 参数定义: int lockf(files,function,size) int files,function; long size; 其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。 3、msgget(key,flag): 获得一个消息的描述符,该描述符指定一个消息队列以便用于其他系统调用。 该函数使用偷文件如下: #include<sy/types.h> #include<sy/ipc.h> #include<sy/msg.h> 参数定义 int msgget(key,flag) key_tkey; int flag; 语法格式:msgqid=msgget(key,flag) 其中:msgid是该系统调用返回的描述符,失败则返回-1;flag 本身由操作允许权和控制命令值相或得到。 如: IP_CREAT|0400 是否该队列应被创建; IP_EXCL |0400 是否该队列的创建应是互斥的;等。 msgsnd(id,msgp,size,flag): 发送一消息。 该函数是用头文件如下: #include<sy/types.h> #include<sy/ipc.h> #include<sy/msg.h> 参数定义 int msgnd(id,msgp,size,flag) int id,size,flag; struct msgbuf * msgp; 其中:id是返回消息队列的描述符;msgp是指向用户存储区的一个构造体指针,size指示由msgp 指向的数据结构中字符数组的长度;即消息的长度。这个数组的最大值由MSG-MAX系统可调用参数来确 定。flag规定当核心用尽内部缓冲空间时应执行的动作;若在标志flag中末设置IPC_NOWAIT位,则当 41该消息队列中字节数超过一最大值时,或系统范围的消息数超过某一最大值时,调用msgsnd进程睡眠。 若是设置IPC_NOWAIT,则在此情况下,msgsnd立即返回。 msgrcv(id,msgp,size,type,flag): 接受一消息。 该函数调用使用头文件如下: #include<sy/types.h> #include<sy/ipc.h> #include<sy/msg.h> [阅读全文]

python的自动补全

新建python_start_up_file文件

$HOME/.profile文件中写入

export PYTHONSTARTUP=$HOME/.python_start_up_file

小注:

可以使用py3compile来编译文件,然后使用python3+文件名来运行

Python-使用hexo的python脚本

为了简化blog的使用写的python脚本,用来简化自己的操作= =

更新了一下。

最新的代码在coding.net上

hexo  python 

ACM – hdu5104-water

这个题目的总结就是不作不会死- -好端端的暴力我非要用个bfs。

看见自己wrong了还以为是哈希的问题- =

题意

  • p1+p2+p3 = n,$p1 <= p2 <= p3$
  • 输出符合条件的组数

输入输出

  • 给100组n,输出组数

分析

  • 只有3个数,暴力解就可以,注意循环终止条件。
[阅读全文]

使用gdb调试

最近都是用gcc+vim写代码,昨天突然写个代码算法出个逻辑bug,因为用了大量递归调用,DEB半天出不来也是醉了,于是 学习一下gdb——之前也是勉强使用过,但是明显感觉不爽阿。。所以这次好好学习,记录一下。 目前我能用到的几个命令: 选择调试文件 <shell>: gdb <file> 或者进入gdb以后,使用 断点 显示断点 (gdb): info break 添加静态断点 (gdb): b[reak] + 行数/函数名 (可以用tab补全) 添加条件断点 条件为真,则在断点处停止 – (gdb): b addr if condition 删除断点 删除编号为1的断点, 如果不加参数,会删除所有断点 – (gdb): delete breakpoint 1 启用/禁用断点 (gdb): disable breakpoint 1 (gdb): enable breakpoint 1 运行 开始运行 (gdb):r 继续 (gdb):c 单步调试 不进入单步执行 – (gdb):n 进入的单步 – (gdb):s[tep 显示变量 以变量为var为例 输出var的值 (gdb):p var 输出上一个求得值 (gdb):p 输出历史记录中值 (gdb):p $[num] 输出变量的类型 (gdb):whatis p 调用函数 (gdb):p add(a, b) 数组 输出a后面的十个元素 [阅读全文]
vim  gcc 

解决无法在CentOS下的gvim中使用ibus输入中文

问题

之前在gvim中一直无法使用中文,格外痛苦,后来使用了vim-ibus插件之后,可以在vim中使用中文了,但是依然不能在gvim中使用,一直以为是两个软件冲突的

问题,现在终于解决了。

  • gvim version: vim-X11
  • ibus version: 1.6

解决方案

  • 问题出在:使用的vim插件中有插件与ibus冲突,但是奈何找不到X11的log(应该可以找到,找到再说。。)
  • 排查方式比较简单,使用:PluginInstall,:PluginClean即可(考虑到我使用vundle管理插件)
  • 去除相应的插件即可(比如现在冲突的是auto-pairs)。如果不想去除冲突插件,可以考虑使用vim-ibus,这个在shell下是可以使得很多冲突减少的。
  • 可能auto-pairs在不久的将来就会修复这个bug,请在具体环境下排查
vim  Linux  CentOS 

Linux-存储管理

还未动笔