点此进入比赛

得分: \(100+100+100=300\)

排名: \(Rank\ 1\)

\(Rating\): \(+13\)(\(\frac18Rated\))

备注: 这场比赛全是做过的原题。。。因此下面只放代码,题解可见每道题相应链接。

\(T1\):【HHHOJ203】A(点此看题面

题解详见:【LOJ6041】「雅礼集训 2017 Day7」事情的相似度(用LCT维护SAM的parent树)

代码如下:

  1. #include<bits/stdc++.h>
  2. #define Tp template<typename Ty>
  3. #define Ts template<typename Ty,typename... Ar>
  4. #define Reg register
  5. #define RI Reg int
  6. #define Con const
  7. #define CI Con int&
  8. #define I inline
  9. #define W while
  10. #define N 100000
  11. #define Gmax(x,y) (x<(y)&&(x=(y)))
  12. #define swap(x,y) (x^=y^=x^=y)
  13. #define pb(x,y) (nxt[y]=lnk[x],lnk[x]=y)
  14. using namespace std;
  15. int n,m,a[N+5],q[N+5],lnk[N+5],nxt[N+5],ans[N+5];
  16. class FastIO
  17. {
  18. private:
  19. #define FS 100000
  20. #define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
  21. #define pc(c) (C^FS?FO[C++]=c:(fwrite(FO,1,C,stdout),FO[(C=0)++]=c))
  22. #define tn (x<<3)+(x<<1)
  23. #define D isdigit(c=tc())
  24. int T,C;char c,*A,*B,FI[FS],FO[FS],S[FS];
  25. public:
  26. I FastIO() {A=B=FI;}
  27. Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
  28. Tp I void write(Ty x) {W(S[++T]=x%10+48,x/=10);W(T) pc(S[T--]);}
  29. Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
  30. Tp I void writeln(Con Ty& x) {write(x),pc('\n');}
  31. I void readbit(int& x) {W(!D);x=c&1;}
  32. I void clear() {fwrite(FO,1,C,stdout),C=0;}
  33. }F;
  34. template<int SZ> class SuffixAutomation//后缀自动机
  35. {
  36. private:
  37. int lst;struct Trie {int L,F,S[2];}O[SZ<<1];
  38. public:
  39. int tot,l[SZ<<1],f[SZ<<1];I SuffixAutomation() {tot=lst=1;}
  40. I void Record() {for(RI i=1;i<=tot;++i) l[i]=O[i].L,f[i]=O[i].F;}
  41. I int Insert(CI x)//插入节点
  42. {
  43. RI p=lst,q,k,now=lst=++tot;O[now].L=O[p].L+1;
  44. W(p&&!O[p].S[x]) O[p].S[x]=now,p=O[p].F;if(!p) return O[now].F=1,now;
  45. if(O[p].L+1==O[q=O[p].S[x]].L) return O[now].F=q,now;
  46. O[k=++tot]=O[q],O[k].L=O[p].L+1,O[now].F=O[q].F=k;
  47. W(p&&!(O[p].S[x]^q)) O[p].S[x]=k,p=O[p].F;return now;
  48. }
  49. };
  50. template<int SZ> class TreeArray//树状数组
  51. {
  52. private:
  53. #define lowbit(x) ((x)&-(x))
  54. int a[SZ+5];
  55. public:
  56. I void Add(RI x,CI v) {W(x) Gmax(a[x],v),x-=lowbit(x);}//单点修改
  57. I int Qry(RI x) {RI t=0;W(x<=n) Gmax(t,a[x]),x+=lowbit(x);return t;}//区间询问
  58. };
  59. class LinkCutTree//LCT
  60. {
  61. private:
  62. #define Upt(x,v) (O[x].f=O[x].V=v)
  63. #define PD(x) (O[x].f&&(Upt(O[x].S[0],O[x].f),Upt(O[x].S[1],O[x].f),O[x].f=0))
  64. #define IR(x) (O[O[x].F].S[0]^x&&O[O[x].F].S[1]^x)
  65. #define Wh(x) (O[O[x].F].S[1]==x)
  66. #define Co(x,y,d) (O[O[x].F=y].S[d]=x)
  67. static Con int SZ=N<<1;int p[SZ+5],St[SZ+5];struct node {int f,V,F,S[2];}O[SZ+5];
  68. SuffixAutomation<N> SAM;TreeArray<N<<1> T;
  69. I void Ro(CI x)
  70. {
  71. RI f=O[x].F,p=O[f].F,d=Wh(x);!IR(f)&&(O[p].S[Wh(f)]=x);
  72. O[x].F=p,Co(O[x].S[d^1],f,d),Co(f,x,d^1);
  73. }
  74. I void S(CI x)
  75. {
  76. RI f=x,T=0;W(St[++T]=f,!IR(f)) f=O[f].F;W(T) PD(St[T]),--T;
  77. W(!IR(x)) f=O[x].F,!IR(f)&&(Ro(Wh(x)^Wh(f)?x:f),0),Ro(x);
  78. }
  79. public:
  80. I void Init(CI x,int* v)
  81. {
  82. RI i;for(i=1;i<=n;++i) p[i]=SAM.Insert(v[i]);SAM.Record();
  83. for(i=1;i<=SAM.tot;++i) O[i].F=SAM.f[i];
  84. }
  85. I void Ac(RI x,CI v)//Access求LCA的过程,注意更新节点信息与答案
  86. {
  87. RI s;for(x=p[x],s=0;x;x=O[s=x].F) S(x),
  88. T.Add(O[x].V,SAM.l[x]),O[x].S[1]=s;Upt(s,v);
  89. }
  90. I int Query(CI x) {return T.Qry(x);}//询问答案
  91. }LCT;
  92. int main()
  93. {
  94. RI Qtot,i,j,x;for(F.read(n,Qtot),i=1;i<=n;++i) F.readbit(a[i]);
  95. for(LCT.Init(n,a),i=1;i<=Qtot;++i) F.read(q[i],x),pb(x,i);//离线用邻接表存储
  96. for(i=1;i<=n;++i) for(LCT.Ac(i,i),j=lnk[i];j;j=nxt[j]) ans[j]=LCT.Query(q[j]);//枚举右端点,更新信息并处理询问
  97. for(i=1;i<=Qtot;++i) F.writeln(ans[i]);return F.clear(),0;//输出答案
  98. }

\(T2\):【HHHOJ204】B(点此看题面

题解详见:【LOJ6042】「雅礼集训 2017 Day7」跳蚤王国的宰相(思博题)

代码如下:

  1. #include<bits/stdc++.h>
  2. #define Tp template<typename Ty>
  3. #define Ts template<typename Ty,typename... Ar>
  4. #define Reg register
  5. #define RI Reg int
  6. #define Con const
  7. #define CI Con int&
  8. #define I inline
  9. #define W while
  10. #define N 1000000
  11. #define INF 1e9
  12. #define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)
  13. #define max(x,y) ((x)>(y)?(x):(y))
  14. #define Gmax(x,y) (x<(y)&&(x=(y)))
  15. using namespace std;
  16. int n,p,rt,cnt,ee,s[N+5],lnk[N+5],Sz[N+5],Mx[N+5],ans[N+5];struct edge {int to,nxt;}e[N<<1];
  17. class FastIO
  18. {
  19. private:
  20. #define FS 100000
  21. #define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
  22. #define pc(c) (C^FS?FO[C++]=c:(fwrite(FO,1,C,stdout),FO[(C=0)++]=c))
  23. #define tn (x<<3)+(x<<1)
  24. #define D isdigit(c=tc())
  25. int T,C;char c,*A,*B,FI[FS],FO[FS],S[FS];
  26. public:
  27. I FastIO() {A=B=FI;}
  28. Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
  29. Tp I void write(Ty x) {W(S[++T]=x%10+48,x/=10);W(T) pc(S[T--]);}
  30. Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
  31. Tp I void writeln(Con Ty& x) {write(x),pc('\n');}
  32. I void clear() {fwrite(FO,1,C,stdout),C=0;}
  33. }F;
  34. I void GetRt(CI x,CI lst=0)//求重心
  35. {
  36. for(RI i=(Sz[x]=1,Mx[x]=0,lnk[x]);i;i=e[i].nxt) e[i].to^lst&&
  37. (GetRt(e[i].to,x),Sz[x]+=Sz[e[i].to],Gmax(Mx[x],Sz[e[i].to]));
  38. Gmax(Mx[x],n-Sz[x]),Mx[x]<Mx[rt]&&(rt=x);
  39. }
  40. I void Init(CI x,CI lst=0)//初始化Size
  41. {
  42. for(RI i=(Sz[x]=1,lnk[x]);i;i=e[i].nxt)
  43. e[i].to^lst&&(Init(e[i].to,x),Sz[x]+=Sz[e[i].to]);
  44. }
  45. I void GetAns(CI x,CI lst,CI v)//求解答案
  46. {
  47. ans[x]=p,(Sz[x]+v<<1)>=n&&--ans[x];//判断答案是否可以减1
  48. for(RI i=lnk[x];i;i=e[i].nxt) e[i].to^lst&&(GetAns(e[i].to,x,v),0);//遍历子树
  49. }
  50. I bool cmp(CI x,CI y) {return Sz[x]>Sz[y];}//按Size排序
  51. int main()
  52. {
  53. RI i,x,y;for(F.read(n),i=1;i^n;++i) F.read(x,y),add(x,y),add(y,x);//读入+建边
  54. for(Mx[rt=0]=INF,GetRt(1),Init(rt),cnt=0,i=lnk[rt];i;i=e[i].nxt) s[++cnt]=e[i].to;//找到重心,将重心儿子存下来用于排序
  55. for(sort(s+1,s+cnt+1,cmp),x=0,i=1;i<=cnt&&(x<<1)<n;++i) x+=Sz[s[i]];p=i-1;//排序,然后求出p
  56. for(i=1;i<=cnt;++i) GetAns(s[i],rt,x-max(Sz[s[i]],Sz[s[p]]));//枚举子节点处理答案
  57. for(i=1;i<=n;++i) F.writeln(ans[i]);return F.clear(),0;//输出
  58. }

\(T3\):【HHHOJ205】C(点此看题面

题解详见:【LOJ6043】「雅礼集训 2017 Day7」蛐蛐国的修墙方案(搜索技巧题)

代码如下:

  1. #include<bits/stdc++.h>
  2. #define Tp template<typename Ty>
  3. #define Ts template<typename Ty,typename... Ar>
  4. #define Reg register
  5. #define RI Reg int
  6. #define Con const
  7. #define CI Con int&
  8. #define I inline
  9. #define W while
  10. #define N 100
  11. using namespace std;
  12. int n,tot,a[N+5],v[N+5];char s[N+5];vector<int> f[N+5];
  13. I void Check()//验证是否为合法括号序列
  14. {
  15. for(RI i=1,t=0;i<=n;++i) if((t+=(s[i]^')'?1:-1))<0) return;//若出现不合法,直接退出函数
  16. puts(s+1),exit(0);//合法则输出答案,退出程序
  17. }
  18. I void dfs(CI x)//搜索,判断第i个环的填法
  19. {
  20. if(x>tot) return Check();RI i,sz=f[x].size();
  21. if(!(sz^2)) return s[f[x][0]]='(',s[f[x][1]]=')',dfs(x+1);//特判环长为2的情况
  22. for(i=0;i^sz;++i) s[f[x][i]]=(i&1?'(':')');dfs(x+1);//环中必然是左右括号交替
  23. for(i=0;i^sz;++i) s[f[x][i]]=(i&1?')':'(');dfs(x+1);//枚举另一种情况
  24. }
  25. int main()
  26. {
  27. RI i,x;for(scanf("%d",&n),i=1;i<=n;++i) scanf("%d",a+i);//读入
  28. for(i=1;i<=n;++i) if(!v[x=i])//如果没访问过
  29. {++tot;W(!v[x]) v[x]=1,f[tot].push_back(x),x=a[x];}//找环
  30. return dfs(1),0;//搜索
  31. }

【HHHOJ】ZJOI2019模拟赛(十六)4.07 解题报告的更多相关文章

  1. [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)

    题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...

  2. 「2018-11-05模拟赛」T5 传送机 解题报告

    5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...

  3. 「模拟赛 2018-11-02」T3 老大 解题报告

    老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图),由于新建的办公室太大以 ...

  4. 「2018-12-02模拟赛」T3 约束排列 解题报告

    3.约束排列(place.pas/cpp/in/out) 问题描述: 给出 n 个互不相同的小写字母,表示出现的字符类型,以及 k 个约束关系: .....,表示 ai 必须出现在 bi 前面(ai, ...

  5. 「2018-12-02模拟赛」T1 最短路 解题报告

    1.最短路(short.pas/cpp/in/out) 问题描述: 小 C 终于被小 X 感动了,于是决定与他看电影,然而小 X 距离电影院非常远,现在假设 每条道路需要花费小 X 的时间为 1,由于 ...

  6. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  7. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  8. 【HHHOJ】ZJOI2019模拟赛(十二)03.03 解题报告

    点此进入比赛 得分: \(0+77+20=97\) 排名: \(Rank\ 5\) \(Rating\):\(+46\) \(T1\):[HHHOJ178]依神(点此看题面) 这套题目中的唯一一道传统 ...

  9. 【HHHOJ】ZJOI2019模拟赛(十四)03.12 解题报告

    点此进入比赛 得分: \(50+5+24=79\) 排名: \(Rank\ 2\) \(Rating\):\(+79\) \(T1\):[HHHOJ197]古明地(点此看题面) 基本上全部时间都用来想 ...

随机推荐

  1. IE9以下程序开发不兼容项目罗列

    1. 提前关闭iframe,脚本将不再执行 IE下的js不是缓存在站点系统中,而是缓存在每个单独页面系统中的,当关闭页面,对应引入的脚本将不再执行. 可能出现两种情况: iframe引入的html页面 ...

  2. linux 命令之重定向

    linux 重定向及部分命令 一,重定向讲解: 1> 标准输出重定向 覆盖原有内容 慎用!!!!!! 1>> 标准输出追加重定向 追加内容 2> 错误输出重定向 只输出错误信息 ...

  3. 抓包来看ftp状态码

    1.quit退出 客户端输入退出命令: 退出的抓包数据交换过程: 2.用户登录,输入正确用户名和错误用户名都是返回331请求输入密码,这里不再将错误用户名的抓包数据交换过程截图. 数据交换过程: 服务 ...

  4. (转)浅谈千万级PV/IP规模高性能高并发网站架构

    浅谈千万级PV/IP规模高性能高并发网站架构 原文:http://blog.51cto.com/oldboy/736710 文章架构简图:   高并发访问的核心原则其实就一句话“把所有的用户访问请求都 ...

  5. Windows 7安装PlayReady出现“任务被禁用”错误信息

    问题描述: Windows 7的Windows media center中安装PlayReady时出现:错误信息:任务被禁用.(异常来自 HRESULT:0x80041326) 解决办法: 先请确认是 ...

  6. TOJ 3176 Challenge from XOR

    Description Mr. AngelClover just learnt XOR on his Computer Class. XOR is a bit arithmetic operator ...

  7. C#异步编程模型

    什么是异步编程模型 异步编程模型(Asynchronous Programming Model,简称APM)是C#1.1支持的一种实现异步操作的编程模型,虽然已经比较“古老”了,但是依然可以学习一下的 ...

  8. 《C#高效编程》读书笔记02-用运行时常量(readonly)而不是编译期常量(const)

    C#有两种类型的常量:编译期常量和运行时常量.两者有截然不同的行为,使用不当的话,会造成性能问题,如果没法确定,则使用慢点,但能保证正确的运行时常量. 运行时常量使用readonly关键字声明,编译期 ...

  9. C# Attribute应用:类签名

    在应用别人接口的时候,总是要用签名,很是不理解签名这是怎么知道做的.通过对Attribute的学习了解.大体可以用Attribute来做签名应用. 具体过程如下: 首先我们要先定义一个类,该类继承At ...

  10. Java基础入门 - 简介

    官网:https://www.oracle.com Java分为三个体系: JavaEE: Java Platform, Enterprise Edition, Java平台企业版 JavaSE: J ...