- 博客(49)
- 资源 (2)
- 收藏
- 关注
原创 玩家数据重置的几种策略
玩家数据重置是游戏逻辑里永恒的话题。历经岁月的洗礼,到目前为止,我发现(注意!是发现,不是发明!)了3种实现方法。现在,项目里玩家数据重置的时间是每天0点。方法1:记录上次重置时间last_reset_time,若last_reset_time<今天0点(为昨天或者之前的时间),则重置,据,且将其设为当前时间now。方法2:记录数据过期时间expiry_time,若当前时间n...
2019-10-12 18:32:26 572
原创 玩家数据重置问题的思考
问题描述:有一个参与度很高的活动,玩家的数据是每天重置的。时常有玩家抱怨,他们的活动数据会无缘无故地重置。经常就是,半夜玩了一段时间,白天再上线,打开界面看到,奋斗的成果全没了!What?先简要介绍该活动的重置机制实现。(以下为Erlang)-module(activity).-export([get_data/1]).-record(act, {time = 0 :: integer()...
2019-10-09 10:58:21 244
翻译 成功学习编程技巧的条件
成功学习编程技巧的条件Jaana Holvikivi 赫尔辛基城市大学应用科学系 摘要第一门编程课常常使学生们不想继续他们的软件学习生涯。学生们难以理解计算机编程的逻辑。特别是那些身处不同文化的学生们不能很好应用逻辑思维,或者系统地遵循指示。数学的思维能力不能如愿地转移到编程的。难以描述写程序的思考过程,程序设计中解决问题的过程像启发式一样含糊。显然,积累的专门知识并不是那么容易描述出
2017-12-29 18:34:11 528
原创 树木园探险之旅
今天天气晴朗,你打算去树木园探险。土地爷爷跟你开了个玩笑:“咱们玩个游戏吧!我心中想一个数,你的任务是猜出我心中想的那个数。如果你猜小了,我会告诉你猜小了。如果你猜大了,我会告诉你猜大了。但是,一旦你猜大了一次后,那么下一次你再猜的时候,我只会告诉你猜对了或者猜错了,而不会告诉你大小。你猜对了,我便会告诉你。”你在想:这老头,必定是太久没人过来看他,闷得慌。那我就大发慈悲地陪你
2017-03-24 12:56:53 601
原创 各种排序的运行时间对比
冒泡排序[cpp] view plain copy //time:34.220s #include #include #include #include using namespace std; class MY{ int a; //public: friend o
2017-03-23 15:36:31 1500
原创 关于图的题
POJ 2186 强连通分量 分量图为什么别人的MemoryTime Code Length都比我少![cpp] view plain copy #include #include #include #include using n
2017-03-23 12:22:07 363
原创 半年内要完成的事
1. 做毕业设计时,我写了一个C语言的测试小程序,主体是一个for循环。icc的某些优化选项将它变成无限循环。为了找出发生什么事,要用gdb单步调试(一次运行一条机器指令)。2.翻译一篇讲述计算机专业入门课——编程教育的论文,Conditions for Successful Learning of Programming Skills。它道出了许多大一新生初学编程时的心声。2017年的目...
2017-03-13 15:58:21 374
原创 数字转换成字符串,int 转换成const char*
Question:将一个int类型转换成字符串。函数原型:const char* itoa(int val)负数前面要添个负号,正数不用。写了15min……const char* itoa(int val){ char* s=(char*)malloc(35); if(!s) return NULL; int sign=val&0x80
2016-04-14 15:19:14 8702 1
原创 找出数组中出现次数超过一半的数字
思想:每次找出一对不同的数字,删除。最后留下的即为所求。定义:若两个数不相等,则称它们“匹配”。用一个栈存放等待与栈中不同数字的数字们,即等待“
2016-04-13 14:56:25 459
原创 生成n位格雷码
//使用递归生成n位格雷码/*先生成n-1位格雷码,共有2^(n-1)个。然后将这2^(n-1)个格雷码逆序复制到接下来的2^(n-1)个位中。然后前2^(n-1)个最后补0。后2^(n-1)个补1。为什么要逆序复制呢?因为要保证相邻的格雷码只有一位不同。这样在这2^n个格雷码中,第2^(n-1)和第2^(n-1)+1只有第n位不同。*/#include#include#i
2016-03-28 08:43:42 397
原创 const Pointers and Pointer to const Objects 常量指针和指向常量对象的指针
//英文来源:C++ Primer, 4th editionint main(){ //Part of the problem in reading const declarations arises because the 'const' can go either before or after the type. //为什么有const的代码阅读起来会比较困难呢?
2016-03-25 09:17:12 268
原创 22.5-5求有向图的分量图
22.5-5求有向图的分量图1.求出强连通分量(1)第1次dfs,求出(逆)拓扑序(2)第2次对以逆图的逆拓扑序dfs,得到的DFS森林,便求出强连通分量。期间要记录结点v所属的强连通分量为scc_count。2.对于原图的每条边,若两个端点不属同一强连通分量,即!stronglyreachable(v,t),便加进DAG中参考资料:C++算法--图算法(第3版
2016-03-19 09:45:16 621
原创 二分查找:binary_search、lower_bound和upper_bound的实现
先来复习一下最经典的大一就学的binary_search。#include#include#includeusing namespace std;class MY{ int a;//public: friend ostream& operator <<(ostream& os,const MY &my){ os<<my.a;return os; }
2016-03-14 08:56:38 403
原创 图的BFS
#include#include#include#include#include#includeusing namespace std;const int M=100;enum COLOR{WHITE,GRAY,BLACK};struct VERTEX{ int index;//点的编号 int distance; int previous;//前驱结点编
2016-03-06 14:29:02 268
原创 poj 1458 最长公共子序列
迭代版:#include#include#include#includeusing namespace std;const int M=310;typedef char ELEM;ELEM X[M];ELEM Y[M];int c[M][M];int LCS_LENGTH(int XLen,int YLen){//cout<<XLen<<" "<<YLen<<endl;
2016-02-10 15:25:39 315
原创 用顺序统计树(红黑树扩张)解决逆序对POJ1804
#include#include#include#include//#includeusing namespace std;enum RBCOLOR{RED,BLACK};class RBNODE{public: int key; RBNODE* left; RBNODE* right; RBNODE* parent; RBCOLOR col
2016-02-05 17:06:28 494
原创 10.3-4 实现ALLOCATE和FREE,使双向链表在多数组表示法中在存储器保持紧凑,占前n个位置。
10.3-4实现ALLOCATE和FREE,使双向链表在多数组表示法中在存储器保持紧凑,占前n个位置。自由表Free初始化:0,1,2,...其实是一个stack。0是栈顶元素,Free是栈顶指针。下一个被分配之对象是最后被释放的。自由表只使用next数组。Free和双链表L交错。地址是数组下标,int类型。看了这篇blog,我就有灵感了。#include#def
2015-09-12 07:56:03 464
原创 10.3-2 10.3-3
10.3-2ALLOCATE和FREE函数无需变化。free自由表的初始化:每个元素存放一段长度为要分配的对象所占空间的连续地址的首地址。假设要分配的对象所占空间为size,则free自由表存放的地址为0, size, 2size, 3size, … , ksize, …当对象成功分配空间后,它得到以ksize为首地址,size为长度的一段连续空间。 注意:只有分配的空间都是一组同构对象,才能使用
2015-09-01 21:31:33 280
原创 遍历单链表一次,找出链表中间结点
//遍历单链表一次,找出链表中间结点//两个指针p和q,从头开始遍历,p走一次,q走两次。当q到尾端,p就到中间#include#includetypedef struct NODE{ char key;struct NODE* next;}NODE;NODE *L=NULL;void insert(NODE* p){//插入的结点成为新的链表头 p->next=L
2015-09-01 20:46:25 712
原创 O(1)时间删除单向循环链表给定结点
//O(1)时间删除单向循环链表给定结点(已知指向该结点的指针)/*若是不带哨兵的单链表,删除非最后结点可以在O(1)完成。但是,若删除的是最后结点,则必须修改最后结点的前驱的next为NULL,故此时不得不得到p的前驱(需要O(n))。单向循环链表则不一样了,每一个结点的next都非NULL(即都有后继)。*///带哨兵的单向循环链表。NIL的next是头结点,尾结点的next是NI
2015-08-18 20:39:44 409
原创 数组实现的队列(限制最大长度)的head、tail指针的修改方法。
数组长度是MAX+1(即length)。有一个位置是不用的。插入或者删除元素后,head或tail指针要增减1(模MAX+1)+1:1.经典方法(from严之data structures)head=(head+1)%(MAX+1);2.if(head==MAX) head=0; else head++;3.(from JAVA source code,ArrayDeque)只对数组长度lengt
2015-08-16 11:57:02 1035
原创 10.2-7 O(n)非递归逆转单向链表的n个元素。
//10.2-7 O(n)非递归逆转单向链表的n个元素。#include#includetypedef struct NODE{ char key;struct NODE* next;}NODE;NODE *L=NULL;void insert(NODE* p){//插入到头结点 p->next=L; L=p;}NODE* createnode(char
2015-08-16 11:16:31 245
原创 10.2-2 用单链表实现栈
//用单链表实现栈#include#includetypedef struct NODE{ char key;struct NODE* next;}NODE;NODE *L=NULL;void push(NODE* p){//插入的结点成为新的链表头 p->next=L;L=p;}void pop(void){//删除头结点 if(!L) puts("s
2015-08-15 15:55:12 324
原创 10.2-5 带哨兵的单向循环链表
//带哨兵的单向循环链表。NIL的next是头结点,尾结点的next是NIL#include#includetypedef struct NODE{ char key;struct NODE* next;}NODE;NODE *NIL=NULL;void insert(NODE* p){//插入到头结点 p->next=NIL->next; NIL->next
2015-08-15 15:53:26 466
原创 10.2-3 用单链表实现队列
//用单链表实现队列,设head和tail指针#include#includetypedef struct NODE{ char key;struct NODE* next;}NODE;NODE *head=NULL,*tail=NULL;void enqueue(NODE* p){//入队到tail后面 if(!tail) head=tail=p;//链表为空
2015-08-15 15:52:30 308
原创 不带哨兵的双向链表
//不带哨兵的双向链表#include#includetypedef struct NODE{ struct NODE*prev;char key;struct NODE*next;}NODE;NODE*L=NULL;//双链表L的表头NODE*search(char key){/*查找双链表L中第一个关键字为key的元素,并返回指向该元素的指针,不存在key则返回NULL
2015-08-15 15:51:28 396
原创 带哨兵的双向链表
//带哨兵的双向链表#include#includetypedef struct NODE{ struct NODE*prev;char key;struct NODE*next;}NODE;NODE*NIL=NULL;//双链表L的哨兵结点。NODE*search(char key)//每次循环省略对p!=NULL的检查{/*查找双链表L中第一个关键字为key的元素,并返回
2015-08-15 15:50:39 1366
原创 10.1-5 双端队列deque
/*双端队列deque,可在两端插入、删除。有MAX+1个位置(MAX个可用)*/#include#define MAX 6typedef char ElemType;typedef int bool;struct DEQUE{ int head;//指向第一个元素,初值0 int tail;//指向最后元素的下一个位置,初值0 ElemType q[MAX
2015-08-15 15:49:38 322
原创 10.1-6 两个栈实现一个队列
/*两个栈实现一个队列设两个栈为s1,s2入队:元素入栈到s1。出队:若s2非空,弹出s2栈顶元素;否则,将s1的所有元素倒入s2(s1栈底元素会到s2栈顶),再弹出s2栈顶元素*/#include#includeusing namespace std;typedef char ElemType;stack s1;stack s2;void enqueue(ElemTyp
2015-08-15 15:47:59 239
原创 10.1-7 两个队列实现一个栈
/*两个队列实现一个栈设两个队列为q1,q2入栈、出栈操作完成后,都会至少有一个队列为空。入栈:元素入队到非空队列(若q1,q2都空,入任意一队)出队:非空队列Q的元素出队,入队到空队列eQ。当非空队列Q剩下一个元素时,直接出队。此时,原来的空队列eQ变成非空队列Q,原来的非空队列Q变成空队列eQ。*/#include#includeusing namespace std;ty
2015-08-15 15:44:20 292
原创 10.1-2 在一个数组A[1..n]中实现两个栈,使得两个栈元素个数之和不为n时,两者不会上溢
/*在一个数组A[1..n]中实现两个栈,使得两个栈元素个数之和不为n时,两者不会上溢*/#include#define n 6typedef char ElemType;typedef int bool;ElemType A[n];int top1=1;//栈1的栈顶指针int top2=n;//栈2的栈顶指针//永远都指向栈顶元素的下一个位置/*栈1的栈底是A[1],元素
2015-08-15 15:41:09 1013
原创 算法导论 10.2-6 带哨兵的双向链表合并两个不相交的集合
/*O(1)合并S1、S2。S1、S2集合不相交。*//*需要能在O(1)时间内访问到S1、S2的头和尾的链表:带头结点和尾结点的单链表;双向循环链表。*///带哨兵的双向链表:S1头接S2尾,S2头接S1尾。#include<stdio.h>#include<stdlib.h>typedef struct NODE{ struct NODE*prev;char key;str
2015-08-15 15:32:09 595
转载 MY HOPES OF COMPUTING SCIENCE Edsger W.Dijkstra
http://www.cs.utexas.edu/users/EWD/transcriptions/EWD07xx/EWD709.html
2015-05-21 19:04:52 293
原创 算法导论9.3-8 找出已排序的2个数组X[1..n]和Y[1..n]的共2n个数的中位数
//O(nlgn)找sorted的X[1..n]和Y[1..n]的共2n个数的中位数//先排序,再找第n大的数(下中位数)#include#include#includeusing namespace std;const int M=5000000;struct FOO{ int num; int status;}A[M*2+5];bool cmp(const F
2015-03-11 16:55:43 1117
原创 同时找出数组的最大值和最小值
虽说第一个方法在时间复杂度的分析上比第一个要少n/2,但是我在电脑上测试的结果,运行时间是差不多的。搞不懂~//朴素算法:分别找出最大值和最小值。2n次比较#includeint A[50000010];int FIND_MINIMUM_AND_MAXIMUM(int A[],int n){ int min=A[0],max=A[0],i; for(i=1;i<n;i+
2015-03-10 10:52:38 945
原创 描述一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数 X 时,判断出S中是否存在有两个其和刚好等于 X 的元素。
/*暴力O(n^2):n个整数的集合S和另一个整数x,确定S中是否存在两个其和刚好为x的元素*/#includeint S[1000000];int judge(int S[],int n,int x){ int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(S[i]+S[j]==x)
2015-03-09 12:17:18 2164
原创 quicksort
#include#includeusing namespace std;int A[100000];/*At the beginning of each iteration of the loop , for any arrayindex k,1. If p <= k <= i, then A[k]<= pivot.2. If i+1 pivot.3. If k = r, th
2015-02-25 17:20:25 285
原创 矩阵乘法的三个版本实现
version1#include//Matrix multiplication O(n^3) 按照定义算const int N=200;void Multiply(int A[][N],int B[][N],int C[][N],int n){//C=A*B int i,j,k; for(i=0;i<n;i++) for(j=0;j<n;j++){
2015-02-24 15:35:35 461
原创 min heap priority queue 最小堆实现的优先队列
#include#include#includeint A[10000000];using namespace std;inline int PARENT(int i){ return i>>1;//return i/2;}inline int LEFT(int i){ return i<<1;//i*2}inline int RIGHT(int i){
2015-02-22 17:00:07 801
jpcap-0.7源代码
2016-04-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人