【拾题杂谈】GYM100517D Defend the Tower
题面大秦为你打开题目传送门
题目描述丹正在计划一场国际塔防游戏比赛,比赛拥有如下规。
战斗场地一排的十个格子,编号从 $1$ 到 $10$ 。每一个格子都有一些塔防守卫。同时有 $10 $ 个怪物,每个怪物的生命值为 $h$ 点,游戏时常的单位为秒。在 $1$ 到 $10$ 的每一秒开始时,一个新的怪物进入第一个单元格。每个怪物都有名为 delay 的特殊参数,默认情况下它等于 $1$ 。延迟塔可以增加怪物的延迟。如果一个怪物的的延迟是 $d$ ,并且在第 $t$ 秒开始时进入其当前单元格,则它会在第 $t +d$ 秒开始时移动到下一个单元格。有三种类型的塔:
枪炮塔:每一秒攻击当前格子的怪物。如果有多个怪物,则只有一个收受到伤害,受到伤害的顺序是先来先打。一个枪炮塔需花费 $3$ 美元建造,每次对于收到攻击的每个怪物造成 $1$ 点伤害。 用字母 $\tt G$ 表示
火箭塔:每三秒攻击当前格子的所有怪物。每次对于受到攻击的每个造成 $4$ 伤害,需要 $10$ 美元建造。用字母 $\tt R$ 表示。
延迟塔:每个怪物经过的最后五个格子中的延迟塔会造成怪物的延迟增加一点。举个 ...
【拾题杂谈】GYM100517B Bubble Sort
题面大秦为你打开题目传送门
题目描述众所周知,排序算法冒泡排序可以用如下的伪代码表示出来
12345define BubbleSort(a: array [1...n]) : for i from 1 to n - 1 : for j from 1 to n - 1 : if a[j] > a[j + 1] swap(a[j], a[j + 1])
我们把内部的一次循环称为冒泡迭代:
1234define BubblePass(a: array [1...n]) : for j from 1 to n - 1 : if a[j] > a[j + 1] : swap(a[j], a[j + 1])
实际上,不是所有的 $n - 1$ 次冒泡迭代都会被冒泡排序执行,一些数组会在一定次数的冒泡迭代后变得有序。比如说,数组 $[2,1,3,4]$ 在一次冒泡迭代后就会变得有序。
其实有很多的数组都只会经过一次冒泡迭代就变得有序,比如说由区间 $[1,3]$ 组成的数组的数字的 $6$ 个全排列中有 $4$ 个都只需要一次冒泡迭代就可以变得有序。 ...
【拾题杂谈】LuoguP1600 天天爱跑步
题面大秦为你打开题目传送门
题目描述
【拾题杂谈】AtCoder ABC299 G Minimum Permutation
题面大秦为你打开题目传送门
题目描述有一个长 $N$ 的序列,保证其中包含 $1$ ~ $M$ ,请你找到一个长 $M$ 的子序列,使得其中每个数字都出现了一次,并使得排列的字典序最小。
思路首先题目保证有解。我们考虑一下,我们可以从两个角度看问题,一是选择数字,二是删除数字。我们看这道题的考虑方向,我们要让字典序尽可能小,其实就是一些前面的大元素换到后面的替换过程,或者说更像插入和删除。这是候我们就不难想到,题目让我们求的序列,可以是原序列入栈出栈循环得到的产物。我们考虑如何去做这个栈。如果当前的这个树子比栈顶要小,那么把它替换过来坑定更优,但是在把栈顶删除的同时还要考虑能不能把它换回来,所以我们还要考虑后面还有多少种这个数字。基本思路就是这样,我们看代码:
代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879// #pragma GC ...
【算法介绍】Boruvka 算法
算法简介:乌眼Boruvka 算法是一个不常用的计算最小生成树的算法,通过不断地合并一个一个的连通块使用贪心的思想在 log 的复杂度求出结果。
算法演示:鸦羽算法流程:心魔我们首先想到,对于点 u 和 v ,如果 v 是点 u 所有边中距离最短的点,那么这条边一定在最小生成树中。
那么不难做出第一步:把最短的边连起来,这样子就会把他们变成很多个连通块。这样的连通块最多有 n 个。
接下来,我们把每一个连通块都看成一个点,那么继续找出最短的那条边一直重复,这样的当我们把所有的连通块都变成一个连通块的时候,就得到了最优解。
每一次至少变成原来的二分之一,复杂度就是 $O(n+\cfrac n 2 + \cfrac n 4 + …)$ 也就是 $O(m\log n)$ 其中 m 是边的数量
算法例题:彻证大秦为你打开题目传送门
这道题目的话,是一个完全图,完全图的特点就在于边特别多,像 kruskal 算法这种按照边作为复杂度的东西,显而易见就是会超时的,所以说这是候我们的 boruvka 就上场了。我们发现这种位运算的操作可以通过一些数据结构维护,但是这样的操作过程似乎不可以用 kru ...
【历题回顾】CSP-S 2023 初赛程序题详解
感觉简单了这次
第十六题123456789101112131415#include <iostream>using namespace std;unsigned short f(unsigned short x) { x ^= x << 6; x ^= x >> 8; return x;}int main() { unsigned short x; cin >> x; unsigned short y = f(x); cout << y << endl; return 0;}
假设输入的 $x$ 是不超过 $65535$ 的自然数,完成下面的判断题和单选题:
判断题
当输入非零时,输出一定不为零。()
解析:
异或操作左移右移不会搞掉我们原来有的 1,判对
(2 分)将 f 函数的输入参数的类型改为 unsigned int,程序的输出不变。()
解析:
肯定一不一样,这种左移右移会自然溢出的东西,内存翻了倍可不是开玩笑 ...
【历题回顾】CSP-S 2022 初赛程序题详解
难度适中。
第十六题123456789101112131415161718192021222324252627282930313233#include <iostream> #include <string> #include <vector> using namespace std; int f(const string &s, const string &t) { int n = s.length(), m = t.length(); vector<int> shift(128, m + 1); int i, j; for (j = 0; j < m; j++) shift[t[j]] = m - j; for (i =0; i<= n - m; i += shift[s[i + m]]){ j =0; while(j < m && s[i +j] == t[j]) j++; ...
【历题回顾】CSP-S 2021 初赛程序题详解
这次的题目有点玄学(对于我这种数学不好的)所以说我就只能把所有的程序题都讲了~ (谁叫选择题那么简单!
我们还是老规矩尽量的模拟我做题时候的思路
第十六题1234567891011121314151617181920212223242526272829#include<iostream>#include <cmath>using namespace std;// 反三角函数,反余弦,cos(60) = 0.6 , acos(0.5) = 60, 60 在弧度制是 π / 3const double r = acos(0.5);int a1,b1,c1,d1;int a2,b2,c2,d2;inline int sq(const int x) { return x * x; }inline int cu(const int x) { return x * x * x; }int main() { cout.flags(ios::fixed); cout.precision(4); cin > ...
【历题回顾】CSP-S 2020 初赛后三题详解
最后三题似乎是有点代表性的难题,就挑着讲一讲罢,毕竟我基础的选择题都全对了后面的程序前两题也是一点小失误丢分不大,,,,
第十八题首先我们浅浅的看一看代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136// 这道题的编写者手写了几个数据结构,我们要注意一下。// 下面模拟一下顺序查看代码的过程#include <iostream>#include <queue>using namespace std;const in ...
【算法介绍】斜率优化优化动态规划
算法简介:猫爪冻冻这里我们讲的是斜率优化DP。需要用到较多的数学知识,算是 DP 优化中比较难的东西了。这里会尽量的去把它讲详细起来。斜率优化 DP 从字面上来讲就是通过斜率优化这个DP算法。接下来就从一个斜率优化的入门例题讲解下来。
算法演示:猎人射术例题选讲:猫尾隐藏菜单大秦 为你打开 题目传送门
有 $N$ 个任务排成一个序列在一台机器上等待执行,它们的顺序不得改变。机器会把这 $N$ 个任务分成若干批,每一批包含连续的若干个任务。从时刻 $0$ 开始,任务被分批加工,执行第 $i$ 个任务所需的时间是 $T_i$ 。另外,在每批任务开始前,机器需要 $S$ 的启动时间,故执行一批任务所需的时间是启动时间 $S$ 加上每个任务所需时间之和。
一个任务执行后,将在机器中稍作等待,直至该批任务全部执行完毕。也就是说,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数 $C_i$ 。
请为机器规划一个分组方案,使得总费用最小。
部分分
数值
第一档
$n\le5\times10^3,1\le t_i,c_i\le100$
第二档
$n\le1 ...