2021-team12-003
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
[/wiki/2021-team12 返回]
[[Image(rank.jpg,1000px)]]
[[Image(submit.png,1000px)]]
= 概述 =
solved: 7/11
rank: ??
= 流水账 =
今天开场gym开了C发现是一道有点繁琐的模拟, PaperCloud看H, xLLLx看榜开了I, '''I1Y15'''。之后看榜PaperCloud开了E, xLLLx开了F, 之后E, F各wa了一发。xLLLx发现并查集没有更新改了发交了'''F2Y48''', PaperCloud发现E可能卡精度改了下交了'''E2Y49'''。在gym写C的时候, xLLLx读了A, PaperCloud读了G。gymC写好由于一个小错误wa了一发, '''C2Y64'''。PaperCloud会了H,gym会了G。期间G的题意看假过一次。xLLLx看榜读J想题罚坐。gym过了G '''G1Y110'''. PaperCloud继续写H. 胡出A题做法后gym去码了A. PaperCloud过了H '''H1Y158'''. 处理好细节后gym过了A '''A1Y168'''. xLLLx读完K。过完7题后瞬间rk上升 接下来的时间PaperCloud想K. gym和xLLLx胡了个J题方向 但细节不会处理。gym又读了D。继续口胡D,交了一发wa了。PaperCloud接过J,比赛结束没过样例。
= 总结 =
=== PaperCloud: ===
觉得今天总体的表现是挺好的。感觉我们每场都在进步。
罚时的次数也很小。
看错了G的题意,多亏Gym,不然可能要在错误的方向上浪费好多时间。(不能看着样例自己臆想题意)
后期有点垮,但是菜是原罪。中间潜水了好久想K,本来应该多去看些其他的题目。
应该多参加讨论。
码力还是很弱,还要继续复健。
=== xLLLx: ===
今天开场看榜过了I,然后才开了EF,看榜不够及时。
写F的时候并查集忘记最后更新,忘记了之前常踩的坑。
最后抱着队友的大腿过了最后两个小时。
最后的两小时不能说是一点思路没有,但也确实没有想到比较好的解决办法。
做题能力和代码能力还需要提升。
=== gym: ===
今天签到慢了一些,开始的时候我去看了C题,可能剩两个人看题目会慢一点,以后反应应该迅速一些。(但是我们应该3个人一起签到吗?我以为两个人看签到题,一个人去想稍微难一点的题是比较合理的。)
C题我因为脑子不清楚Wa了一发,非常不应该
一小时到三小时之间做了4题,速度还算合理。对A题印象比较深刻,因为这题细节比较多,虽然思路很清晰,但还是卡了有一会儿的,在处理细节上我确实不太擅长。
后来两小时一题都没有写出来,j题两个人一起想了很久,但是遇到了一个障碍,一直没有解决掉。D题最后一小时写的,码了半小时左右,速度还行,但是质量不高,到最后还是有bug
其实今天是三场里表现最好的一次了,罚时不多,甚至曾经rank很高过,可惜后继无力了。还要继续加油!
= 题解 =
* A:
一个结论:如果一个人的分数加一 只有原本与他排名相同的人排名会有变化
每次更新,维护所有分数的排名 原分数的排名+1,现分数排名不动(继承原分数的排名)或者现分数已存在(不需要修改)
这个排名可以使用到下一次排名变动 (变动可能是本人分数+1或是同分的人分数+1)
记录某个分数的排名上一次改动的时间 每次该分数排名改变 先给这个分数的val数组加上t*rk
每次更新一个人的分数时将原分数的 val加入其ans,加入方式类似差分
最后要全部更新一遍
最多只有1e6次操作
* B:
* C:
* D:
* E:
考虑新加进来的数无限大或者无限小的情况算必win或必不win。
如果有可能win直接使用中间的两个数。
* F:
对数值离散化 对于每个数存入包含它的人
然后对于包含同一个数的人不在一个集合里就用边连起来。
并查集维护下就好了。
* G:
* H:
考虑询问很小,可以直接对每个询问在线回答。
发现所选的线段一定有一头在整点上,否则可以通过移动完成。
对每个左端点找符合条件的右端点,或者对每个右端点找符合条件的左端点。
符合条件要求,h[i]-ik<=h[j]-jk
直接按上式子排序,从大到小插入即可。
找到符合的端点后还要考虑是否可以再加入非整段。
* I:
找到递减的相邻两个值往两边扩充找到最长不递增序列倒置
倒置后还是不行说明impossible
* J:
首先处理掉有0且不进行create的情况。
考虑从小到大create的次数,为num1。
那么有一部分点可正可负。
每次新加入一个新的可正可负的数时,更新它的贡献。
先减去它会影响的区间的原贡献。
再加上它的新贡献。
贡献指的是本区间最多可以有多少交错的组。
总交错的组数记为num2。
ans=num1*c+(n-num)*r
upd:
num表示一个区间中需要删除的数量
左右端点用类似链表的办法处理,并且只需要维护非自由点即可。
总结:
原先的做法中,num表示的区间中最多能有多少交错的组
事实证明这样子维护明显要麻烦很多(对于每一个数字将它变成自由数前都要考虑它是否曾对num产生贡献)
原先的做法中,非自由区间的左右端点是用并查集来维护的。
容易出错且不必要。
* K:
[/wiki/2021-team12 返回]


概述
solved: 7/11
rank: ??
流水账
今天开场gym开了C发现是一道有点繁琐的模拟, PaperCloud看H, xLLLx看榜开了I, I1Y15。之后看榜PaperCloud开了E, xLLLx开了F, 之后E, F各wa了一发。xLLLx发现并查集没有更新改了发交了F2Y48, PaperCloud发现E可能卡精度改了下交了E2Y49。在gym写C的时候, xLLLx读了A, PaperCloud读了G。gymC写好由于一个小错误wa了一发, C2Y64。PaperCloud会了H,gym会了G。期间G的题意看假过一次。xLLLx看榜读J想题罚坐。gym过了G G1Y110. PaperCloud继续写H. 胡出A题做法后gym去码了A. PaperCloud过了H H1Y158. 处理好细节后gym过了A A1Y168. xLLLx读完K。过完7题后瞬间rk上升 接下来的时间PaperCloud想K. gym和xLLLx胡了个J题方向 但细节不会处理。gym又读了D。继续口胡D,交了一发wa了。PaperCloud接过J,比赛结束没过样例。
总结
PaperCloud:
觉得今天总体的表现是挺好的。感觉我们每场都在进步。
罚时的次数也很小。
看错了G的题意,多亏Gym,不然可能要在错误的方向上浪费好多时间。(不能看着样例自己臆想题意)
后期有点垮,但是菜是原罪。中间潜水了好久想K,本来应该多去看些其他的题目。
应该多参加讨论。
码力还是很弱,还要继续复健。
xLLLx:
今天开场看榜过了I,然后才开了EF,看榜不够及时。
写F的时候并查集忘记最后更新,忘记了之前常踩的坑。
最后抱着队友的大腿过了最后两个小时。
最后的两小时不能说是一点思路没有,但也确实没有想到比较好的解决办法。
做题能力和代码能力还需要提升。
gym:
今天签到慢了一些,开始的时候我去看了C题,可能剩两个人看题目会慢一点,以后反应应该迅速一些。(但是我们应该3个人一起签到吗?我以为两个人看签到题,一个人去想稍微难一点的题是比较合理的。)
C题我因为脑子不清楚Wa了一发,非常不应该
一小时到三小时之间做了4题,速度还算合理。对A题印象比较深刻,因为这题细节比较多,虽然思路很清晰,但还是卡了有一会儿的,在处理细节上我确实不太擅长。
后来两小时一题都没有写出来,j题两个人一起想了很久,但是遇到了一个障碍,一直没有解决掉。D题最后一小时写的,码了半小时左右,速度还行,但是质量不高,到最后还是有bug
其实今天是三场里表现最好的一次了,罚时不多,甚至曾经rank很高过,可惜后继无力了。还要继续加油!
题解
- A:
一个结论:如果一个人的分数加一 只有原本与他排名相同的人排名会有变化
每次更新,维护所有分数的排名 原分数的排名+1,现分数排名不动(继承原分数的排名)或者现分数已存在(不需要修改)
这个排名可以使用到下一次排名变动 (变动可能是本人分数+1或是同分的人分数+1)
记录某个分数的排名上一次改动的时间 每次该分数排名改变 先给这个分数的val数组加上t*rk
每次更新一个人的分数时将原分数的 val加入其ans,加入方式类似差分
最后要全部更新一遍
最多只有1e6次操作
- B:
- C:
- D:
- E:
考虑新加进来的数无限大或者无限小的情况算必win或必不win。
如果有可能win直接使用中间的两个数。
- F:
对数值离散化 对于每个数存入包含它的人
然后对于包含同一个数的人不在一个集合里就用边连起来。
并查集维护下就好了。
- G:
- H:
考虑询问很小,可以直接对每个询问在线回答。
发现所选的线段一定有一头在整点上,否则可以通过移动完成。
对每个左端点找符合条件的右端点,或者对每个右端点找符合条件的左端点。
符合条件要求,h[i]-ik<=h[j]-jk
直接按上式子排序,从大到小插入即可。
找到符合的端点后还要考虑是否可以再加入非整段。
- I:
找到递减的相邻两个值往两边扩充找到最长不递增序列倒置
倒置后还是不行说明impossible
- J:
首先处理掉有0且不进行create的情况。
考虑从小到大create的次数,为num1。
那么有一部分点可正可负。
每次新加入一个新的可正可负的数时,更新它的贡献。
先减去它会影响的区间的原贡献。
再加上它的新贡献。
贡献指的是本区间最多可以有多少交错的组。
总交错的组数记为num2。
ans=num1*c+(n-num)*r
upd:
num表示一个区间中需要删除的数量
左右端点用类似链表的办法处理,并且只需要维护非自由点即可。
总结:
原先的做法中,num表示的区间中最多能有多少交错的组
事实证明这样子维护明显要麻烦很多(对于每一个数字将它变成自由数前都要考虑它是否曾对num产生贡献)
原先的做法中,非自由区间的左右端点是用并查集来维护的。
容易出错且不必要。
- K:
附加文件
- rank.png by xLLLx
- rank.jpg by xLLLx
- submit.png by xLLLx