ICPC 小白勇闯南京
第 49 届 ICPC 南京站游记
【
Day -2
下午翘课,VP 了
开局签到,但是我读题加写题花了
然后是数学题,直接丢给队友,他们俩讨论了一下,差不多在一个多小时的时候过了这道题。接着队友开图论,我开到了袋鼠题,发现是大模拟,和另一个队友讨论出了一个解法后就让他写了(于是我开始摆烂)。但是,接下去的一个小时,他还不容易写完以后发现过不了编译。看了好几遍以后发现是数组开到了
接下来一直改啊改,用 swap() 和 shrink_to_fit() 但是还是
就这样到比赛结束,写了
Day -1
在 CEC 课上补题,把队友之前模拟写
定了周五下午的飞机,但在晚上收到飞机延误到傍晚的消息,于是果断(免费)改签到了中午。哎,这不正合我意!
Day 0
趁着队友还没到,先去签到处附近薅羊毛!收获一把雨伞,一件纪念款衣服,一个背包,一个台灯,一个吹风机外加一个多功能闹钟。
快到中午,队友才(一点疲惫地)到酒店,然后直接去签到。同时,也奠定了下午热身赛要烂的节奏。下午赛前在学校里随便逛逛,看了大灰机。
两点进入到体育馆中,收获了属于自己的阔爱袋鼠!听裁判长发言,这次有中文题面好评!但旁边是北京大学,压力拉满差评!然后就开始热身赛了,发现是没用过的
热身赛全部都是历年的袋鼠题,胡出来四道题目,然后在写第三题时一直超时(然而在 CF 上也是这么写的却能过),于是直接摆烂不写。我们三人分别开始睡觉、玩手机、发呆……结束时发现不少队伍直接 AK,感觉明天要完()。
【说句闲话,每人发了
Day 2
比赛开始,不知怎的非常紧张。我先开了签到,但是以为是字符串哈希,但是我对字符串哈希并不是特别的熟悉,于是把题目丢给队友。致命的是,我在传达时对子序列和子串没有特别的强调,导致队友在写
看
队友写
我又想了一个每次询问直径两端的做法,但是在细节上并没有处理的很清楚,能不能在
于是,
后记
总的来说,这是一次完全失败的比赛,我们有效做题的时间不超过
还有就是比赛的节奏是尤其重要的,像上次网络赛我们打了
还有一周就是 CCPC 重庆站,赶紧趁着这周再练习调整一下,加油吧!
彩蛋
回去的时候在机场和队友玩 QQ 飞车,然后一人一局相互破纪录,简直逆天。
赛后补题
-
\texttt{K}
其实就是简单贪心。显然的是每次在黑色块的地方切开,就像是多组数据。对于每个需要处理的区间,先从左往右扫,每次放纸条的地方显然是有红色的块最优。放完以后需要检验右端是否在范围内。若在范围之外,则需要从右往左再次扫一遍,进行纸条的调整。可以发现,即使纸条经过调整,数量仍然是不变的。最后,如果最左侧的纸条仍在范围内,则有解。核心代码如下:
void solve (int l,int r,int &w)
{
if (l > r) return ;
int cnt = 0,p = l;
while (w <= n && a[w] <= r)
{
paper[++cnt] = a[w];
p = a[w] + k;
while (w <= n && a[w] < p && a[w] <= r) ++w;
}
if (!cnt) return ;
paper[cnt] -= max (0,paper[cnt] + k - 1 - r);
int tmp = cnt;
while (tmp > 1) paper[tmp - 1] -= max (0,paper[tmp - 1] + k - paper[tmp]),--tmp;
if (paper[tmp] < l)
{
ok = 0;
return ;
}
for (int i = 1;i <= cnt;++i) ans.push_back (paper[i]);
}
-
\texttt{B}
感觉很
核心代码如下:
for (int i = 1;i <= n;++i)
{
if (s[i] == '2') ++cnt[2];
else if (i % 2 == 0) ++cnt[(s[i] - '0') ^ 1];
else ++cnt[s[i] - '0'];
}
for (int i = 1;i <= cnt[2];++i)
{
if (cnt[0] < cnt[1]) ++cnt[0];
else ++cnt[1];
}
printf ("%d\n",abs (cnt[0] - cnt[1]));
类似题目 Folding Strip