XIN队算法

注:名称由莫队算法改编而来

从luogu搬过来了。。。

\(newly\;upd:2021.7.8\)

\(newly\;upd:2021.6.6\)

OI至高算法,只要XIN队算法打满,保证所有比赛 \(rk1\),碾爆标程,让对手望尘莫及。

请慎用

XIN队算法:

1.遇到不会做的题目不用慌,你要想到你还有XIN队算法,仔细读题,理解题目意义,然后开始准备写XIN队算法。

2.这时候,你可以潇洒地敲出:

void xin_team()

然后开始暴搜

XIN队算法框架:

    void xin_team(参数)
{
if(边界) return;
for(register int i=1;i<=n;++i)
if(条件1)
{
状态转移
xin_team(参数);
状态回溯
}
}

但是,对于不同的题目, void xin_team 并不能解决所有的题目,那该怎么办呢???

对于很多不能用XIN队\(1\)号算法的,大多数可以使用XIN队\(2\)号算法:

next_permutation(a+1,a+n+1); 大法

框架:


void xin_team2
{
do
{
答案记录
}while(next_permutation(a+1,a+n+1));
}

非常完美

但是,由于XIN队算法时间复杂度 只有 \(\mathcal O(2^n)\)或者是\(\mathcal O(n!)\),所以我们提出优化:

优化XIN队算法:

非常不建议使用

框架:

        srand((unsigned)time(0));
do
{
random_shuffle(a+1,a+n+1);
答案记录
}while(next_permutation(a+1,a+n+1));

复杂度:

\[\mathcal O(\lim_{1\to\infty})
\]

还附加超大常数

XIN队算法升级:二维XIN队

有很多很多的题目无法用普通的\(XIN\)队算法解决,这时候我们就需要\(XIN\)队算法升级版:\(\color{red}\huge_{\text{二维XIN队}}\)

二维\(XIN\)队对于代码能力的提升是显而易见的,然而对复杂度的提升更是显而易见的,二维\(XIN\)队算法框架:

比方说:

[SDOI2015]排序

使用此算法,轻松 \(30pts\)

	void xin_team2(int x,int now)
{
if(边界)
{
xin_team2(x,now);
记录
return ;
}
for(register int i=1;i<=n;++i)
{
记录状态
xin_team(x,now+1);
回溯状态
}
}
void xin_team1(int x,int now)
{
if(边界)
{
xin_team2(x,now);
记录
return ;
}
for(register int i=1;i<=n;++i)
{
记录状态
xin_team(x,now+1);
回溯状态
}
}

复杂度:

\[\mathcal O(n! * 2^n)
\]

并且只能说是大概

我们发现,对于一般的题目,大多是 \(dp\) 解决,然而纯粹运用上述方法只能拿到部分分数,甚至全部 \(TLE\) 所以,记忆化 \(XIN\) 队算法应运而生。


对于优秀的记忆化 \(XIN\) 算法,想要什么状态就去找什么状态,然后就可以实现飞一般的提升。。。

包准快

使用记忆化 \(XIN\) 队算法,\(NOI\)包准不打铁!

比方说这个题: \(NOI2020\)美食家

使用 \(XIN\) 队算法,轻轻松松 \(40pts\)

框架:

	void xin_team(int i,int j)
{
if(f[i][j]) return f[i][j];
for(k ...)
xin_team(k,~);
return f[i][j];
}

算法的时间复杂度就是:

\[\mathcal O (\prod_{i=1}^{n} state_{num_i})
\]

\(num\)为状态,复杂度总体海星。。。

然而:

\(\color{red} \huge{\text{方程推不出}}\)

\(\color{green} \huge{\text{亲人两行泪}}\)





\(XIN\) 优化分块预处理

一个月没更了,这次在刷题的时候发现了最新的 \(XIN\) 队算法应用

这是在写蒲公英的时候发现的。

做了好长时间,中途还跑去做树链去了。



时间相差的确实长了一些。。。

在用分块解决这个问题的时候。

发现狂 \(T\) 不止。

但是。

不知道为什么在其他的 \(OJ\) 上都可以过掉

只不过就是很慢。

但是在学校的 \(OJ\) 上最多只有 \(70pts\)。

好评测机

然而并不敢找老师去开大时限

所以我只能优化暴力。。。

然后。

我发现在预处理 \(p_{i,j}\) 的时候,时间差的很多很多。

然而如果用 \(query\) 函数而不是暴力去搞就会错。。。

因为有些需要的状态还没有附上值但是接下来处理需要用到。。。

所以我集中生智

发现了 \(XIN\) 队优化分块预处理法

我都没想到 \(XIN\) 队算法还有优化别的东西的一天

主要思想就是 缺啥找啥

然后状态就有了。。。

双指针突然不香了 \(\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\) --摇摆兵

然后飞快

	void xin_team(int x,int y)
{
if(p[x][y]) return;
if(abs(y - x) <= 2) {p[y][x] = p[x][y] = query(l[x],r[y],0); return;}
xin_team(x+1,y-1);
p[x][y] = p[y][x] = query(l[x],r[y],0);
}

\(\color{red}{\huge{\uparrow \text{精华}}}\)

\(\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\huge{record}\)

XIN队算法的更多相关文章

  1. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  3. NPY and girls-HDU5145莫队算法

    Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  4. Codeforces617 E . XOR and Favorite Number(莫队算法)

    XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...

  5. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...

  6. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  7. 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...

  8. Codeforces 617E XOR and Favorite Number(莫队算法)

    题目大概说给一个序列,多次询问区间异或和为k的连续子序列有多少个. 莫队算法,利用异或的性质,通过前缀和求区间和,先处理出序列各个前缀和,然后每次区间转移时维护i以及i-1前缀和为某数的个数并增加或减 ...

  9. 信心题--FUOJ2226(莫队算法)

    http://acm.fzu.edu.cn/problem.php?pid=2226 信心题,还说是信心题,题目给的真好.但是一点都不像信心题. 又是一个新的算法,莫队算法 莫队算法是一个用数组就可以 ...

随机推荐

  1. Java第二次博客作业

    Java第二次博客作业 时间过的很快啊,在不知不觉中这门课程的学习也就快要过去一半了,现在就来总结一下在这个第二个月的学习当中存在的问题以及得到的心得. 1.前言 第四次题目集和第五次题目集给我的感觉 ...

  2. java处理方法的多个返回值

    我第一次接触到元组是在java编程思想这本书中,当时我正为方法的多个返回值苦恼.因为我之前处理多个返回值方法的时候,要不建一个新的实体类,要不在接收的方法中建立一个对象,返回值之前给其赋值,要不通过异 ...

  3. C#winform的Richtextbox控件实现自动滚动到最后一行功能

    这里有两种情况 如果是采用的是richtextbox的AppendText的方法添加的内容,则只需 设置HideSelection为false 如果采用的是其他添加内容的方法,则需要添加TextCha ...

  4. DOS命令行(1)——Windows目录与文件应用操作

    cd 1.使用cd快速切换到指定盘符与目录中 命令格式1:cd [/d] [<盘符>][<路径>] 或 chdir [/d] [<盘符>][<路径>] ...

  5. 基于SpringBoot 、AOP与自定义注解转义字典值

    一直以来,前端展示字典一般以中文展示为主,若在表中存字典值中文,当字典表更改字典值对应的中文,会造成数据不一致,为此设置冗余字段并非最优方案,若由前端自己写死转义,不够灵活,若在业务代码转义,臃肿也不 ...

  6. 玩转STM32MP157- 使用fbtft驱动 lcd ili9341

    之前使用了 fbtft 成功驱动了lcd st7735r,现在尝试下驱动 ili9341, 配置 跟之前用 fbtft 驱动 st7735r 一样,先用 make menuconfig 配置内核,添加 ...

  7. Unity接入ShareSDK实现QQ登录和QQ分享、微信分享

    原文链接:Unity接入ShareSDK实现QQ登录和QQ分享.微信分享 由于微信登录需要企业审核,我这里就不说明了,有需要的可以去官网看一下文档,和QQ登录比多了一个打包的步骤. 第一步:到官网申请 ...

  8. 温故知新,基于Nexus3和Docker搭建私有Docker Mirrors镜像库

    前言 接着上一篇文章关于基于Nexus3和Docker搭建私有Nuget服务的探索,我们可以进一步利用Nexus3来创建一个私有的Docker镜像库满足内部需求. 仓库类型 hosted: 本地存储, ...

  9. 关于XXE漏洞

    XXE漏洞 0x01.xxe是什么 介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞 1.1xml定义 XML用于标记电子文件使其具有结构性的标记 ...

  10. Linux中Crontab的用法

    1.crontab的概念: crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行.可以使用它在每天的 ...