我的第一个想法其实是毫无头绪

根本就想不到dp,直接就写了爆搜
后来讲了才知道。。。

这种dp的状态好像是一类dp的模型,他们的状态都有这样的一维:以第i个数结尾。
这样的dp有什么样的标志呢?
以第i个数为结尾,说明这个状态和第i个数是有关系的,一般是选择数列中的数字
这种状态在于他的状态出来了,转移一般也能够直接显示出来,然后在转移中会枚举前面的状态进行转移,然后就可以在枚举中进行优化。
最后一般是O(n)或者O(n log n)的复杂度.

这里有一道这样的dp题目

http://acm.hdu.edu.cn/showproblem.php?pid=4055
这道题目呢,不要去考虑每一个数的大小,在我们的眼里,它应该是只能是一个大小的关系,至于到底是几,在每一个状态里面根本就没有考虑的必要。也没有意义
设f[i][j]为选到了第i个数,目前以j结尾的可能性。
转移就很明显了
这里就不讲了

这道题目和这个T3是一样的,状态中都有一维是以i结尾。
因为在目前,我们的决策只是取决于上一个数的大小,所以只用记录一下就行了

这道题目呢,我们发现这是异或。
异或有一个奇妙的性质,两个数之间如果他们差的绝对值越小,他们的异或值越小。
这个是我写上一个T3时发现的。。。

那么,我们先拍个序,就可以发现,如果要满足这个任意两个数的异或都要大于x,那就是要满足,任意一个数和其他的数异或的最小值都要大于x
上面已经讲了,一个数异或的最小值就是和它最近的数的异或,在排序后就是他左右的数
所以我们只需要保证目前这个阶段在转移的时候合法即可,这个阶段的决策完全不会影响到其他任何的决策.这其实是我应该想到的。

所以就有了O(n^2)暴力

//¼ÓÓÍ
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int f[100001],n,a[100001],x;
inline ll read()
{
char c=getchar();ll a=0,b=1;
for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;
return a*b;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read();x=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
sort(a+1,a+1+n);
f[1]=0;
for(int i=1;i<=n;i++)
{ f[i]++;
for(int j=1;j<i;j++)
{
if((a[j]^a[i])>=x)
{
f[i]+=f[j];
}
}
}
int ans=0;
for(int i=1;i<=n;i++)ans+=f[i];
cout<<ans<<endl;
return 0;
}

真不戳

我们发现这个转移中,每一次都要用O(n)去查找a[j]使a[i]^a[j]比x大。
我们需要一个东西来快速查找比x大的a[i]^a[j],这时我们想到了trie树.
我们把每一个f[j]都先放进trie数中,每次就是在询问a[i]^a[j]>x的f[j]之和,这个可以直接在trie树上维护子树和。

时间复杂度O(n log max(a[i]))

一次考试的简单T3的更多相关文章

  1. Java实验项目二——小学生考试系统(简单四则运算)

    Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...

  2. 【考试】简单的sql语句

    )显示正好为5个字符的员工的姓名 HR@ORA11GR2>select last_name,first_name from employees ; )显示不带有"R"的员工的 ...

  3. [总结] NOIP 前的考试记录

    sb博主又犯sb错误了! 他觉得以往模拟赛因为犯sb错误扔的分足足有1k分了! 于是他想记录一下自己犯的sb错误看看自己到底有多sb! 嗯就从今天开始吧 2018.9.28 1. 二分边界写错.骚什么 ...

  4. 阿里云 ACP 考试学习过程分享

    目录 考证意义 学习方法 ACP 报名 学习安排[重要] 考试当天 其他 经验贴 考证意义 证多不压身,证比项目经历更具有说服力,证是行业的标准认证.更多时候,是有证的人说,"证其实不重要& ...

  5. NOIP模(ka)拟(chang)测试30 考试报告

    应得分:300 实得分:210 毒瘤卡常出题人,卡掉90分! T1 Return 开个副本数组sort一下,unique去重就可以啦.时间复杂度$ O(nlog2(n)) $ T2 One 其实就是约 ...

  6. CDQZ 2017 游记

    Day0: 提前放了一整天假,颓过去了.老吕让我去给B层的讲课,ppt还没做,只能在飞机上赶了QAQ.然后从上午到了衡水就一直在路上或者天上,到了晚上才到学校,然而ppt还是没有做完.还有,鄂尔多斯真 ...

  7. csp模拟69

    考试一眼看出$T3$原题,但是没做过,心态爆炸. 然后去看$T1$,迷之认为它是矩阵快速幂?推了一个小时,发现在转移过程中方案数并不均匀分布,然后就挂了. 决定先去看T3,只会$O(n\sqrt{n} ...

  8. $NOIP2018$ 暴踩全场计划实施方案

    \(NOIP2018\) 暴踩全场计划实施方案 改完题辣!该更博辣!(这么激动干嘛反正又没人看) 我要取一个霸气的名字.于是就这样了.原本打算是暴踩yyb计划实施方案的(来啊互相伤害啊) 信心流选手就 ...

  9. NOIP模拟测试14「旋转子段·走格子·柱状图」

    旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...

  10. hdoj 2036 改革春风吹满地

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

随机推荐

  1. 【LeetCode摩尔投票】有趣的简单题:数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-l ...

  2. Java 设计模式实战系列—工厂模式

    在 Java 开发中,对象的创建是一个常见的场景,如果对象的创建和使用都写在一起,代码的耦合度高,也不利于后期的维护.我们可以使用工厂模式来解决这个问题,工厂模式是一个创建型模式,将对象的创建和使用分 ...

  3. 微型神经网络库MicroGrad-基于标量自动微分的类pytorch接口的深度学习框架

    一.MicroGrad MicroGrad是大牛Andrej Karpathy写的一个非常轻量级别的神经网络库(框架),其基本构成为一个90行python代码的标量反向传播(自动微分)引擎,以及在此基 ...

  4. Flutter ncnn 使用

    Flutter 实现手机端 App,如果想利用 AI 模型添加新颖的功能,那么 ncnn 就是一种可考虑的手机端推理模型的框架. 本文即是 Flutter 上使用 ncnn 做模型推理的实践分享.有如 ...

  5. ITIL4与Devops(一)

    目录 一.服务管理与ITIL 1.1 服务管理现状 1.2 服务管理原则 1.3 ITIL版本发展历程 ITIL2 服务支持 服务交付 服务战略 ITIL3 框架 职能 ITIL 2011 流程的基本 ...

  6. Unity UGUI的PointerEventData的介绍及使用

    Unity UGUI的PointerEventData的介绍及使用 1. 什么是PointerEventData? PointerEventData是Unity中UGUI系统中的一个重要组件,用于处理 ...

  7. 用 Python 自动创建 Markdown 表格 - 每天5分钟玩转 GPT 编程系列(4)

    目录 1. 他们居然问我要 Prompts 2. 让 GPT-4 来写代码 2.1 我对 DevChat 说 2.2 DevChat 回答 2.3 我又对 DevChat 说 2.4 DevChat ...

  8. 从 HTTP/1.1 到 HTTP/3

    从 HTTP/1.1 到 HTTP/3,解决了一些旧协议的问题,引入了好用的新功能. HTTP/1.1 HTTP/1.1 通过在传输层和应用层之间增加 SSL/TSL 解决数据不安全的问题,但它本身还 ...

  9. Unity三维数学总结

    三维向量和三角函数   三维向量 向量是指一个同时具有大小和方向,且满足平行四边形法则的几何对象. 向量的模 po点相对于世界坐标原点的距离: po.magnitude. 标准向量,归一向量,指的是将 ...

  10. Linux 过滤进程和端口号

    IDEA覆盖率测速显示百分比 ctrl + alt + F6 取消勾选 ps - ef | grep java过滤Java进程 netstat -anop | grep 74933 过滤端口号 重命名 ...