摘要:
T1: 每行每列都可以交换,其实就是错位排列。 写出递推式,打个高精就行了。 $f_n=(f_{n-1}+f_{n-2})*(n-1)$。 时间复杂度$O(nc)$。 T2: 可以暴力用bitsetAC。 直接建图跑拓扑,判断所有点的入度和能到达它的的点数是否相同。 用bitset维护连通集合。 若 阅读全文
摘要:
T1: 枚举$m$的个数,$O(1)$算出有几个$x$符合条件。 这样不仅效率低下,还会算重。 把$m$一定时的所有结果拍在数轴上发现仅当$ym>=lcm(n,m)$时会算重。 枚举到$lcm$即可。 时间复杂度$O(n)$。 T2: 直接统计复杂度太高,考虑换一个思路。 枚举$gcd$,将所有边权 阅读全文
摘要:
T1: 线性筛出前1e7个质数,暴力求出函数值。 由于输入可以当作随机数据处理,所以指针的变化是常数级别的,可以用指针维护位置。 开一个桶,维护每个数的数量,开两个指针变量,维护当前位置是哪个数和是第几个。 然后就可以分类讨论了,若删除和插入分别在两侧,指针就要移动。 等于的情况可以当作大于的情况, 阅读全文
摘要:
T1: 先考虑树的情况。 DFS遍历整棵树,将每个儿子向自己连的链两两匹配。 若有落单的点,就把当前节点的父链连进去,反之将父链传上去。 对于图的情况,我们可以将一个点拆成许多点,保持边不变,再对新建的树进行上述过程。 时间复杂度$O(m)$。 T2: 考虑转化题意。 设原序列为$a$,对原序列开一 阅读全文
摘要:
手写STL,卡常专用。 node为变量类型,可以自由定义,以下不再赘述。 1、stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可。 2、queue(循环队列) 用两个指针,记录队头和队尾,达到两端时特判即可。 3、deque(双端队列) 和队列类似。 4、priority_q 阅读全文
摘要:
T1: 直接模拟。 记录当前位置及朝向,暴力累加即可。 但是每次memset可能会T,只能记录经过的点,然后一个一个清。 时间复杂度$O(nk)$。 T2: rvalue学长的题解很好。 链接一下Lockey大神的题解:这里。 T3: 将操作视为一个字符串,可以用hash做,然后就是简单的线段树区间 阅读全文
摘要:
T1: 根据贪心策略,在价格较小的时候买入,价格较大的时候卖出,获得的价值才会更大。 每天都可以和之前的一天组成匹配,贡献为差值。 先用一个小根堆,维护还没有匹配的权值,从前向后扫,若堆顶比当前权值小,则组成匹配,累加差值,并将当前权值插入。 我们发现,在同一天买入和卖出,等价于这天没有操作。 也就 阅读全文
摘要:
T1: 约瑟夫问题。 经证(da)明(biao)可知,最终答案计算方法是: 答案由$1$开始,每次加$m$,若大于次数加一,就对次数加一取模。 可以$O(1)$计算每次取模的位置,取模不超过$mlogn$次,于是时间复杂度为$O(mlogn)$。 T2: 普及:向量叉积:$v_1=(x_1,y_1) 阅读全文
摘要:
T1: 翻转区间相当于位移,但是边界附近的点要特判。 可以处理出最左侧和最右侧的对称轴,然后分类讨论每个数的位置,即可知道他能移动到的区间。 用set进行bfs即可,相同的点不会被遍历两次。 也可以线段树优化建边,注意优化建边跑双端队列bfs一定要把出边的权值设为1。 时间复杂度$O(nlogn)$ 阅读全文
摘要:
T1: 每个数至多有$2 \sqrt{m}$个约数,也就是说即使$n$很大,在数集中有倍数的数在$m \sqrt{a}$级别。 可以暴力筛出数集中每个数得约数,用hash表维护一下,可实现$O(1)$查询。 用$n$减去筛出的数个数即为答案中0的个数,但是注意超过$n$的数要删掉。 时间复杂度$O( 阅读全文