链接: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 模拟赛(六)的更多相关文章

  1. EZ 2018 03 23 NOIP2018 模拟赛(五)

    链接:http://211.140.156.254:2333/contest/65 这次Rating重回Rank18,我是20的守门员(滑稽) 这次题目和数据普遍偏水,我T2打错了一个变量名竟然过了所 ...

  2. EZ 2018 03 16 NOIP2018 模拟赛(四)

    链接:http://211.140.156.254:2333/contest/64 我去掉了一百多分! 这次的题目怎么说呢,特别水,但是就是出现了一些很逗的错误导致炸裂. 最好笑的是SB的不只我一个: ...

  3. EZ 2018 03 09 NOIP2018 模拟赛(三)

    最近挺久没写比赛类的blog了 链接:http://211.140.156.254:2333/contest/59 这次的题目主要考验的是爆搜+打表的能力 其实如果你上来就把所有题目都看过一次就可以知 ...

  4. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  5. EZ 2018 06 10 NOIP2018 模拟赛(十八)

    好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...

  6. EZ 2018 05 26 NOIP2018 模拟赛(十六)

    这次难道就是传说中的标准分大赛?而且这次比赛的链接不翼而飞了 一堆人153pts然后就有Rank4?看来这个Rank4不值钱了,才涨了50+的Rating. 不过还好最后5min的时候想出了T1正解, ...

  7. EZ 2018 06 24 NOIP2018 模拟赛(二十)

    很久之前写的一套题了,由于今天的时间太多了,所以记起来就写掉算了. 这一场尽管T2写炸了,但也莫名Rank4涨了Rating.不过还是自己太菜. A. 环游世界 首先我们先排个序,想一下如果不用走回来 ...

  8. EZ 2018 06 02 NOIP2018 模拟赛(十七)

    这次的比赛是真心比较狗,我TM的写了30min的树剖ZZ地直接memset超时了 话说我既然想到差分就应该去写差分的啊! 好了不过这次Rank还挺高的,终于要打进前10了当然是假的了. 好了下面开始讲 ...

  9. EZ 2018 05 20 NOIP2018 模拟赛(十五)

    这次的比赛充满着玄学的气息,玄学链接 首先讲一下为什么没有第十四场 其实今天早上9点时看到题目就叫了:原题! 没错,整套试卷都做过,我还写了题解 然后老叶就说换一套,但如果仅仅是这样就没什么 但等13 ...

随机推荐

  1. [Android] 仿照 Last App Switcher 写的小程序

      在Android众多工具类app中,Last App Switcher绝对算是一个让人用过就不会卸载的工具.LAS这个应用,它的功能很简单,就是通过一个浮动按钮实现在两个应用之间一键切换,但是非常 ...

  2. centos7 下安装 nginx-1.12.2

    官网地址:http://nginx.org/2017.html 转载:https://blog.csdn.net/harris135/article/details/78576263 1.环境: ce ...

  3. window平台搭建Hudson服务器

    1.1    环境 Microsoft Windows server 2008 x64 1.2    资源下载 TortoiseSVN-1.7.11.23600-x64-svn-1.7.8.msi h ...

  4. 正则捕获url的?号传值

    http://www.baidu.com/Q?k=0012719021908563998510650 有时候,我们需要在静态页面捕获?号传值,这时就需要用到js的正则表达式. 例如:我们要获取上面这个 ...

  5. 在 Windows 上创建虚拟机规模集和部署高度可用的应用

    利用虚拟机规模集,可以部署和管理一组相同的.自动缩放的虚拟机. 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率.内存需求或网络流量)进行自动缩放. 在本教程 ...

  6. MySQL应用架构优化-实时数据处理

    1.1. 场景 在和开发人员做优化的时候,讨论最多的应该是结合应用场景编写出合适的SQL.并培训开发应该如何编写SQL让MySQL的性能尽量好.但是有一些的场景对于SQL的优化是行不通的. 打个比方, ...

  7. 转:基于InstallShield2013LimitedEdition的安装包制作

    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)   InstallShield Limited Edit ...

  8. 【转】HTTP学习---图解HTTP[三次握手&&ISO模型]

    [转]https://www.toutiao.com/i6592556686068679182/ 首先了解一次完整的HTTP请求到响应的过程需要的步骤: 1. 域名解析 2. 发起TCP的3次握手 3 ...

  9. SDN负载均衡

    我负责的工作: (1).前期工作思路设计及方案选定.讲解 (2).后期代码修正 (3).视频制作 负载均衡程序 程序流程图 代码 from mininet.topo import Topo class ...

  10. 有关于分布式缓存Hazelcast

    如果在内网段中部署或者启动缓存服务.不能存在相同的组名称.如同使用dubbo一样,会导致无法连接到缓存节点