NOIP2017记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33468963/article/details/78511469

这里写图片描述
D1
T1:找规律?
虽然这好像是小学奥数,但手推了十多分钟也很难有严谨证明,手出了几组数据就直接上结论了……
最后30分钟没事做,用rand()验证了一下算法的正确性 手动滑稽

T2:
题目略长,看了半天才读懂
第一眼看上去是道码农题,为了方便调试写了四五个函数,整整70行代码,写完还剩接近一个半小时
其实就是简单的压栈和字符串处理.

T3:
图论,
讲真,一开始我连暴力都想不到
yy了一会,决定上bfs+priority_queue乱搞
40min左右开始调试,感觉想到了一种更好的做法:

先上拓扑排序判-1,反向用spfa求每个点到终点的最小距离 dis[],
当搜索到一个点时,如果 len > dis[u]+k 直接退出

其实正解也与此类似,把每个点拆成 k 个点,再 spfa ,O(NK) 能过,不过以我的码力短时间内应该实现不了.

但只剩下了50min了,在短时间内写出来的可能性不大,写完暴力,就开始愉快的检查文操了

D2:
听说要考网络流,看了半晚上的dicnic,结果报道出了偏差 .

T1:
暴力模拟建图,赛后有人说可能会TLE

T2:
读完题面后看到 n <= 12 的数据范围,整个人都懵了,为什么我想到的是 prim???
可能我sometimes naive,但能过样例啊!
(贪心过样例/暴力出奇迹)
赛后出题人表示标算的复杂度是 O(n^4),贪心的大概是凉了.

T3:
感觉T3的题面比T2清晰,于是先上T3的暴力了
时间 O ( ( n + m ) × q ) ,空间 O ( m × n ) 的模拟结合n==1时的vector<>,就可以水50分左右,

然后开始想正解:

开n*m的数组(或bitset) 就会MLE,
所以正解应该用到了链表 vector
然后对操作分两种情况讨论?
可以用vector维护最后一列,再开n个vector维护新加入的点
但如果询问原本没出列的点呢?
查询每一行原有的点中有多少个点被删除,然后上二分?
map? bitset? 好像都不行,然后果断回T2写了个prim.

在最后还剩40分钟左右的时候注意到:对于50%的数据,q <= 500 我还能水分!
于是开500*m大小的数组,直接维护最后一列,大概能多水20分吧……

补充:D2T3 亲测 vector 的常数大到……,n==1的20分大概只有10分了

猜你喜欢

转载自blog.csdn.net/qq_33468963/article/details/78511469