一次考试的简单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 ...
随机推荐
- Pinot2的开发者社区和教程
目录 文章背景: Pinot 2 是任天堂公司于2018年发布的一款游戏机,采用了基于马里奥兄弟游戏<塞尔达传说:荒野之息>的开放世界操作系统,并推出了许多创新的功能,例如"超级 ...
- Java 文件写入不覆盖的写法
FileOutputStream o = null; File file = null; FileWriter fw = null; byte[] buff = new byte[]{}; try { ...
- Vmware安装Deepin20
一.搭建环境 虚拟机:Vmware Workstation pro 17 Windows版本 镜像:Deepin 20 二.创建虚拟机 1.点击创建新的虚拟机,选择典型 2.选择稍后安装 3.选择li ...
- 使用SpringBoot+React搭建一个Excel报表平台
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 Excel报表平台是一款功能强大.操作简单的系统平台,可 ...
- Vue学习之认识ref
ref相当于一个dom节点,值为string 通俗将类似于原生js的document.querySelector('xxx'):但是不同的是vue是操纵虚拟dom,在渲染初期并没有这个属性,而是在创建 ...
- Unity UGUI的RawImage(原始图片)组件的介绍及使用
Unity UGUI的RawImage(原始图片)组件的介绍及使用 1. 什么是RawImage组件? RawImage是Unity UGUI中的一个组件,用于显示原始图片.与Image组件不同,Ra ...
- Linux文件与目录管理核心命令:看这篇就够了
Linux文件与目录核心命令 Linux命令操作语法示例 #命令 选项 参数 command [-options] [arguments] [root@localhost ~]# ls //命令 an ...
- 如何用 ModelScope 实现 “AI 换脸” 视频
前言 当下,视频内容火爆,带有争议性或反差大的换脸视频总能吸引人视线.虽然 AI 换脸在市面上已经流行了许久,相关制作工具或移动应用也是数不胜数.但是多数制作工具多数情况下不是会员就是收费,而且替换模 ...
- docker下nginx配置
一步一坑安装docker nginx 首先选择适当版本镜像下载 我选的: nginx:1.16.0 docker pull nginx:1.16.0 安装完毕之后创建挂载文件夹 : mkdir /u ...
- SpringBoot对接OpenAI
SpringBoot对接OpenAI 随着人工智能技术的飞速发展,越来越多的开发者希望将智能功能集成到自己的应用中,以提升用户体验和应用的功能.OpenAI作为一家领先的人工智能公司,提供了许多先进的 ...