题外话
为什么不更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的代码
1 #include<bits/stdc++.h> 2 #define rep(i,x,y) for (int i=(x);i<=(y);i++) 3 #define ll long long 4 5 using namespace std; 6 7 const int N=5e5+100; 8 int n,m,c[N*32][2],w[N*32],leaf[N*32],p[N],tot=1; ll a[N],sum[N],num[N],ans; 9 10 void ins(ll x){ 11 int now=1; 12 for (int i=31;~i;i--){ 13 int b=x>>i&1; 14 if (!c[now][b]) c[now][b]=++tot; 15 now=c[now][b],w[now]++; 16 } 17 leaf[now]++; 18 } 19 20 void dfs(int u,int i,ll x,ll y){ 21 if (!u||i<0||!w[u]) return; 22 if (leaf[u]) ans+=leaf[u]*(x^y); 23 dfs(c[u][0],i-1,x,y); 24 dfs(c[u][1],i-1,x|(1<<i-1),y); 25 } 26 27 int main(){ 28 scanf("%d%d",&n,&m); 29 rep (i,1,n) scanf("%lld",&a[i]),sum[i]=sum[i-1]^a[i]; 30 rep (i,0,n) ins(sum[i]),p[i]=1; 31 m*=2; ll res=0; 32 for (int i=31;~i;i--){ 33 ll s=0; 34 rep (j,0,n){ 35 ll b=sum[j]>>i&1; s+=w[c[p[j]][b^1]]; 36 } 37 if (s<m){ 38 m-=s; 39 rep (j,0,n){ 40 ll b=sum[j]>>i&1; 41 dfs(c[p[j]][b^1],i,num[j]|((b^1)<<i),sum[j]); 42 p[j]=c[p[j]][b],num[j]|=b<<i; 43 } 44 } else{ 45 res|=1ll<<i; 46 rep (j,0,n){ 47 ll b=sum[j]>>i&1; p[j]=c[p[j]][b^1],num[j]|=(b^1)<<i; 48 } 49 } 50 } 51 ans+=(ll)m*res; 52 printf("%lld\n",ans>>1); 53 return 0; 54 }