回文距离求解



前言:

linux中信号提供了软中断的作用。提供了一种处理异步时间的方法 ,  可以通过信号合理的安排异步任务。

linux定义了以下主要的系统信号:

名称                        默认动作                        说明

SIGHUP                   终止进程                        终端线路挂断

SIGINT                   终止进程                        中断进程

SIGQUIT                 建立CORE文件                 终止进程,并且生成core文件

SIGILL                    建立CORE文件                非法指令

SIGTRAP                 建立CORE文件                 跟踪自陷

SIGBUS                  建立CORE文件                总线错误

SIGSEGV                建立CORE文件                段非法错误

SIGFPE                  建立CORE文件                浮点异常

SIGIOT                  建立CORE文件                 执行I/O自陷

SIGKILL                 终止进程                      杀死进程

SIGPIPE                终止进程                      向一个没有读进程的管道写数据

SIGALARM             终止进程                     计时器到时

SIGTERM              终止进程                       软件终止信号

SIGSTOP              停止进程                     非终端来的停止信号

SIGTSTP              停止进程                      终端来的停止信号

SIGCONT              忽略信号                    继续执行一个停止的进程

SIGURG                忽略信号                       I/O紧急信号

SIGIO                  忽略信号                       描述符上可以进行I/O

SIGCHLD              忽略信号                    当子进程停止或退出时通知父进程

SIGTTOU              停止进程                      后台进程写终端

SIGTTIN               停止进程                         后台进程读终端

SIGXGPU               终止进程                       CPU时限超时

SIGXFSZ              终止进程                        文件长度过长

SIGWINCH           忽略信号                     窗口大小发生变化

SIGPROF             终止进程                       统计分布图用计时器到时

SIGUSR1             终止进程                   用户定义信号1

SIGUSR2             终止进程                   用户定义信号2

SIGVTALRM        终止进程                     虚拟计时器到时

应用:

下面我们应用SIGALARM,设置每秒执行一次的动作:

    struct itimerval oneSec;

     signal(SIGALRM, Demo_updateTime);
        oneSec.it_value.tv_sec = 1;
        oneSec.it_value.tv_usec = 0;
        oneSec.it_interval.tv_sec = 1;
        oneSec.it_interval.tv_usec = 0;
        setitimer(ITIMER_REAL, &oneSec, NULL);

Demo_updateTime()函数就是注册的每秒执行一次的函数。

 switch(signo){
        case SIGALRM:
            time(&timeval) ;

            localtime_r(&timeval, &tmCur) ;

            //update date only once one day
            if(tmOld.tm_mday != tmCur.tm_mday)
            {
                char temp[40];

                //get day of week from this call only.
                ctime_r(&timeval, temp);

                sprintf(osdStr,"%04d-%02d-%02d ",tmCur.tm_year+1900,
                        tmCur.tm_mon+1,tmCur.tm_mday);

                strncat(osdStr,temp,3);

            }

实现精度较高的定时功能的话,就要使用setitimer函数。

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

which为定时器类型,setitimer支持3种类型的定时器:

ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号。

ITIMER_VIRTUAL: -以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。

ITIMER_PROF: 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。

setitimer()第一个参数which指定定时器类型(上面三种之一);第二个参数是结构itimerval的一个实例;第三个参数可不做处理。

setitimer()调用成功返回0,否则返回-1。

struct itimerval {

struct timeval it_interval;

struct timeval it_value;

};

struct timeval {

long tv_sec;

long tv_usec;

};

需要signal.h和sys/time.h

it_interval指定间隔时间,it_value指定初始定时时间。如果只指定it_value,就是实现一次定时;如果同时指定 it_interval,则超时后,系统会重新初始化it_value为it_interval,实现重复定时;两者都清零,则会清除定时器。

tv_sec提供秒级精度,tv_usec提供微秒级精度,以值大的为先,注意1s = 1000000us。

ovalue用来保存先前的值,常设为NULL。

如果不需要这么高的精度,可用用alarm()函数:

ALARM介绍

alarm也称为闹钟函数,alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。

所需头文件

  #include<unistd.h>

函数原型

  unsigned int alarm(unsigned int seconds)

函数参数

  seconds:指定秒数

函数返回值

  成功:如果调用此alarm()前,进程已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。

  出错:-1

回文距离求解,布布扣,bubuko.com

时间: 2024-11-03 23:33:29

回文距离求解的相关文章

回文距离

编程语言要求:Java C# C C++ 难度等级: 有效期: 2014-06-06 至 2015-06-06 答题时长:120分钟 Njzy在对回文数的学习过程中发现了一个有趣的问题. 这个问题是求一个数的回文距离.一个数的回文距离的定义是它减去一个回文数的绝对值的最小值. 比如:121的回文距离就是0,因为|121-121|=0,123的回文距离是2,|123-121|=2 输入描述: 输入包含多组测试数据,每组测试数据包含一个整数a, (0<a<10^18). <="&q

Manacher 算法讲解 O(N)复杂度的 最长回文子串求解

求解最长回文子串的方法很多,有几种常见的O(N^2)的最长回文子串求解方法,比如说枚举中心位置向两边扩展,动态规划等,大部分朋友应该都比较熟悉. Manacher算法相比于上面两种方法,时间复杂度是O(N),空间复杂度也是O(N),可以说是快速求解决回文子串的利器.下面介绍这一算法的思想,以及在文末给与它的实现. 我们以字符串 "ACBCABBB"为例(只考虑长度为奇数的回文串,待会会说明为何这么做),这里引入回文半径的概念,回文半径是指以该字符为中心的回文串的半径,比如ABA,B字符

leetcode-5 最长回文子串(动态规划)

题目要求: * 给定字符串,求解最长回文子串 * 字符串最长为1000 * 存在独一无二的最长回文字符串 求解思路: * 回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文字符串, * 那么P[i+1,j-1]也是回文字符串.这样最长回文子串就能分解成一系列子问题了. * 这样需要额外的空间O(N^2),算法复杂度也是O(N^2). * 首先定义状态方程和转移方程: * P[i,j]=0表示子串[i,j]不是回文串.P[i,j]=1表示子串[i,j]是回文串. * P

HiHo 1032 最长回文子串 (Manacher算法求解)

Manacher算法o(n)求解最长回文子串问题 非常巧妙 #include<bits/stdc++.h> using namespace std; char str[2000020],s[2000020]; int p[2000020]; int len,id,mx; void pre() //对字符串进行预处理 { len=strlen(s); str[0]='$'; str[1]='#'; for(int i=0;i<len;i++) { str[i*2+2]=s[i]; str[

HDU 1431 素数回文【暴力求解】

/* 题目大意:找一个范围内的所有素数回文数 解题思路:打一个表将1亿以内所有的素数回文数找出来,大概有780个这样子 关键点:暴力求解 解题人:lingnichong 解题时间:2014-08-29 12:02:55 解题体会:如果按一般方法打个素数表,很容易超内存(MLE),所以就先将所有的素数回文全部算出来,再在这个数组里面找在题上那个范围的所有素数回文数 */ 素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 655

最长连续公共子串、最长公共子串(可以非连续)、最长回文串(连续)、最长回文串(可以不连续)、最长递增数组的求解

问题:最长连续公共子串.最长公共子串(可以非连续).最长回文串(连续).最长回文串(可以不连续).最长递增数组.长方形镶嵌最多的求解 方法:上述问题有相似性,都可以采用动态规划进行求解. (1)最长连续公共子串: 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=0; (2)最长公共子串(可非连续): 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=dp[i-1][j-1]; (3)最长回文

谈谈回文子串

引子 1. 先讲个歪果仁的故事,在庞贝古城的废墟中,有一座名为赫库兰尼姆的城市,在这个遗迹中人们发现一块石碑,石碑上写着一个非常有趣的拉丁串:sator arepo tenet opera rotas翻译到中文大概意思是:一个叫做arepo的耕作者,他用力地把着车轮. 这样排列一下,从上下左右读都是一样的,歪果仁挺会完的. 2. 让我印象更深刻的是高中老师给我们讲的一个故事,有一天宋代著名文学家苏轼和他的妹妹苏小妹正在荡舟湖上,欣赏着风景,忽然有人呈上秦少游捎来的一封书信.打开一看,原来是一首别

HDU 3068 最长回文 (manacher算法)

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9188    Accepted Submission(s): 3159 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组

回文路径

约翰有一片牧场,这片牧场可以分为 N ×N 个方格,每个方格里有一个英文字母表示它的类型. 贝西要从牧场的左上角出发,一路向右或向下移动到牧场的右下角.贝西希望她的足迹能组成一条回 文.所谓回文,就是翻转后仍然保持不变的字符串.请问贝西有多少种走法可以使得她的足迹组成回 文?注意两条不同的路径可能会构成了同样的回文,这样的话这两条路径都要作为不同的方案数计入答 案.由于结果可能会很大,输出答案模 109 + 7 的余数即可 f[d][x][xx]:位于(x,y)(xx,yy),距离对角线d,y=