分段打表

对于某些依赖项仅与n有关或仅与前几项有关时的打表方法。

  • 一个典型的例子是求1e9内n阶乘取模的运算。
    可以提前处理出1e7,2e7...的值,如果需要某个值时先取出低于它的最大的已知数从当前位置开始计算。间隔可以不是1e7,根据需要(权衡时间与程序大小限制)也可以更改为其他的
  • 另一个例子是求斐波那契数列取模的运算。
    比如求1e9内的斐波那契取模运算,可以求1e7,1e7+1,2e7,2e7+1...由此来在O(1e7)的时间内求出1e9内任意斐波那契数。

打表找规律

某些题目中的输出与输入有着较为简单的数学关系,时间复杂度估算O(1)(多项式)或者O(logn)(快速幂)或者O(n)(递推式)的均可考虑打表找规律。
对于这一类题目输入数据一般每个测试点只有一或少数几个数,存在ans=f(x)或ans=kf(x)等其他关系,并且由题目的意思答案通常要在输入数据经过一系列复杂的计算得到。
对于该类题目通常有以下几种找规律方法:

  • 通过暴力列出前若干项答案
  • 判断数据的增长级别(确认大致是多项式级还是指数级等)
  • 尝试猜测公式,并列出更多数据加以验证。
  • 难以猜测的尝试前后项作差或者考虑前缀和等
  • 除上一点还可尝试分类(如奇偶单独处理,质数合数单独处理,2^k单独处理等等)

注意:本文基于lnmp一键安装包安装Nginx环境

进入Nginx配置文件夹

cd /usr/local/nginx/conf/vhost/

如果不是通过lnmp一键安装包安装的Nginx环境请自行搜索配置文件夹位置。

备份配置文件

cp ./你的网站.conf ./你的网站.conf.bak

修改配置文件

nano ./你的网站.conf

server
    {
        listen 80;
        …………
    }

中的内容全部删去,并添入以下信息:

server
    {
        listen 80;
        #listen [::]:80;
        server_name 你的网站 ;
        rewrite ^(.*)$  https://$host$1 permanent;
    }

Ctrl+x,回车,选择y,保存退出
如果在第一步中提示nano不存在,可使用

sudo apt-get install nano 

sudo yum install nano 

安装nano程序。

重启lnmp一键安装包环境

lnmp restart

如果不是通过lnmp一键安装包安装的Nginx环境可以通过重启服务器方式来刷新nginx的配置规则。

这是nginx的设置时没有注意支持pathinfo导致的,具体关于php pathinfo的信息可以在网上搜索到。
以下是该问题的解决方案

使用lnmp一键安装包安装的 Nginx

进入Nginx配置文件夹

cd /usr/local/nginx/conf/

备份 enable-php.conf 文件

cp ./enable-php.conf ./enable-php.conf.bak

修改 enable-php.conf 文件

nano ./enable-php.conf

在结尾大括号前添加如下内容:

include pathinfo.conf;

修改后文件内容为:

    location ~ [^/]\.php(/|$)
    {
        #try_files $uri =404;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        include pathinfo.conf;
    }

如果提示nano命令不存在,可使用

sudo apt-get install nano

sudo yum install nano

安装nano程序

重启lnmp环境

lnmp restart

自行安装的Nginx

参考资料:服务器环境配置 - Typecho Docs

一般的出现这种情况时,nginx.conf里的的location设置都是类似这样

location ~ .*\.php$

要支持pathinfo,要改成

location ~ .*\.php(\/.*)*$

然后在location里加上

            set $path_info "";
            set $real_script_name $fastcgi_script_name;
            if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                    set $real_script_name $1;
                    set $path_info $2;
            }
            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
            fastcgi_param SCRIPT_NAME $real_script_name;
            fastcgi_param PATH_INFO $path_info;

在某些老版本的php里面,可能还要打开php.ini里的cgi.fix_pathinfo

cgi.fix_pathinfo = 1

设置完之后重启服务器

关于本教程

Typecho是什么?

Typecho 是由 type 和 echo 两个词合成的,来自于开发团队的头脑风暴。

Type,有打字的意思,博客这个东西,正是一个让我们通过打字,在网络上表达自己的平台。Echo,意思是回声、反馈、共鸣,也是PHP里最常见、最重要的函数,相信大部分PHP爱好者都是从 echo 'Hello,world!'; 开始自己的PHP编程之路的。

名称就表明 Typecho 是一款博客程序,它在 GPL version 2 许可证下发行,基于 PHP (需要 PHP5 以上版本)构建,可以运行在各种平台上,支持多种数据库(Mysql, PostgreSQL, SQLite)。

为什么要使用Typecho?

轻量高效

仅仅 7 张数据表,加上不足 400KB 的代码,就实现了完整的插件与模板机制。超低的 CPU 和内存使用率,足以发挥主机的最高性能。

先进稳定

原生支持 Markdown 排版语法,易读更易写。支持 BAE/GAE/SAE 等各类云主机,即使面对突如其来的高访问量,也能轻松应对。

简洁友好

精心打磨过的操作界面,依然是你熟悉的面孔,更多了一份成熟与贴心。每一个像素的剪裁,都只为离完美更进一步。

有关链接

Typecho官网
Github上的typecho


- 阅读剩余部分 -

关于本教程

LNMP是什么?

LNMP架构指 服务器+Nginx+MySQL+PHP
稳定、功能丰富、安装配置简单、低系统资源
是最常用的网站服务器架构

为什么要使用LNMP一键安装包?

编译安装需要输入大量的命令,如果是配置生产环境需要耗费大量的时间。使用lnmp一键安装包无需一个一个的输入命令,无需值守,编译安装优化编译参数,提高性能,解决不必要的软件间依赖,特别针对配置自动优化。在搭建完成之后的维护也很方便。

参考资料:

lnmp一键安装包官网



- 阅读剩余部分 -