CF Gym 选做

101964E

题意:给一堆点,以及一堆在\(x\)轴上的点,现在问对于每一个在\(x\)轴上的点,到他们曼哈顿距离小于等于\(l\)的点的个数。

思路:我们知道,对于某个点,到他曼哈顿距离小于等于\(l\)的点在\(x\)轴上是一个区间,所以我们可以把所有的在\(x\)轴上的点排序,二分出这个区间的左右端点,然后差分求个数即可。

101873D

题意:给一堆比较的关系,这个关系是传递的,然后现在要问一些命题是否成立或者不知道。

思路:好像可以直接\(floyd\)出传递闭包?但是我直接拓扑排序算了一下每一个点能到的所有点的集合,然后对于每一个命题看是否可以从第一个跑到第二个就好辣。

102082A

题意:给一堆文件名,现在要把连续的一段数字字符真的看成数字来进行比较,问它们和某一个文件名的字典序大小关系。

思路:直接模拟。。。题目说数字比字母小,那么就把字母设成1e9+原来的字母,然后直接比字典序大小即可。

102082B

题意:给一个集合,问从中怎么拿出最多的数使得它们满足等差数列的关系。

思路:直接考虑\(dp\)\(dp(i,j)\)表示这个等差数列的最后一个和倒数第二个分别是\(i\)\(j\),这个等差数列最长是多少。

转移的时候就看\(a[j]-(a[i]-a[j])\)是否存在,如果有就从那里转移过来就好了。

反思:这题\(wa\)了一次啊。。。原因是我以为等差数列的公差只能是连续两个数的差,然后就在比如\(0,2,3,5,6\)这种数据上出错了。

102082C

题意:给一堆人,它们都坐在一个\(r\)\(2s\)列的车上,\(s\)列和\(s+1\)列有过道,然后现在它们都开始向车尾移动:在过道上的人每秒向后移动一格,在座位上的人每秒向过道移动一格。现在如果有两个人将在同一时刻走到同一个位置,那么我们就不让其中一个走。现在问最短的所有人到达时间。

扫描二维码关注公众号,回复: 6247118 查看本文章

思路:我们先假装所有人都可以同时在同一位置。那么我们可以知道每一个人在什么时间会到达车尾。然后就发现同一时间到达车尾的两个人必定在什么时候会同时到达一个位置。那么就肯定其中一个人会等一秒。那么我们就是把在\(t\)时间到达车尾的\(num_t\)个人中\(num_t-1\)个都挪到\(num_{t+1}\)那里。这样就可以保证最短时间并且没有冲撞。

102082G

题意:给一个序列,问最少交换多少个连续的数能够使得这个序列变成一个单峰的。

思路:首先我们一个数要么向左一直换到自己应该的位置,要么向右。那么我们如果想要向左移动到应该的位置,最好情况就是已经左边有一个有序的序列,它就在其右边第一个。那么我们只需要把自己左边所有比自己大的数交换过去就好了。即使我们有一些小的数从左边交换到了自己的右边,我们为了不重复计算也忽略,对于每一个数只考虑比他大的和它交换后的代价

102007C

题意:求体积为\(n\)的长方体的最小表面积。

思路:直接枚举。我们先枚举小于等于\(\sqrt[3]{n}\)的高\(h\),然后枚举小于等于\(\sqrt{\frac{n}{h}}\)的宽\(b\),最后长\(a=\frac{n}{bh}\)。计算一下表面积即可。

102007F

题意:你现在要赚到\(M\)块钱,你可以通过和别人借一些钱来炒股。一只股票需要一定的本钱,然后你每天可以拿到一些钱。问你最少多少时间之内可以赚回和别人借的本钱\(+M\)

思路:首先二分最短天数。然后\(check\)的时候把每一只股票这么多天能赚的钱排序,然后取最多的看是否超过\(M\)。如果超不过就减小二分范围。

反思:这题\(wa\)了一次啊。。。是因为我没有想到答案可能超过\(1e9\),达到\(2e9\)之多。

102007G

题意:给一个ABC组成的序列。现在需要把某些位置改变使得这个序列组成的环中ABC都分别连续。然后问最少改变多少个位置。

思路:首先这种环的题肯定是复制辣。然后我们就枚举ABC的顺序以及这个环的开头在哪里。下面就是看三个区间中各有多少个是已经正确的即可。

102007K

题意:给一棵树,要求加一些边使得其中没有桥。

思路:首先我们看样例后发现是将一些叶子按照某种神奇的顺序连\(\lceil\)(这些叶子的数量)\(/2 \rceil\)条边。那么把图画出来后发现是按照字典序中两个相差\(\lfloor\)(这些叶子的数量)\(/2 \rfloor\)的叶子连边。如果最后一个叶子空着就连到\(1\)那里去。尝试一下就过了。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10871502.html