CF AIM Tech Round 4上紫记

来源:互联网 发布:云游seo 编辑:程序博客网 时间:2024/05/17 23:42

本来CF Round427就已经有1865rating了,当时扬言要一战上紫,结果后面两场CF一场-5,一场+2,直到现在才达成目标,可惜暑假结束前或许不再有div1的round了。
这场cf时常2.5小时(然而前108分钟拿到了所有分数)。
开场看A题,以为hack点很多(flag*1,后来发现是真的),过了5分钟才AC,然后15分钟时切了B题,30分钟时切了C题,一看standing,还在200名开外,这样子怎么上紫啊?
点开D题,似乎是道交互题,接着我在UOJ群里看到“随机”二字,所以这题可以随机查询1000个位置,然后暴力?
从洛谷那道卡常RMQ拉来随机数板子,自信不会被卡(flag*2,后来很多人在奇怪的testWA了,突然很庆幸),开场66分钟交了一发, 居然Idleness limit exceeded on pretest 1?这是什么奇技淫巧?折腾了16分钟才知道每次I/O后都要fflush(stdout),然后WA了,把种子改成time(0)+5,随机次数改成900次,还是WA,眼调发现好像是没有判等于,改完就过了pre tests。
一看榜,刚好rank50,这下应该能上紫了吧(flag*3)
好像E题还无人AC,估计没可做。
好像AB题hack点很多,去刷hack算了。
我们房间里好像已经有人在A题刷了7个hack,看了几个估计没有还能hack的了(flag*4,7个hack刷过后A题还有两人FST)
然后就锁了B题,突然发现有个小哥是用组合数实现的,而且封装在一个返回值为int的函数里,造了50*50个1就hack掉了(然而vfk的博客里不是说没开long long要在pt里就显示出来吗?)。
过来会儿B题又多了几个hack,去试试C题吧。
发现C题什么奇怪的写法都有,还有用并查集的,然而叉不掉。
去UOJ群里问”div2C有什么hack点”,有个大佬私信我
2017/8/25 2:50:12
你认为哪里有?
2:51:35
2017/8/25 2:51:35
我也不知道,还没找到

2017/8/25 2:52:14
你没想好就看代码……

2017/8/25 2:52:18
搞什么飞机

2017/8/25 2:52:24
这不是裸的置换群吗

2017/8/25 2:52:28
有什么可以cha的

就这么裱了我一通。
最后3分钟有个人绝杀E题,真是exciting。
仔细回想了这场CF,似乎解锁了两个成就:1.AC一道交互题;2.在CF赛场上成功hack
顺便解说一下div2E的标算:
把原树的重心(可能在边上)找出来,然后努力把被重心(或重心所在边的两端点)分开的子树变成菊花,具体操作见代码。

#include<cstdio>const int N=200005;struct edge{    int to,next;}e[N<<1];int h[N],n,xb,a,b,i,j,rt,rt2,sz[N],f[N],dfn[N],x[N<<1],y[N<<1],z[N<<1],k,dad[N],lst;inline void addedge(int a,int b){    e[++xb]=(edge){b,h[a]};    h[a]=xb;    e[++xb]=(edge){a,h[b]};    h[b]=xb;}inline void up(int&a,int b){    if(a<b)a=b;}void dfs(int x,int fa){    sz[x]=f[x]=1;    for(int i=h[x];i;i=e[i].next)if(e[i].to!=fa)dfs(e[i].to,x),sz[x]+=sz[e[i].to],up(f[x],sz[e[i].to]);    up(f[x],n-sz[x]);    if(f[x]<b)rt=x,rt2=0,b=f[x];        else if(f[x]==b)rt2=x;}void getv(int x,int fa){    if(fa!=e[i].to && x!=e[i].to)dfn[++xb]=x,dad[xb]=fa;    for(int j=h[x];j;j=e[j].next)if(e[j].to!=fa)getv(e[j].to,x);}int main(){    scanf("%d",&n);    for(i=1;i<n;++i){        scanf("%d%d",&a,&b);        addedge(a,b);    }    b=1<<30;    dfs(1,0);    for(i=h[rt];i;i=e[i].next)        if(e[i].to!=rt2){            xb=0;            getv(lst=e[i].to,rt);            for(j=1;j<=xb;++j){                x[++k]=rt,y[k]=lst,z[k]=dfn[j];                x[++k]=dfn[j],y[k]=dad[j],z[k]=e[i].to;                lst=dfn[j];            }            x[++k]=rt,y[k]=lst,z[k]=e[i].to;        }    if(rt2)for(i=h[rt2];i;i=e[i].next)        if(e[i].to!=rt){            xb=0;            getv(lst=e[i].to,rt2);            for(j=1;j<=xb;++j){                x[++k]=rt2,y[k]=lst,z[k]=dfn[j];                x[++k]=dfn[j],y[k]=dad[j],z[k]=e[i].to;                lst=dfn[j];            }            x[++k]=rt2,y[k]=lst,z[k]=e[i].to;        }    printf("%d\n",k);    for(i=1;i<=k;++i)printf("%d %d %d\n",x[i],y[i],z[i]);    return 0;}
原创粉丝点击