题外话

为什么不更ZJOI day1的游记呢。。。。

因为考挂自闭了不想更。等day2考完再说咕咕咕

还是更个SHOI旅游记吧!反正不是自家省选,玩得真开心~~~

day0

SH好热好热啊,感觉到夏天了

day1

考场是一个奇怪的科技中心什么的,早上很早去本来以为要试机,后来发现考场都进不去。

进去了竟然说随便坐。。。我原来那个位置键盘贼难受,后来换了一个鼠标很诡异的位置,不过键盘还挺好用的。

SH还是发了面包,比ZJ优秀(???)午饭感觉也还不错的说

暴力60+40+?

T1是送的,T2是个后缀树模板,T3是个没意思的找规律。

T1其实不用“超级钢琴”也能做,二分出第k大的值顺便暴力枚举>k的求异或和。至于多log的话,把二分改成逐位确定就可以省掉那个log。在下代码力弱得没调出来,结果60分排序比较器写成了greater<int>(),于是就爆零了,哭(赛后loj快榜上目前还是rk1  upd:好吧xj大佬们切掉这题以后我瞬间被打爆了。。);我一开始题还读错了,读成了不相交区间,据说有人按照这个写拿了60。。。

T2大概认真学习过后缀树相关肯定能做出来,大概用到了后缀树上倍增定位+拆点建图。我大概没有学好后缀树,暴力又写挂了。

T3考脑洞和打表功底(出题人被喷了)。我玩了25,类型2根本看不出来,赛后恍然大悟QAQ

得分0+10+25,垫底了

讲课期间:

zjc: 我T2第三个大样例没过,拿了50分;刚刚有人说他三个样例都过了,他几分啊?我看看。。。(翻榜)诶他怎么0分啊

day2

暴力70+60+?

T1是dp,70是暴力dp加k=0的部分分,k=0是两部分分开dp(互相独立)。正解大概就是再优化一下,有限制的情况暴力跑,无限制的用k=0的方法跑。听说km^2会被卡常。

T2是贪心,感觉也是送的?大家好像都会做(只有我拿不到送的分)。链的部分分是个简单贪心,提示正解,正解就是套用链的做法把子树合并起来即可。

T3融合了很多知识点,包括树上连通块边数-点数=1算贡献,树形dp,长链剖分,数据结构等等,现在还没有搞太懂,据说其中一份std写了908行。反正十分毒瘤就是了。我写了大暴力加L=n,k=1的部分分得了20。

得分70+60+20,其实T3估分是24。。。不过挂4分也不想管他了。

upd: 丢失4分原因竟是数组开小。。。。。哭了。

讲课期间:

讲课人:我也是刚刚拿到ppt……(陷入僵局)

(过了一会儿)

讲课人:我们请AC的选手上来讲一下吧!

(过了一会儿,讲T3)

讲课人:我们请最高分选手上来讲一下吧!

(然后放了几页ppt,莫名其妙就结束了讲课)

总结

这个分数尤其day1的得分,总觉得是不太符合自己水平的分数。

虽然一次次考试结果证明自己真的很弱,根本跟不上大家的脚步,每次考试都是那种,总想要飞上天反而摔得粉身碎骨的感觉,正解不会写暴力还统统写挂。

不过自我安慰一下这次就是来玩玩的,反正考挂也没有什么影响,还是非常开心地浪了两天半~~~ QAQ

可惜的是noip实在太烂了连去北京浪的机会都没有,thupc感觉也审不过的吧。

noip。。。真的是一时疏忽,如今算是尝到恶果了。感觉真的只能滚去准备学考了啊。ZJOI二试,可能也要变成旅游了。

等明年吧。不甘心。

upd:放一下我AC的代码

 #include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define ll long long using namespace std; const int N=5e5+;
int n,m,c[N*][],w[N*],leaf[N*],p[N],tot=; ll a[N],sum[N],num[N],ans; void ins(ll x){
int now=;
for (int i=;~i;i--){
int b=x>>i&;
if (!c[now][b]) c[now][b]=++tot;
now=c[now][b],w[now]++;
}
leaf[now]++;
} void dfs(int u,int i,ll x,ll y){
if (!u||i<||!w[u]) return;
if (leaf[u]) ans+=leaf[u]*(x^y);
dfs(c[u][],i-,x,y);
dfs(c[u][],i-,x|(<<i-),y);
} int main(){
scanf("%d%d",&n,&m);
rep (i,,n) scanf("%lld",&a[i]),sum[i]=sum[i-]^a[i];
rep (i,,n) ins(sum[i]),p[i]=;
m*=; ll res=;
for (int i=;~i;i--){
ll s=;
rep (j,,n){
ll b=sum[j]>>i&; s+=w[c[p[j]][b^]];
}
if (s<m){
m-=s;
rep (j,,n){
ll b=sum[j]>>i&;
dfs(c[p[j]][b^],i,num[j]|((b^)<<i),sum[j]);
p[j]=c[p[j]][b],num[j]|=b<<i;
}
} else{
res|=1ll<<i;
rep (j,,n){
ll b=sum[j]>>i&; p[j]=c[p[j]][b^],num[j]|=(b^)<<i;
}
}
}
ans+=(ll)m*res;
printf("%lld\n",ans>>);
return ;
}

day1 T1 异或粽子

 #include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define pii pair<int,int>
#define fi first
#define se second
#define Vp vector<pii>
#define ll long long using namespace std; const int N=;
int n,na,nb,Q,fa[N],ch[N][],len[N],pos[N],tot,las,f[N][],id[N]; Vp V[N];
int cnt,head[N],val[N],num,q[N],rd[N];
ll dp[N],ans; char s[N];
struct edge{int to,nxt;}e[N<<]; void adde(int x,int y){
e[++cnt].to=y; e[cnt].nxt=head[x]; head[x]=cnt; rd[y]++;
} void sam_init(){
rep (i,,tot){
memset(ch[i],,sizeof(ch[i])),
memset(f[i],,sizeof(f[i])),fa[i]=len[i]=;
}
tot=las=;
}
void extend(int c,int i){
int p=las,np=las=++tot,q,nq;
len[np]=len[p]+,pos[i]=np;
for (;p&&!ch[p][c];p=fa[p]) ch[p][c]=np;
if (!p){fa[np]=; return;}
q=ch[p][c];
if (len[p]+==len[q]) fa[np]=q;
else{
nq=++tot; len[nq]=len[p]+;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
fa[nq]=fa[q]; fa[q]=fa[np]=nq;
for (;p&&ch[p][c]==q;p=fa[p]) ch[p][c]=nq;
}
}
void tree_build(){
rep (i,,tot) f[i][]=fa[i];
rep (j,,) rep (i,,tot) f[i][j]=f[f[i][j-]][j-];
} void get_node(int l,int r,int id){
int x=pos[l];
for (int i=;~i;i--)
if (f[x][i]&&len[f[x][i]]>=r-l+) x=f[x][i];
V[x].push_back(pii(r-l+,id));
} const bool cmp(pii x,pii y){
return x.fi!=y.fi?x.fi<y.fi:x.se>y.se;
}
void graph_build(){
rep (i,,tot){
sort(V[i].begin(),V[i].end(),cmp);
int sz=V[i].size();
rep (j,,sz-){
int x=V[i][j].se+*tot; id[x-*tot]=x;
if (!j) adde(i,x);
if (j<sz-) adde(x,V[i][j+].se+*tot); else adde(x,i+tot);
if (x<=na+*tot){ //A类点有贡献
id[x-*tot]=++num;
adde(x,num),val[num]=V[i][j].fi;
}
}
if (!sz) adde(i,i+tot);
if (fa[i]) adde(fa[i]+tot,i);
}
}
void topo(){
int h=,t=;
rep (i,,num) if (!rd[i]) q[++t]=i,dp[i]=val[i];
ans=;
int tmp=;
while (h<=t){
int u=q[h++]; tmp++;
if (u>*tot+na+nb) ans=max(ans,dp[u]);
for (int i=head[u],v;i;i=e[i].nxt){
v=e[i].to;
if (!--rd[v]) q[++t]=v;
dp[v]=max(dp[v],dp[u]+val[v]);
}
}
if (t!=num) puts("-1"); else printf("%lld\n",ans);
} int Main(){
scanf("%s",s+),n=strlen(s+); sam_init();
for (int i=n;i;i--) extend(s[i]-'a',i); tree_build();
scanf("%d",&na);
rep (i,,na){int l,r; scanf("%d%d",&l,&r),get_node(l,r,i);}
scanf("%d",&nb);
rep (i,,nb){int l,r; scanf("%d%d",&l,&r),get_node(l,r,i+na);}
num=na+nb+*tot;
graph_build();
scanf("%d",&Q);
rep (i,,Q){int x,y; scanf("%d%d",&x,&y),adde(id[x],id[y+na]);}
topo();
rep (i,,tot) V[i].clear();
rep (i,,num) head[i]=dp[i]=val[i]=rd[i]=; cnt=;
return ;
} int main(){
int T; scanf("%d",&T); while (T--) Main();
return ;
}

day1 T2 字符串问题

#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define Vi vector<int>
#define ll long long using namespace std; const int N=,M=,mod=;
int n,m,Q,c0,c1,d0,d1,a[N],bl[N],sum[N],ban[N],ban_c[N],all,lx,rx,ly,ry,Sz,Nowsz;
int f[][M][M],g[N][M],ans,fx[M],fy[M],dp0[M][M],dp1[M][M]; Vi v[N]; void upd(int &x,int y){x+=y; x-=x>=mod?mod:;} void dp(int x,int st){
int sz=v[x].size(),tmp,nowsz=;
rep (i,,sz) rep (j,,Nowsz) g[i][j]=; g[][]=;
rep (i,,sz-){
int y=v[x][i];
if (!ban[y]){
rep (j,,nowsz) g[i+][j]=g[i][j];
continue;
}
rep (j,,nowsz)
if (tmp=g[i][j]){
if (ban[y]!=st&&j+a[y]<=d0) upd(g[i+][j+a[y]],tmp);
if (ban[y]!=st+) upd(g[i+][j],tmp);
}
nowsz+=a[y]; nowsz=min(nowsz,d0);
}
} int Main(){
scanf("%d%d%d%d%d%d",&n,&m,&c0,&c1,&d0,&d1); all=;
rep (i,,n){
int x,y; scanf("%d%d",&x,&y);
v[x].push_back(i),sum[x]+=y,a[i]=y,all+=y,bl[i]=x;
} scanf("%d",&Q);
rep (i,,Q){
int x,y; scanf("%d%d",&x,&y);
ban[x]=y+,ban_c[bl[x]]=;
}
lx=all-c1,rx=c0,ly=all-d1,ry=d0;
if (lx>rx||ly>ry){
rep (i,,m) v[i].clear(),sum[i]=;
rep (i,,n) ban[i]=a[i]=;
return puts(""),;
}
memset(fx,,sizeof(fx)),memset(fy,,sizeof(fy));
fx[]=fy[]=;
rep (i,,m)
if (!ban_c[i]&&sum[i])
for (int j=c0;j>=sum[i];j--) upd(fx[j],fx[j-sum[i]]);
rep (i,,n)
if (!ban[i])
for (int j=d0;j>=a[i];j--) upd(fy[j],fy[j-a[i]]);
rep (i,,c0) rep (j,,d0) dp0[i][j]=(ll)fx[i]*fy[j]%mod;
int now=;
memset(f[now],,sizeof(f[now]));
f[][][]=;
rep (i,,m-) if (ban_c[i+]){
now^=; rep (j,,c0) rep (k,,Sz) f[now][j][k]=;
int sz=v[i+].size();
if (!sz){
rep (j,,c0) rep (k,,Sz) f[now][j][k]=f[now^][j][k];
continue;
}
int nowsz=;
rep (j,,sz-) if (ban[v[i+][j]]) nowsz+=a[v[i+][j]];
nowsz=min(nowsz,d0); Nowsz=nowsz;
rep (j,,c0){
if (j+sum[i+]<=c0){
dp(i+,);
rep (k,,Sz) if (f[now^][j][k])
rep (l,,min(d0-k,nowsz)) if (g[sz][l])
upd(f[now][j+sum[i+]][k+l],(ll)f[now^][j][k]*g[sz][l]%mod);
}
dp(i+,);
rep (k,,Sz) if (f[now^][j][k])
rep (l,,min(d0-k,nowsz)) if (g[sz][l])
upd(f[now][j][k+l],(ll)f[now^][j][k]*g[sz][l]%mod);
}
Sz+=nowsz,Sz=min(Sz,d0);
}
rep (i,,c0) rep (j,,d0){
dp1[i][j]=f[now][i][j];
if (i) upd(dp1[i][j],dp1[i-][j]);
if (j) upd(dp1[i][j],dp1[i][j-]);
if (i&&j) upd(dp1[i][j],mod-dp1[i-][j-]);
}
ans=;
rep (i,,c0) rep (j,,d0){
int Lx=max(lx-i,),Rx=rx-i;
int Ly=max(ly-j,),Ry=ry-j;
if (Lx>Rx||Ly>Ry) continue;
int s=dp1[Rx][Ry];
if (Lx) upd(s,mod-dp1[Lx-][Ry]);
if (Ly) upd(s,mod-dp1[Rx][Ly-]);
if (Lx&&Ly) upd(s,dp1[Lx-][Ly-]);
upd(ans,(ll)s*dp0[i][j]%mod);
}
printf("%d\n",ans);
rep (i,,m) v[i].clear(),sum[i]=;
rep (i,,n) ban[i]=a[i]=;
return ;
} int main(){
int T; scanf("%d",&T); while (T--) Main();
return ;
}

day2 T1 皮配

 #include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define Vi vector<int>
#define ll long long using namespace std; const int N=2e5+;
int n,cnt,head[N],a[N],fa[N],id[N]; ll ans; priority_queue<int> q[N];
struct edge{int to,nxt;}e[N<<]; void adde(int x,int y){
e[++cnt].to=y; e[cnt].nxt=head[x]; head[x]=cnt;
} priority_queue<int> c;
void merge(priority_queue<int> &a,priority_queue<int> &b){
if (a.size()<b.size()) swap(a,b);
while (!c.empty()) c.pop();
while (!b.empty()){
int x=max(a.top(),b.top());
a.pop(),b.pop(),c.push(x);
}
while (!c.empty()) a.push(c.top()),c.pop();
} void dfs(int u){
for (int i=head[u];i;i=e[i].nxt) dfs(e[i].to);
for (int i=head[u];i;i=e[i].nxt) merge(q[u],q[e[i].to]);
q[u].push(a[u]);
} int main(){
scanf("%d",&n);
rep (i,,n) scanf("%d",&a[i]);
rep (i,,n) scanf("%d",&fa[i]),adde(fa[i],i);
dfs();
while (!q[].empty()) ans+=q[].top(),q[].pop();
printf("%lld\n",ans);
return ;
}

day2 T2 春节十二响

SHOI2019旅游记的更多相关文章

  1. CSP-S2019旅游记

    CSP-S2019 你问我为什么写旅游记? 因为好像除了旅游我今年啥都没干 Day0 校内模拟一直被吊锤,考前几场几乎要爆零 这提莫就不是什么好兆头 在家二刷水淹东京完回学校,带了一大堆家当上车 去广 ...

  2. NOI2019十二省联考旅游记

    真的是去旅游的啊,毕竟菜是原罪嘛 Day 0 去指定地点试机,果然,键盘还是一如既往的不好用,我也不知道为什么. 晚上,教练请吃自助餐,幸福的像个胖子 Day 1 早上坐车过去,在车上看了看原来写过的 ...

  3. CCF WC2017 & THU WC2017 旅游记

    day-x 真·旅游 去了杭州的一些景点,打了几场练习赛. day0 报到日 领资料.入住,中午在食堂吃饭,感觉做的挺好的,和二高食堂差不多.晚上还有开幕式. day1~day4 白天讲课,晚上营员交 ...

  4. NOIP2018旅游记

    2018.12.4更新: GD分数线出了,1=分数线310,1=了 好歹能和cyp交代了吧) 2018.11.28更新: 不好意思,太懒了,加上我也不记得后来发生什么了,总之就这样太监了. noip2 ...

  5. NOI2018旅游记

    这居然是我第一次参加非NOIP的NOI系列赛事,有点小期待啊 前几天的UNR我暴露出了许多问题,而且翻了好多分,不过令人震惊的是假设Day1不停电(导致已经写好的T3没交上去)我居然有rk10,虽然并 ...

  6. NOIP 2018 兔纸旅游记

    今年是第一次参加tg呢... Day0    早上出发去中旅坐大巴,走有 lz 特色的OI比赛道路. 车上谈笑风生,看 jw 的 GDOI 的小本本. 到动车站取票入站,看 lmh 和 zn 的爱恨情 ...

  7. 【strork】HAOI2017旅游记

    乘着大巴踏上归程,看着赛后落寞的一些人,赛后轻松的一些人,感触颇多. [爪机被lsj坑了,照片等周末再放...] 4月22: 早上起床不用跑操,到了教室我就看见LSJ跑过来,不用想,果然:“早上nin ...

  8. CTSC2018 旅游记

    我即使是死了,尸体烂在棺材里,也要用这腐朽的声音喊出: LJCCF!!!! DAY -3 体育中考AK了! 顿时感觉中考稳了(虽然竞赛已经特招) 新目标:我要用三种方式考上SZMS! DAY -1 成 ...

  9. mfc 导出数据保存成excel和txt格式

    最近做了一些东西,项目到了收尾的工作.不过这次我没有参与到控件机器的功能的那一部分,都是主管自己写的.不过,所有的控件重写都是由我来做的.还有数据库这一方面是我和主管共同完成的.不过还不错,主管写一部 ...

随机推荐

  1. js 语法高亮插件之 Prism.js

    之前也介绍过几款语法高亮插件<为博客园选择一个小巧霸气的语法高亮插件>以及关于他们的综合性能<再议 语法高亮插件的选择>.今天在小影志博客看到<使用 Prism.js 实 ...

  2. [转] Android 性能分析案例

    Android 系统的一个工程师(Romain Guy)针对Falcon Pro  应用,撰写了一个Android性能分析的文章.该文章介绍了如何分析一个应用哪里出现了性能瓶颈,导致该应用使用起来不流 ...

  3. JavaScript继承详解(四)

    在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. Crockford是Java ...

  4. java代码实现图片处理功能。对图片质量进行压缩。

    java图片处理有点头疼,找了很多资料.在这里进行一个汇总,记录下个人的体验,也希望对大家有所帮助. 需求:浏览的图片需要在1M一下. 1.真正对图片的质量进行压缩的(不是通过修改图片的高,宽进行缩小 ...

  5. BFS的队列

    按老师上课的话来总结,队列变化多端:   普通模板没有代价: 普通队列FIFO 01代价: 双端队列,单调队列 任意代价: 优先队列/堆,最短路SPFA/DIJKSTRA

  6. centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾

    centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾 系统:centos6.5 1.创建脚本目录 mkdir -p /usr/local/sh/ 创建备份web ...

  7. Android 7.0 行为变更

    Android 7.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Android 应用,请注意 ...

  8. CI框架中集成CKEditor编辑器的教程

    CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...

  9. .NetCore 中如何实现分页以及编写一个URL分页

    首先看下效果 这个分页控件不是很完美,体现下思路就行了,有兴趣的可以自己完善,我把代码贴出来,在这边文章中已有一些介绍 代码 public class UosoPagerTagHelper : Tag ...

  10. 关于.NetCore 2.0 迁移到2.1的一些建议和问题

    最近手欠升级了下VS2017到15.7版本 然后更新了下sdk到2.1.300版本 那么麻烦就来了,原有项目就带来了很多问题,更新所有包到最新就不用说了 下面说明下最主要存在的2问题: 第一个问题:调 ...