一次考试的简单T3



我的第一个想法其实是毫无头绪
根本就想不到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的更多相关文章
- Java实验项目二——小学生考试系统(简单四则运算)
Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建 ...
- 【考试】简单的sql语句
)显示正好为5个字符的员工的姓名 HR@ORA11GR2>select last_name,first_name from employees ; )显示不带有"R"的员工的 ...
- [总结] NOIP 前的考试记录
sb博主又犯sb错误了! 他觉得以往模拟赛因为犯sb错误扔的分足足有1k分了! 于是他想记录一下自己犯的sb错误看看自己到底有多sb! 嗯就从今天开始吧 2018.9.28 1. 二分边界写错.骚什么 ...
- 阿里云 ACP 考试学习过程分享
目录 考证意义 学习方法 ACP 报名 学习安排[重要] 考试当天 其他 经验贴 考证意义 证多不压身,证比项目经历更具有说服力,证是行业的标准认证.更多时候,是有证的人说,"证其实不重要& ...
- NOIP模(ka)拟(chang)测试30 考试报告
应得分:300 实得分:210 毒瘤卡常出题人,卡掉90分! T1 Return 开个副本数组sort一下,unique去重就可以啦.时间复杂度$ O(nlog2(n)) $ T2 One 其实就是约 ...
- CDQZ 2017 游记
Day0: 提前放了一整天假,颓过去了.老吕让我去给B层的讲课,ppt还没做,只能在飞机上赶了QAQ.然后从上午到了衡水就一直在路上或者天上,到了晚上才到学校,然而ppt还是没有做完.还有,鄂尔多斯真 ...
- csp模拟69
考试一眼看出$T3$原题,但是没做过,心态爆炸. 然后去看$T1$,迷之认为它是矩阵快速幂?推了一个小时,发现在转移过程中方案数并不均匀分布,然后就挂了. 决定先去看T3,只会$O(n\sqrt{n} ...
- $NOIP2018$ 暴踩全场计划实施方案
\(NOIP2018\) 暴踩全场计划实施方案 改完题辣!该更博辣!(这么激动干嘛反正又没人看) 我要取一个霸气的名字.于是就这样了.原本打算是暴踩yyb计划实施方案的(来啊互相伤害啊) 信心流选手就 ...
- NOIP模拟测试14「旋转子段·走格子·柱状图」
旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a ...
- hdoj 2036 改革春风吹满地
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
随机推荐
- 【LeetCode摩尔投票】有趣的简单题:数组中出现次数超过一半的数字
数组中出现次数超过一半的数字 https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-l ...
- Java 设计模式实战系列—工厂模式
在 Java 开发中,对象的创建是一个常见的场景,如果对象的创建和使用都写在一起,代码的耦合度高,也不利于后期的维护.我们可以使用工厂模式来解决这个问题,工厂模式是一个创建型模式,将对象的创建和使用分 ...
- 微型神经网络库MicroGrad-基于标量自动微分的类pytorch接口的深度学习框架
一.MicroGrad MicroGrad是大牛Andrej Karpathy写的一个非常轻量级别的神经网络库(框架),其基本构成为一个90行python代码的标量反向传播(自动微分)引擎,以及在此基 ...
- Flutter ncnn 使用
Flutter 实现手机端 App,如果想利用 AI 模型添加新颖的功能,那么 ncnn 就是一种可考虑的手机端推理模型的框架. 本文即是 Flutter 上使用 ncnn 做模型推理的实践分享.有如 ...
- ITIL4与Devops(一)
目录 一.服务管理与ITIL 1.1 服务管理现状 1.2 服务管理原则 1.3 ITIL版本发展历程 ITIL2 服务支持 服务交付 服务战略 ITIL3 框架 职能 ITIL 2011 流程的基本 ...
- Unity UGUI的PointerEventData的介绍及使用
Unity UGUI的PointerEventData的介绍及使用 1. 什么是PointerEventData? PointerEventData是Unity中UGUI系统中的一个重要组件,用于处理 ...
- 用 Python 自动创建 Markdown 表格 - 每天5分钟玩转 GPT 编程系列(4)
目录 1. 他们居然问我要 Prompts 2. 让 GPT-4 来写代码 2.1 我对 DevChat 说 2.2 DevChat 回答 2.3 我又对 DevChat 说 2.4 DevChat ...
- 从 HTTP/1.1 到 HTTP/3
从 HTTP/1.1 到 HTTP/3,解决了一些旧协议的问题,引入了好用的新功能. HTTP/1.1 HTTP/1.1 通过在传输层和应用层之间增加 SSL/TSL 解决数据不安全的问题,但它本身还 ...
- Unity三维数学总结
三维向量和三角函数 三维向量 向量是指一个同时具有大小和方向,且满足平行四边形法则的几何对象. 向量的模 po点相对于世界坐标原点的距离: po.magnitude. 标准向量,归一向量,指的是将 ...
- Linux 过滤进程和端口号
IDEA覆盖率测速显示百分比 ctrl + alt + F6 取消勾选 ps - ef | grep java过滤Java进程 netstat -anop | grep 74933 过滤端口号 重命名 ...