比赛|WC2018游记

2.3 Day0
来到了长沙。
2.4~2.7
Day1~Day4
各种讲课,各种掉线。我们还是说饭吧,不是说好了应该很辣?为什么我的唯一感觉是很甜???
2.8
Day5
考试日
第一题看上去就暴力分十足,先写了n^2的28分,然后16分的直接求树上直径,然后当时sb的满脑子都是点分治于是写了点分治求树上最长链qaq。还对拍了一下美滋滋。以为拿到44分过去了将近一个半小时赶紧去看T2。
第二题,n好小,无向图欧拉回路,怎么判定来着,满脑子都是要不跑个网络流验证下吧,脑残至极。还好慢慢的想起来联通且度均为0为存在欧拉回路。然后就敲暴力枚举试试大样例嘛!咦,不对诶???开始了怀疑人生的调试qaq调啊调,调到外婆家,旁边大哥开始吃东西,吃得贼香emmm【一脸黑】
时间过去了三个半小时,依旧调不出来的我【再见】,连一开始想好要写状压dp的都忘记了qaq于是转战T3。
第三题,交互题,然而看上去很可搞?好像暴力分又双叒叕很足?心想这次wc分数线怕不是要上天qaq于是乎就假贪心的写了一波,测测样例,跑的很滋磁诶,还想写写随机化,然而还不敢写随机种子gg(别问我为什么不知道自己钦定一个种子就好了),就随便重新表了一下号,假装我随机了【捂脸】。
还有一点时间,跑去接着调T2,怀疑是我误解了欧拉回路的判定方法,于是开始瞎搞,然后在最后一分钟,突然就调过了???突然就和敦敦敦心灵相通了???无比激动,然而把写状压dp的计划彻底忘在了脑后【再见】,估计就算写也写不完了吧x
此时大喇叭响起考试结束。眼见一个黄衣男子wys匆匆跑过,大声呼喊着些什么,大致是些不要结束的话语吧。我还很惊奇,这是咋的了。。
原来,是T2的题目描述有些锅。。。然后广播有些锅。。。嗯,有趣。T1的16分挂掉了,我还一直以为是非要写点分点分写挂了,结果是没*3【再见】,于是乎28+20+70=118Cu滚粗(Ag线120)【再见】
其实T2状压dp还挺简单的?gg。其实暴力分至少有44(+12)+50+70?,暴力打满也够Au了呢,然而太菜无话而说。
大家好像都各种出锅了?哎,希望下次大家都能运气再好一点吧qaq
2.9 Day6
湖南省博物馆。车上人数闹鬼是为何?原因竟是**
下午回来和wrx打通关了森林冰火人,感觉很有成就?【捂脸】
【比赛|WC2018游记】2.10 Day7
返程。
通道

#include #include #include using namespace std; #define N 100010 #define ll long long #define inf 0x3f3f3f3f inline ll read(){ ll x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,Log[N<<1]; struct edge{ int to,next; ll val; }; struct Data{ int h[N],num,fa[N],dep[N],mn[N<<1][19],dfn[N],a[N<<1],dfnum,f[N],sz[N],rt,sumsz; ll dis[N],mx,gmx,ans; bool vis[N]; edge data[N<<1]; inline void ini(){ for(int i=1; i2*n-1) break; if(dep[mn[j][i-1]]y) swap(x,y); int t=Log[y-x+1]; if(dep[mn[x][t]]>1]+1; for(int i=0; i<3; ++i) A[i].ini(); if(n<=3000){solve0(); return 0; } A[0].solve1(); return 0; }

州区划分
#include #include #include using namespace std; #define N 2100010 #define ll long long #define inf 0x3f3f3f3f #define mod 998244353 inline int read(){ ll x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,m,p,h[25],num=0,bin[25],du[25],sum[N],ans=0,summ=0,w[25],inv[3000],fa[25],f[N]; bool ok[N],good[25],in[N]; struct edge{ int x,y; }e[5000]; inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]); } inline bool check(int S){ int tot=0; for(int i=0; i>i)&1) good[i]=1,sum[S]+=w[i],++tot; else good[i]=0; fa[i]=i; } for(int i=1; i<=m; ++i){ if(!good[e[i].x]||!good[e[i].y]) continue; du[e[i].x]++; du[e[i].y]++; int xx=find(e[i].x),yy=find(e[i].y); if(xx!=yy) fa[xx]=yy,--tot; }if(tot!=1) return 1; for(int i=0; i

即时战略
#include "rts.h" #include #include #define N 300010 bool f[N]; int ed[N],now,a[N]; inline void solve(int x){ while(x!=a[now]){ int y=explore(x,a[now]); f[y]=1; x=y; } } void play(int n, int T, int dataType) { a[1]=1; now=1; for(int i=2; i<=n; ++i){ a[i]=a[i-1]+7; if(a[i]>n) a[i]=++now; }now=n; memset(f,0,sizeof(f)); memset(ed,0,sizeof(ed)); f[1]=1; while(T--){ while(f[a[now]]) --now; if(!now) return; int res=explore(1,a[now]); if(ed[res]) solve(ed[res]); else f[res]=1,solve(res); ed[res]=a[now]; } }

    推荐阅读