[SCOI2015]题目简析

来源:互联网 发布:linux的cp命令怎么用 编辑:程序博客网 时间:2024/06/10 15:11

目录:

  • 前言
  • Day1
    • P1 小凸的矩阵
      • 大意
      • 解析
      • 考场上的做法
      • 结果
      • Remark
    • P2 国旗计划
      • 大意
      • 解析
      • 考场上的做法
      • 结果
      • Remark
    • P3 小凸爱跑步
      • 大意
      • 解析
      • 考场上的做法
      • 结果
      • Remark
  • Day2
    • P1 密室逃脱
      • 大意
      • 解析
      • 考场上的做法
      • 结果
      • Remark
    • P2 密码盘
      • 大意
      • 解析
      • 考场上的做法
      • 结果
      • Remark
    • P3 情报传递
      • 大意
      • 解析
      • 考场上的做法
      • 结果
      • Remark
  • 总结

0. 前言

       SCOI2015,真是跪出翔了。
       这篇博客只讨论SCOI2015题目的简单做法,吐槽另有地方。

1. Day1

P1. 小凸的矩阵

大意:

       给你一个N * M的矩阵(N <= M),在其中选N个数,每行每列至多选一个。问第K大的数最小能是多少。

解析:

       二分答案,看一看匹配数够不够(N - K + 1),够就下移答案,不够就上移。

考场上的做法:

       同标解。

结果:

       100pt

Remark:

       就TM这么水?

P2. 国旗计划

大意:

       一个长度为M的环上有N段区间。保证这N段区间合起来能覆盖整个环。求:对于每个区间,选择它以后至少还要选择多少其它区间才能覆盖整个环。保证区间不互相包含。

解析:

       开环,则问题类似线段覆盖。那么对于每一个区间,选择它以后下一个选择哪一个是完全确定的。我们进行倍增判断至少选多少个就能走完一圈即可。

考场上的做法:

       开环,则问题类似线段覆盖。那么对于每一个区间,选择它以后下一个选择哪一个是完全确定的。我们把这个顺序关系建成一棵树,在树上进行黑算法。

结果:

       0pt

Remark:

       就TM这么水我还是没分?

P3. 小凸爱跑步

大意:

       一个凸的N边形,逆时针记每个顶点为P[0], P[1],……。在这个多边形内取一点P,连接P与多边形所有顶点,构成N个三角形。如果这N个三角形中ΔPP[0]P[1]的面积最小,则这个P点是可行的。求在这个多边形内任取一点,取到可行点的概率。

解析:

       根据集合概型,我们应该算可行区域的面积。考虑一条边P[M]P[N + 1],S(ΔPP[0]P[1]) < S(ΔPP[M]P[N + 1])对应一个半平面。求这些半平面的交即为可行区域。

考场上的做法:

       接近标解,但是求线段交点的函数忘记了。随便手推了一个。被卡精度了。

结果:

       40pt

Remark:

       几何的模板一定要背牢。

2. Day2

P1. 密室逃脱

大意:

       一棵完全二叉树,有边权与点权。每个节点上有一盏灯,需要按照DFS序点亮所有节点上的灯。点亮某个节点上的灯的花费为这个节点的点权乘以这个节点到上一个被点亮的节点的路径长度。点亮根节点没有花费。求最小花费。

解析:

       设dp[i][j]代表子树i全部点亮,最后一个点亮的是j的最小代价。看起来是O(n ^ 2)的,但是由于是完全二叉树,每个点的祖先是O(log n)的,所以状态是O(n log n)的。

考场上的做法:

       真正的O(n ^ 2)暴力,而且不知道哪里写挂了。

结果:

       0pt

Remark:

       就TM这么水我还是没分?

P2. 密码盘

大意:

       (为了描述流畅有一点不影响题意的小改动)
       一个环形密码盘上有N个数字,N个运算符(‘+’或者‘*’)。维护两种操作:

  • 修改某个位置上的数字和它左边的运算符。
  • 以某个数字为起点,构造一个长度为N的数列B:B[0]为起点上的数;对于起点之右的(N - 1)个运算符,把与它们相邻的两个数看成操作数,计算答案的个位数,依次为B[1]到B[N - 1]。查询B数列中距离B[0]最远的一段连续的0的起始位置。B数列中没有0输出-1。

解析:

       暴力维护每个运算符的运算结果,把0的位置用set维护一下。查询的时候特判一下起始点即可。

考场上的做法:

       暴力维护每个运算符的运算结果,暴力查询。

结果:

       0pt

Remark:

       为什么0pt参见我用来吐槽SCOI2015的博客。

P3. 情报传递

大意:

       情报员的联系网络构成一棵树,每个节点为一个情报员,父节点为上线。树根即为大Boss。每个情报员有一个危险值,初始危险值全部为0。
       一共有Q天,每天会发生下列两件事之一:

  • 某个情报员开始活动。这一天他的危险值仍为0,但是此后每天他的危险值会加一。如果他已经是活动的,什么事都不会发生。
  • 要把一份情报经过这颗树的一条路径从X号情报员传到Y号情报员,同时给出一个风险控制值C,路径上每一名危险值大于C的情报员会对这份情报构成威胁。求这次传递要经过多少情报员,其中多少对这份情报有威胁。每份情报的风险控制值可能不同。

解析:

       显然“某情报员对第D天传递的,风险控制值为C的情报有风险”等价于“该情报员在第(D - C)天前已经开始活动”。记录每个情报员最早开始活动的时间,则问题变换为:求一条路径上权值小于某定值的点的个数。
       树链剖分 + 主席树维护即可。
       其实最后发现哪需要树链剖分呢,直接主席树就过了,白加一个log。

考场上的做法:

       同标解。写了两个暴力用来对拍。

结果:

       100pt

Remark:

  • 够恶心,够恶心,够恶心;
  • 有点像码农题哟,可惜只有4K+;
  • 要对拍,不要浪。

总结

       尼玛死,手残丢分真是吓人。如果一次都不手残的话就能进A队了吧。可惜还是手残了。

1 0
原创粉丝点击