首页 > 其他分享 >NOIP模拟赛35T1T2

NOIP模拟赛35T1T2

时间:2023-11-13 21:26:53浏览次数:39  
标签:这个 一个点 NOIP 路径 石头 35T1T2 ans 节点 模拟

T1 KAMEN

只能说一言难尽。 60pt暴力模拟每一个石头往下掉的情况。 在这里,我并没有打暴力,而是用set存储了每一列的X和O的石子分布情况。当前节点的位置在(x, y),寻找x列中比y大的第一个位置在ny(这里可以用upper_bound),那么石子在这一列能往下掉到的位置就是(x, ny - 1) 然后再判断能不能往左下往右下滚动,不断这样操作。 当石头停下时,再在它所在的列的set数组中加上它的行数字。 考场上的我天真的认为这玩意的时间复杂度一定能过。殊不知从一个位置上扔石子,石子往左下移动,再往右下移动,并且一直往这个位置上面扔石头,这个复杂度就乘上了一个n 好好的logn就成nlogn了...... 100pt 于是,对于这种左右摇摆的情况(适用于所有情况,这里只是打比方),我们考虑记录这个石头的路径。 在这里,石头路径的定义是:这个石头的起点,这个在路径中改变x坐标之前的到达的转折点,这个石头的终点。 一个从i列滚下来的石头到达了(x, y),这个点不存在于其它任何石头的路径之中,那么不影响其他的未来会从其他列扔下的石头。 这个点如果存在于一些石头的路径之中,那么我们就将原来那些石头的路径王辉删,直到这个一样的路径被删除,前面的路径保留下来(仍然可以继续走) 这样就不用重复遍历一些路径了。 关键点就是c的范围非常的小,以及同一个位置石头被扔下去的路径是有重复的,我们需要思考如何跳过重复的路径。

 T2 Travelling Merchant

考场上面打了一堆奇奇怪怪的东西,得了30pt(强连通分量看一个点能不能到达一个环的奇观玩意以及n非常小时的超级暴力)

接下来就让我们谈谈正解。

我们先想象一件事情,如果,所有的,点,都拥有出边,这说明了什么。

这说明你一定能去下一个点,也就是所谓的无限制的走下去。

那么这道题无解的情况就是

1.自己所有的一步能到达的点无解。

2.自己根本就没有能到的点。

那么我们首先就应该去计算那些出点都被计算过,或者根本没有出点的点。

于是我们就可以把这种操作想象成从一个已知答案的点向外不断扩展,每扩展到一个点,这两个点之间的联系就会断开,因为信息已经传递完成了。

这个操作就像点与点之间的边断开了一样。

那么,如果没有任何一个点的出度是0怎么办呢?

相当于这个连通图中的所有点都是有解的。

于是我们思考如何才能做到最有效,最正确地传递信息。

如果我们随便将一个点选出来进行计算,这个点的答案是不确定的,而且可能是错误的。

例如u的前面有一个节点v,v的限制比u更大,但是我们先更新了u,于是u的值就会偏小,后面与u有关的所有在它基础之上进行计算的节点都会偏小。

只有选择没有断掉的边中最大的,才能保证自己的正确,并且不干扰其它节点的正确。

这条边断掉之后,会出现新的出度为0的点,说明断边是这些点为能任意到达其它节点的一条可以经过的边,所以出度为0的节点v和一个能到它的起点u,ans[u] = min(ans[u], max(ans[v] - e[id].c, e[id].r)) 

而对于这条断边本身的起点u和终点v来讲,断边还在,说明图是联通的,点还是可以任意到达,而且已经删去了前面若干条边,这条边的r是剩下的图中最大的,ans[u] = min(ans[u], r)

ans为极大值说明这个节点不能做到自由走。

标签:这个,一个点,NOIP,路径,石头,35T1T2,ans,节点,模拟
From: https://www.cnblogs.com/ybC202444/p/17830203.html

相关文章

  • 【2023.11.13】NOIP2023模拟试题-33.md
    T1贪心地找到和最大的组的较大数删除是最优选择,因此开线段树维护全局最大数,并单点更新指定位置的值。参考代码展开代码#include<bits/stdc++.h>usingnamespacestd;#definefi(l,r)for(inti=l;i<=r;++i)#defineff(i,l,r)for(inti=l;i<=r;++i)#definelllonglon......
  • 模拟退火
    番外曾经看CY用模拟退火大杀四方,所以今天也来看一下这个算法,看了之后相见恨晚啊!我也不晓得为什么这么晚才学,多么优秀(暴力)的东西,QwQ在这里声明并不是完全原创,大部分选自Darth_Che的博客,介绍简介模拟退火算法(SimulateAnneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间......
  • 中国银行模拟器app,用java设计框架,图片网上找的,提供代码,仅供娱乐
    回执单生成器的Java程序需要涉及到一些基本的Java编程技能,包括创建类、处理用户输入和格式化输出。下面是一个简单的示例代码,用于生成一个简易的回执单。这个程序将接收用户的输入,然后生成一个格式化的回执单。请注意,这个示例是基础的,并没有实现完整的错误处理或复杂的用户界面。......
  • 2023NOIP A层联测30 A. 草莓列车
    2023NOIPA层联测30A.草莓列车目录2023NOIPA层联测30A.草莓列车题目大意思路code题目大意给定一个序列\(a\),有\(m\)次操作,将\([l,r]\)的每个\(a_i\)变为\(max(a_i,v)\)\(n\le10^5,m\le10^7\)思路对于每个数,只用用它本身和每个涉及到它的查询里面......
  • NOIP2023游记
    Day-417号我们就要出发。好快啊。写了博客,并不是很全,打算回来继续完善。想起之前有个dfs序求lca的坑还没填完。呃等我以后直接重构吧。看了辰星凌的DP优化,打算板刷一下题。UVA的题在\(4\)发UKE后终于AC。给老师批了卷子。NOIP很快就到了,我要告诉自己,爆零就......
  • java模拟PHP的pack和unpack类
    参考链接:https://www.xp.cn/b.php/69284.htmlimportjava.io.IOException;importjava.io.InputStream;publicclassPackUtil{/***打包字符串*类似php中pack在java中的实现**@paramstr*@return*/publicstaticbyte[......
  • InfOJ NOIP2023 模拟赛
    InfOJNOIP2023模拟赛T1给定长度为\(n\)的数列\(a\),每次操作需要选择\([l,r]\),满足\(a_l,a_{l+1},\cdots,a_r\)按位与的结果为\(0\),然后删去\([l,r]\),删去后左边和右边合并起来。问最多能合并多少次。\(n\le63,a_i\le63\)。简单区间dp。设\(f_{l,......
  • [NOIP2022] 比赛 - 总结
    [NOIP2022]比赛0.问题转化首先需要转化为区间历史和问题。具体上来讲,就是将询问离线后,扫描线维护对于\(r\)来说,每一个\(l\)的\(\sum_{i=l}^{r}(\max_{j=l}^{i}a_j\\cdot\\max_{j=l}^{i}b_j)\)那么答案就是区间和。1.构造信息与标记接下来就是如何维护区间历史和。......
  • 55. 右旋字符串(第八期模拟笔试)
    2023-11-12题目页面(kamacoder.com)思路:Java很简单,先将字符串分割,再重新拼接,如果是在本串操作(Java不行哦)那么可以先将整体反转,在将2个子串分别反转importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){intk;......
  • 洛谷 NOIP 2023 模拟赛 T2 汪了个汪
    洛谷NOIP2023模拟赛T2汪了个汪考试建出正解图不知道怎么处理,题解区樱雪喵博客薄纱。樱雪喵题解链接Ps:笔者语文爆炸,不建议阅读本文思路首先你会发现,一共有\(\frac{n(n-1)}{2}\)个二元组,有\(\frac{n(n-1)}{2}\)个横向相邻数对。按照题目要求,一个横向数对对应一个二......