ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多校联考 CSP-J 2019 第三次模拟赛 题解

2019-09-21 22:08:48  阅读:375  来源: 互联网

标签:针对 测试点 题解 多校 联考 算法 即可 iii 我们


Notice :1.T4算法7的f(t)f(t)f(t)函数写错了…已更正。
2. 之后(可能)会发git链接。
3. 欢迎评论。

前言

Q:为什么叫入门提高级?
A:因为前两题手滑出的偏难,于是打算通过题面给大家一点安慰。后面两道难度还好吧…

《历史上的今天》解题报告

出题人:Panda_hu

前言

这是一道简单的大模拟题。
首先很抱歉这道题完全不符合T1的难度,原来打算放在T2的…
大概看了题面也知道我为什么要出这道题了…
主要考察参赛者的模拟能力。
其实我写完标程也挺惊讶的…居然会有50多行…

得分估计

大多数同学在90分以上,少数同学可能会失误。

算法1:针对测试点1-5

将输入数据去掉日期原样输出即可。

算法2:针对测试点6-12

将输入数据去掉日期后按照年份排序输出即可。

算法3:针对测试点13-16

你需要处理字符串dateidate_idatei​,然后再进行判断,最简单的输入方法是:

  scanf("%d.%d.%d",&y,&m,&d);

算法4:针对测试点17-19

你需要根据提示模拟年月日的进位,然后再判断即可。

算法5:针对测试点20-21

将算法3的输出按年份排序即可。

算法6:针对测试点22-25

将算法4的输出按年份排序即可。

关于数据

[数据有彩蛋…]
出题人还是基本上卡了每个月份的进位的…除了3,6,9月份…
有一个点是无解。

《勇者斗恶龙》解题报告

出题人:LSK

算法

首先 11,12,13,1411,12,13,1411,12,13,14 直接输出时要小心…

对于 N2000N\le 2000N≤2000 我们可以枚举最后一击,那么如果打其他头造成的攻击力为 atkidiatk_i-d_iatki​−di​ 因为其他攻击都打不死它,于是我们可以找到一种贪心策略,首先将所有头按照 atkidiatk_i-d_iatki​−di​ 从大到小排序,然后每次固定一个头 iii 后找出至少需要前面多少个头 atkidiatk_i-d_iatki​−di​ 之和相加大于 hatkxh-atk_xh−atkx​ xxx 是你选中的最后一击,时间复杂度 O(n2)O(n^2)O(n2)

然后我们发现每次确定一个头后暴力枚举时间复杂度过高,于是我们考虑优化,我们可以排序后统计出 atkidiatk_i-d_iatki​−di​ 的前缀和 sis_isi​,那么我们只需要针对 hatkxh-atk_xh−atkx​ 和 sx1s_{x-1}sx−1​ 大小关系分类讨论二分即可,时间复杂度 O(nlogn)O(nlogn)O(nlogn)

《徒步旅行》解题报告

出题人:LSK

算法

对于 11,1211,1211,12 特判一下即可。

对于 1101- 101−10 其实比正解还难打…

我们发现由于我们对于某一层的气候区 iii 而言,我们发现的是一个 x=ix=ix=i 和 y=iy=iy=i 的直线在第一象限的整数坐标 和 (0,i)(i,0)(0,i),(i,0)(0,i),(i,0) 构成,如果将气候区 iii 的点按照从左至右,从上至下的顺序抽出来作为一个二元数组 aaa (下标从一开始,设长度为 LLL),我们气候区 iii 最终结束时我们必定会在 a1a_1a1​ 或者 aLa_LaL​ 那么当我们进入气候区 i+1i+1i+1 时我们会落到哪个点呢? 那我们考虑如果点在 y=i+1y=i+1y=i+1 上可以向上走一格, x=i+1x=i+1x=i+1 上可以向右走一格,于是接下来我们只能以 now>a1>aLnow->a_1->a_Lnow−>a1​−>aL​ 或者 now>aL>a1now->a_L->a_1now−>aL​−>a1​ 的顺序访问,于是可以理解为我们对于某一层的气候区 iii 而言开始和结束位置都在端点。于是就可以进行 DpDpDp 了。

定义 f[i][01]f[i][0|1]f[i][0∣1] 表示到了第 iii 层气候区该层以左端点 (000) 或 右端点 (111) 结束的最小步数。

然后我们发现最后要回到起点,其巧妙之处在于以左右端点结束时必定也是距离原点最短的两个点 于是 Ans=min(f[n][0]+dis(p,(0,0)),f[n][1]+dis(q,(0,0)))Ans=min(f[n][0]+dis(p,(0,0)),f[n][1]+dis(q,(0,0)))Ans=min(f[n][0]+dis(p,(0,0)),f[n][1]+dis(q,(0,0))) p,qp,qp,q 是对应端点。
还要离散化。

《情报机器人》解题报告

出题人:Panda_hu

前言

这是一道根据OI中经典的洪水填充问题改造而成的题目,难度并不高,适合放在PJ-T4的位置。
题目主要的区分度主要在于参赛者对题面所给出的问题分析出问题的实质,和选手对最小生成树算法,二分/三分的掌握程度。
然后接下来的话就并不是很正式了
出这道题真的相当的难受。最开始这道题只有4个方向,然后标算被LSKdalao吊打,他口胡了一个4个方向n105n≤10^5n≤105(的大部分)做法,然而要用线段树+扫描线…显然是不可能放在PJ组的…为了hack掉n105n≤10^5n≤105的方法,于是我把题目改成了8个方向…
8个方向的做法要用三分,比较复杂…于是在这道题里只给了20分。中间出了相当多的情况(比如标算差点被hack之类的…),这里不展开。

得分估计

预计部分参赛者得分在4-16分不等,一些参赛者能够得到16分以上的成绩,可能存在80分以上的高分。(希望不会打脸)

算法1:针对测试点1

人口普查,输出0

算法2:针对测试点2-3

由于两机器人朝着同一个方向,因此我们可以把它们直接看做静止的,开一个二维数组直接模拟即可。
或者,你可以直接输出x2x1+y2y12\lceil \frac{|x_2-x_1|+|y_2-y_1|}{2} \rceil⌈2∣x2​−x1​∣+∣y2​−y1​∣​⌉。
这也是帮助你通过接下来的几个测试点的重要结论。
我们需要重新观察题面,其实,第iii次新增加的信号范围就是满足点(x,y)(x,y)(x,y),xx0+yy0=i|x-x_0|+|y-y_0|=i∣x−x0​∣+∣y−y0​∣=i的点。换句话说,这里的信号范围就是机器人走iii步以内能到达的所有点(每次可以走相邻的点)。这样就能直接推出上面的公式了。

算法3:针对测试点4-6

我们注意到只有四个方向时,机器人一旦覆盖了一个位置,之后就会一直覆盖着这一位置,因此它有单调性。
我们二分时间ttt,然后将机器人移到这一时刻相应的位置上去,然后根据公式计算值是不是小于等于ttt就行了。
[Ps:第5个测试点是No solutions]

算法4:针对x,y有限制的测试点

这几个测试点是留给各种乱搞的。
题目保证了数据完全随机,再观察一下给的样例,可以发现答案相当的小(测试点7-10大概只有40左右,实际上我们要计算期望),所以我们直接从111开始枚举ttt,按题意模拟即可。
你可以用并查集,或者直接DFS也行。
基于你暴力的复杂度,可能无法通过13-15号测试点。

算法5:针对测试点13-18

其实题目就是求完全图中生成一棵树,使得边权最大值最小。
其实这就是最小生成树。
根据算法2的公式计算出两两机器人的接收到信号的时间。
做一遍最小生成树即可。
复杂度:O(n2logn)O(n^2 \log n)O(n2logn)
当然,这个测试点也有O(n2)O(n^2)O(n2)的做法。

算法6:针对测试点19-22

将算法5的公式换为算法3的二分即可。
或者,你可以直接二分时间ttt,然后将每个点挪到相应的位置,如果两机器人的信号在ttt时刻重合就用并查集并起来,最后检验是否连通即可。

算法7:针对测试点11-12

然而,当机器人有8个方向时,就失去了单调性了。
例如下面的一组数据

2
0 0 5
1 1 8

如果用二分来做,多半会得到一个No solutions
但是这个函数一定是单峰的,这里仅简略证明:

我们横纵坐标分别考虑,如果两个机器人在这一维上方向相反,那么它就是一个分段函数,起始时为kx+bkx+bkx+b(不一定有),过了零点斜率为kx+b-kx+b−kx+b,这里的斜率kkk是一个常数,若机器人规定方向时相邻点时k=1k=1k=1,否则k=2k=2k=2,我们将两维的两个函数加起来,由于信号范围影响我们还要再加上一个2x-2x−2x,显然这个函数斜率一定是递减的,因此它一定是个单峰函数·

其实这就是初中学过的绝对值函数斜率整体减了个2…而且函数最多只有3段…
所以这题肯定有其他做法,欢迎大家来爆踩…
这里的函数可以描述为f(t)=x2x1+y2y12tf(t)=\lceil \frac{|x_2-x_1|+|y_2-y_1|}{2} \rceil-tf(t)=⌈2∣x2​−x1​∣+∣y2​−y1​∣​⌉−t。显然f(t)0f(t)≤0f(t)≤0时解合法。
然后我们将小于零的f(t)f(t)f(t)值全部设为000,这样就能直接三分了,具体请见标程。

算法8:针对测试点23-25

将算法6的二分换为算法7的三分即可。
复杂度:O(n2log1.5n)O(n^2\log_{1.5} n)O(n2log1.5​n)

算法9:EX

对于只存在四个方向的情况,我们有O(nlog2n)O(n\log^2 n)O(nlog2n)的做法。
我们可以改造算法6的第二个做法。
我们可以将曼哈顿距离转化为切比雪夫距离,这样信号范围就变成了一个正方形。
原问题就变成了在求矩形是否互相连通。
这是一个经典的扫描线问题,我们在维护线段树的时候同时维护并查集,依然判断是否连通即可。
然而直接做是要超时的,我们只要将连边数减少到O(nlogn)O(n\log n)O(nlogn)级别即可。
时间复杂度O(nlog2n)O(n\log^2 n)O(nlog2n)。

标签:针对,测试点,题解,多校,联考,算法,即可,iii,我们
来源: https://blog.csdn.net/qq_34940287/article/details/101121048

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有