Week1
Day1
生病在家躺着,别提了。 \color{white}{\texttt{生病在家躺着,别提了。}} 生病在家躺着,别提了。
Day两
下午来学校,做了一会早上的比赛题然后就去洛谷找题做了。
晚上边咳嗽边跑两圈,感觉要死了 。
Day3
今天学强连通分量,本蒟蒻觉得自己不会,就拿老师的模版代码自己加了点注释,在 oiclass 发了一个帖 问大家是不是这样,不过没人回只有人膜 。做了两题之后觉得挺简单的,不就是 dfs 和两个 if 嘛 ,那我理解得应该没问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 void tarjan (int u) { dfn[u]=low[u]=++index; s.push (u); inStack[u]=true ; for (int i=0 ;i<G[u].size ();++i){ int v=G[u][i]; if (dfn[v]==-1 ){ tarjan (v); low[u]=min (low[u],low[v]); }else { if (inStack[v]){ low[u]=min (low[u],dfn[v]); } } } if (dfn[u]==low[u]){ c++; int v; do { v=s.top (); s.pop (); scc[v]=c; inStack[v]=false ; }while (u!=v); } }
还是咳个不停,所以晚上回家。
Day4
今天的比赛第一题就是个贪心红题,T两 本来老师想考我们高精度 sqrt ,结果数据只有 1 0 20 10^{20} 1 0 2 0 被我们用 unsigned long long 和 long double 卡过,T3 判断条件写错,只要数据里有 1 3 2 这类子序列就会挂,还好数据淼只少了十分。T4 后来看好像一个容斥加数学,我怎么可能会,于是就前面的数据用暴力,后面 rand() 50pts。赛后发现删掉 rand() 那部分代码 70pts 当场裂开。三周后的我:哇只挂了 两十 分我好强啊。 \color{white}\texttt{三周后的我:哇只挂了 两十 分我好强啊。} 三周后的我:哇只挂了 两十 分我好强啊。
下午改完题发现了这道题 ,玩了好一会,又去随机跳题加了几道题到任务计划里但可是一道没做 。
终于能在学校住宿了,我的床太软了,仰着的时候屁股陷下去很不舒服。
晚上聊了一堆好玩的东西,UTC15:30 才睡。
Day5
割点与桥,加强版Tarjan,没什么的就不说了。
晚上打了比赛 ,开幕雷击:
P的,CF只有在你得到正Rating时才会有这个牌子。
不过麻辣兔头 尝起来很不错。
晚上熄灯后趁他们聊天时背下了《般若波罗蜜多心经》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 观自在菩萨 行深般若波罗蜜多时 照见五蕴皆空 度一切苦厄 舍利子 色不异空 空不异色 色即是空 空即是色 受想行识 亦复如是 舍利子 是诸法空相 不生不灭 不垢不净 不增不减 是故空中无色 无受想行识 无眼耳鼻舌身意 无色声香味触法 无眼界 乃至无意识界 无无明 亦无无明尽 乃至无老死 亦无老死尽 无苦集灭道 无智亦无得 以无所得故 菩提萨埵 依般若波罗蜜多故 心无罣碍 无罣碍故 无有恐怖 远离颠倒梦想 究竟涅磐 三世诸佛 依般若波罗蜜多故 得阿耨多罗三藐三菩提 故知般若波罗蜜多 是大神咒 是大明咒 是无上咒 是无等等咒 能除一切苦 真实不虚 故说般若波罗蜜多咒 即说咒曰: 揭谛揭谛 波罗揭谛 波罗僧揭谛 菩提萨婆诃 揭谛揭谛 波罗揭谛 波罗僧揭谛 菩提萨婆诃 揭谛揭谛 波罗揭谛 波罗僧揭谛 菩提萨婆诃
Day6
早上的比赛大挂分榜倒一,T3 理解错题意寄,T2 化简为繁寄。
下午打比赛 ,太多速通高手,我被打爆了。
回到家爆肝MC两个小时半,本来要骑驴去沙漠探险的,结果玩着玩着就去玩了飞行模组,找了半个小时不知道怎么加油,怒砸电脑。
Week两
Day1
橙名啦!
早上写了一个0+1 problem 。
并查集太简单了。就是一个图论版小递归。
1 2 3 4 5 6 7 8 for(int i=1;i<=n;++i) fa[i]=i; int find(int n){ if(fa[n]==n) return n; return fa[n]=find(fa[n]); }
我似乎晚上什么也没干。
Day两
何致远奆佬给我们出了一个非常简单的比赛,估计蓝蓝紫紫橙,最后6坤分加道签到题总算推出数学公式。学长真良心 。
Day3
T3 DP 初始值搞错,T两 算错复杂度。
T3 赛时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <iostream> #define int long long using namespace std;int x,y,z;int a[102 ],b[102 ],c[102 ],f[102 ][102 ][102 ];signed main () { cin>>x>>y>>z; for (int i=x;i>=1 ;--i){ cin>>a[i]; } for (int i=y;i>=1 ;--i){ cin>>b[i]; } for (int i=z;i>=1 ;--i){ cin>>c[i]; } for (int i=1 ;i<=x;++i){ for (int j=1 ;j<=y;++j){ for (int k=1 ;k<=z;++k){ f[i][j][k]=max (f[i][j][k],f[i][j][k-1 ]+(i+j+k)*c[k]); f[i][j][k]=max (f[i][j][k],f[i][j-1 ][k]+(i+j+k)*b[k]); f[i][j][k]=max (f[i][j][k],f[i-1 ][j][k]+(i+j+k)*a[k]); } } } cout<<f[x][y][z]; }
正解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #include <cmath> #include <stack> #include <queue> #include <cstdio> #include <string> #include <vector> #include <cstring> #include <iostream> #include <algorithm> #define PI pair<int,int> #define MP(u,v) make_pair((u),(v)) #define R register #define U unsigned #define IL inline using namespace std;const int INF=0x3f3f3f3f ;const int mod=1e9 +7 ;const int N=1e2 +10 ;const int M=1e3 ;int x,y,z;int n;int f[N][N][N][12 ],a[N][13 ];int main () { scanf ("%d%d%d" ,&x,&y,&z); n=x+y+z; for (int i=1 ;i<=x;i++) scanf ("%d" ,&a[i][1 ]); for (int i=1 ;i<=y;i++) scanf ("%d" ,&a[i][2 ]); for (int i=1 ;i<=z;i++) scanf ("%d" ,&a[i][3 ]); for (int i=1 ;i<=x/2 ;i++) swap (a[i][1 ],a[x-i+1 ][1 ]); for (int i=1 ;i<=y/2 ;i++) swap (a[i][2 ],a[y-i+1 ][2 ]); for (int i=1 ;i<=z/2 ;i++) swap (a[i][3 ],a[z-i+1 ][3 ]); f[1 ][0 ][0 ][0 ]=a[1 ][1 ],f[0 ][1 ][0 ][0 ]=a[1 ][2 ],f[0 ][0 ][1 ][0 ]=a[1 ][3 ]; for (int i=2 ;i<=n;i++){ for (int j=0 ;j<=min (i,x);j++){ for (int k=0 ;k<=min (i-j,y);k++){ int l=i-j-k; if (j>0 ) f[j][k][l][1 ]=max (f[j][k][l][1 ],f[j-1 ][k][l][0 ]+a[j][1 ]*i); if (k>0 ) f[j][k][l][1 ]=max (f[j][k][l][1 ],f[j][k-1 ][l][0 ]+a[k][2 ]*i); if (l>0 ) f[j][k][l][1 ]=max (f[j][k][l][1 ],f[j][k][l-1 ][0 ]+a[l][3 ]*i); f[j][k][l][0 ]=f[j][k][l][1 ]; } } } printf ("%d\n" ,f[x][y][z][1 ]); return 0 ; }
呜呜呜。
Day4
基础的最小生成树,就是贪心套并查集,我觉得我半年前都听得懂。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 #include <stdio.h> #include <stdlib.h> #define N 9 #define P 6 struct edge { int initial; int end; int weight; }; int cmp (const void * a, const void * b) { return ((struct edge*)a)->weight - ((struct edge*)b)->weight; } void kruskal_MinTree (struct edge edges[], struct edge minTree[]) { int i, initial, end, elem, k; int assists[P]; int num = 0 ; for (i = 0 ; i < P; i++) { assists[i] = i; } qsort (edges, N, sizeof (edges[0 ]), cmp); for (i = 0 ; i < N; i++) { initial = edges[i].initial - 1 ; end = edges[i].end - 1 ; if (assists[initial] != assists[end]) { minTree[num] = edges[i]; num++; elem = assists[end]; for (k = 0 ; k < P; k++) { if (assists[k] == elem) { assists[k] = assists[initial]; } } if (num == P - 1 ) { break ; } } } } void display (struct edge minTree[]) { int cost = 0 , i; printf ("最小生成树为:\n" ); for (i = 0 ; i < P - 1 ; i++) { printf ("%d-%d 权值:%d\n" , minTree[i].initial, minTree[i].end, minTree[i].weight); cost += minTree[i].weight; } printf ("总权值为:%d" , cost); } int main () { int i; struct edge edges[N], minTree[P - 1 ]; for (i = 0 ; i < N; i++) { scanf ("%d %d %d" , &edges[i].initial, &edges[i].end, &edges[i].weight); } kruskal_MinTree (edges, minTree); display (minTree); return 0 ; }
Prim 有点难还不会。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #define MAXN 1000 #define INF 1<<30 int closest[MAXN],lowcost[MAXN],m;int G[MAXN][MAXN];int prim () { for (int i=0 ;i<m;i++) { lowcost[i] = INF; } for (int i=0 ;i<m;i++) { closest[i] = 0 ; } closest[0 ] = -1 ; int num = 0 ,ans = 0 ,e = 0 ; while (num < m-1 ) { int micost = INF,miedge = -1 ; for (int i=0 ;i<m;i++) if (closest[i] != -1 ) { int temp = G[e][i]; if (temp < lowcost[i]) { lowcost[i] = temp; closest[i] = e; } if (lowcost[i] < micost) micost = lowcost[miedge=i]; } ans += micost; closest[e = miedge] = -1 ; num++; } return ans; }
狼人杀不知道盗宝偷的技能能持续到白天,痛失赢。
Day5
下午晚上爆刷16道黄绿题。
自学以前没学会的 Dijkstra 和 SPFA。
Day6
第一题想不出来,上个厕所瞬间AC。
Week3
Day1
最小生成树进阶。还行,至少比Prim简单。
爆切15题,写出第一篇题解。
Day2
看到新加坡国宝游戏公司 ,
1 2 3 温馨提示(免责声明):股票有风险,投资须谨慎,此股票为虚假股票,不要当真 股票走向规则,保证随机,可买可卖。 想成功先发疯、不顾一切向钱冲。拼一次富三代、拼命才能不失败。今天睡地板,明天当老板。小孩子才分对错,大人只看输赢。等伤害到自己的利益了又能拿出道德标准拿起对错。只有你们想不到的,没有我们做不了的!!!!
Day3
下午新初生离开,我们可高兴了,我的“九点两十五分”和“I also”出名了。
我都不知道我 T1 怎么AC的。
Day4
这个星期踢足球真开心,就是脚好痛啊。
Day5
中午终于把P1462 做完了,提交了5页评测记录。
T3 long long %d
梅开二度挂100。
下午踢全场,好大啊。
Day6
写这篇东西写到崩溃,到Week3已经乱写了。
感觉:上课和比赛总是神游,状态很不好,想好也好不了。但自由做题时就感觉良好。同学们都大大滴好,天天去204玩杀和牌可高兴了。