EZ 2018 03 30 NOIP2018 模拟赛(六)
链接:http://211.140.156.254:2333/contest/67
转眼间上次加回来的Rating又掉完了。
这次不知为何特别水,T1想了一段时间没想出来弃了,导致后面心态炸了。
T2也没有注意到有随机数据,少得了10分。
T3也没想过,直接输了些样例再手算了一组数据就没管了。
然而考完发现T1一直卡在一个坑里跳不出来,但很多人都A了T1而我只有30分。
所以一夜回到解放前。
T1 实际上是一道分治大水题。
我们先令a[i]=i;然后这当然是不满足要求的。
所以我们每次取出队列中的一半数字(下标为奇数),再取出另一半数字(下标为偶数)分别组成新的队列。
然后单独分治即可,这里给一个图理解一下:
所以对于n=6时,序列就是153264
由于是分而治之,因此复杂度为O(n log n)
T2 01串hash+线段树。
考虑O(n^2)的暴力,每次找出两个数i,j,然后把它们作为等差数列的前两项,然后查找第三项的位置是否合法。
然后只要加上一大堆类似clock之类的玄学操作竟然可以A了
然后考虑正解。对于读入的数x,如果x-k和x+k在之前都出现过(或都没出现过),那么是合法的。反之,若其中只有一个数出现过,那么必然会出现x-k,x,x+k或x+k,x,x-k这样的情况,就不是反等差数列。
因此我们再细化一点,用01串表示在x之前所有数的出现情况(出现就为1)
然后对它的性质进行分析可以发现当且仅当这个串在边界范围内以x为中心左右对称才合法。
例如(令当前的数为x):
当串为:1101x1011或1101x101110是都是合法的(后者前面4个数就到边界了,众所周知数的范围在1至n,没有负数之类的东西)
当串为:1011x1011或11011x11010时都是不合法的
然后对于所有的01串进行hash再判重即可。
但是单纯的hash会T,所以用线段树来维护hash
具体实现看代码,这里线段树要有3个信息:
len:子树大小,主要是为了hash
lh:从左向右的hash顺序时当前节点的值
rh:从右向左的hash顺序时当前节点的值
对于hash可以开unsighed long long自然溢出,这样比较方便。同时记得把次数预处理出来。
CODE
#include<cstdio>
using namespace std;
typedef unsigned long long uni;
const int N=;
struct segtree
{
int len;
uni lh,rh;
}tree[N<<];
int n,x,last;
uni h1,h2,seed[N];
inline char tc(void)
{
static char fl[],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=; char ch=tc();
while (ch<''||ch>'') ch=tc();
while (ch>=''&&ch<='') x=x*+ch-'',ch=tc();
}
inline int min(int a,int b)
{
return a<b?a:b;
}
inline void build(int root,int l,int r)
{
if (l==r)
{
tree[root].len=;
return;
}
int mid=l+r>>;
build(root<<,l,mid);
build(root<<|,mid+,r);
tree[root].len=tree[root<<].len+tree[root<<|].len;
}
inline void updata(int root)
{
tree[root].lh=tree[root<<].lh*seed[tree[root<<|].len]+tree[root<<|].lh;
tree[root].rh=tree[root<<|].rh*seed[tree[root<<].len]+tree[root<<].rh;
}
inline void modify(int root,int l,int r,int id)
{
if (l==r)
{
tree[root].lh=tree[root].rh=;
return;
}
int mid=l+r>>;
if (id<=mid) modify(root<<,l,mid,id);
if (id>mid) modify(root<<|,mid+,r,id);
updata(root);
}
inline void l_query(int root,int l,int r,int beg,int end)
{
if (beg<=l&&end>=r)
{
h1+=tree[root].lh*seed[last];
last+=tree[root].len;
return;
}
int mid=l+r>>;
if (end>mid) l_query(root<<|,mid+,r,beg,end);
if (beg<=mid) l_query(root<<,l,mid,beg,end);
}
inline void r_query(int root,int l,int r,int beg,int end)
{
if (beg<=l&&end>=r)
{
h2+=tree[root].rh*seed[last];
last+=tree[root].len;
return;
}
int mid=l+r>>;
if (beg<=mid) r_query(root<<,l,mid,beg,end);
if (end>mid) r_query(root<<|,mid+,r,beg,end);
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
register int i;
read(n);
build(,,n);
for (seed[]=,i=;i<=n;++i)
seed[i]=seed[i-]*;
for (i=;i<=n;++i)
{
read(x);
modify(,,n,x);
int len=min(x-,n-x);
if (!len) continue;
last=; h1=; l_query(,,n,x-len,x-);
last=; h2=; r_query(,,n,x+,x+len);
if (h1!=h2) { puts("NO"); return ; }
}
puts("YES");
return ;
}
T3 搜索+打表。
然而当我看到这道题时觉得很不可做,输了样例等弄了7分。
实际上要发现一个性质:当一个串的左右括号的数量相等时必然是一个合法的括号序列的循环移位。
所以爆搜一些小的点,然后用组合数学推一下其中一个等于2时的情况就可以拿不少分。
这里对于标算的判重和思路不是很懂,所以还是只会30分左右的搜索。
CODE
#include<cstdio>
using namespace std;
const int N=,mod=;
int h[N][],l[N][],a,b,ans;
inline void check(void)
{
for (register int i=;i<=a;++i)
if (h[i][]!=h[i][]) return;
for (register int j=;j<=b;++j)
if (l[j][]!=l[j][]) return;
if (++ans>=mod) ans-=mod;
}
inline void DFS(int x,int y)
{
if (x>a) { check(); return; }
if (h[x][]>b/||h[x][]>b/) return;
if (l[y][]>a/||l[y][]>a/) return;
int xx=x,yy=y;
if (++yy>b) ++xx,yy=;
++h[x][]; ++l[y][]; DFS(xx,yy); --h[x][]; --l[y][]; ++h[x][]; ++l[y][]; DFS(xx,yy); --h[x][]; --l[y][];
}
int main()
{
scanf("%d%d",&a,&b);
DFS(,);
printf("%d",ans);
return ;
}
EZ 2018 03 30 NOIP2018 模拟赛(六)的更多相关文章
- EZ 2018 03 23 NOIP2018 模拟赛(五)
链接:http://211.140.156.254:2333/contest/65 这次Rating重回Rank18,我是20的守门员(滑稽) 这次题目和数据普遍偏水,我T2打错了一个变量名竟然过了所 ...
- EZ 2018 03 16 NOIP2018 模拟赛(四)
链接:http://211.140.156.254:2333/contest/64 我去掉了一百多分! 这次的题目怎么说呢,特别水,但是就是出现了一些很逗的错误导致炸裂. 最好笑的是SB的不只我一个: ...
- EZ 2018 03 09 NOIP2018 模拟赛(三)
最近挺久没写比赛类的blog了 链接:http://211.140.156.254:2333/contest/59 这次的题目主要考验的是爆搜+打表的能力 其实如果你上来就把所有题目都看过一次就可以知 ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
- EZ 2018 05 26 NOIP2018 模拟赛(十六)
这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...
- EZ 2018 06 24 NOIP2018 模拟赛(二十)
很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...
- EZ 2018 06 02 NOIP2018 模拟赛(十七)
这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...
- EZ 2018 05 20 NOIP2018 模拟赛(十五)
这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...
随机推荐
- Unity Profiler CPU Usage(CPU使用情况)
在Profiler界面点击左侧CPU Usage,Profiler界面下方Hierarchy窗口会列出各个函数对当前CPU的耗时,从大到小排序. 然后分析,各个函数的耗时是否异常,分析有没有可以优化的 ...
- Linux简单使用
1.基本命令 创建目录pathA:mkdir pathA 进入目录pathA:cd pathA 查看目录内容:ls 查看目录下文件的详细信息:ls -l,也可以是:ll(l是小写的L,别看错了) 拷贝 ...
- CSS3动画详解(图文教程)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 本文主要内容: 过渡:transition 2D 转换 trans ...
- c#创建文件( File.Create() )后对文件写操作出错的分析
在C#中,使用system.IO.File.Create()创建完一个文件之后,如果需要对这个文件进行写操作,会出现错误,提示你“这个文件正在被使用”. 原因是System.IO.File.Creat ...
- If TransactionScope will close database connections
问 Do TransactionScope work with closed database connections? using (var transaction = new Transactio ...
- 【工具推荐】截图工具 Snipaste
0. 说明 [官网介绍] Snipaste 是一个简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开 Snipaste,按下 F1 来开始截图,再按 F3,截图就在桌面置顶显示了.就这么简 ...
- 【转】Java学习---Java Web基础面试题整理
[原文]https://www.toutiao.com/i6592359948632457731/ 1.什么是Servlet? 可以从两个方面去看Servlet: a.API:有一个接口servlet ...
- Linux学习之路-2017/12/22
第三章 管道符.重定向与环境变量 管道命令符,“|”,作用是将前一个命令的标准输出当作后一个命令的标准输入, 格式:“命令A|命令B” 输入输出重定向, 标准输入,STDIN,文件描述符为0,默认从 ...
- 张高兴的 .NET Core IoT 入门指南:(二)GPIO 的使用
什么是 GPIO GPIO 是 General Purpose Input Output 的缩写,即"通用输入输出". Raspberry Pi 有两行 GPIO 引脚, Rasp ...
- [部署]VM11下CentOS7mini安装及配置
最近使用了CentOS发现比Ubuntu更简洁,有些爱上CentOS了 1. 准备一版CentOS安装镜像文件 官网下载地址:http://www.centos.org/download/ 官方有三个 ...