Atcoder 全是神仙题-- 先变成能不能从 \(b\) 到 \(a\).操作变成一个数减掉旁边两个数. 考虑里面最大的且不和 \(a\) 中相等的那个数.它两边的数此时都不能操作,否则就减到非正数了. 而且应该要一直对这一位进行操作,直到等于 \(a_i\) 或者不是最大值为止.这样两边的数才能操作,或者真正确定无解. 用个堆模拟即可. 我的代码中复杂度--大概是两个 \(\log\) 吧.(辗转相除算一个) #include<bits/stdc++.h> using namespace…
从后往前做,每次将\(B_i\)减去相邻两个数,注意如果最大的数没有变成初始状态,那么肯定要减,否则相邻两边的就减不了,所以用堆维护.根据辗转相除的复杂度,\(O(n\log^2 n)\). #include<bits/stdc++.h> #define Rint register int #define MP make_pair #define fi first #define se second using namespace std; typedef long long LL; type…
题目大意 给你一个序列a和序列b 每次操作是a[i]+=a[i-1]+a[i+1] 问a经过最少几次操作可以得到b 分析 用堆维护a 每次取出最大的 撤销操作直到不能撤销 将新数放入堆 不断维护即可 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include…
说来惭愧,已经四个月没有切 leetcode 上的题目了. 虽然工作中很少(几乎)没有用到什么高级算法,数据结构,但是我一直坚信 "任何语言都会过时,只有数据结构和算法才能永恒".leetcode 上的题目,截止目前切了 137 道(all solutions),只写过 6 篇题解,所以我会写题解的一般都是自认为还蛮有意思或者蛮典型的题目,就比如这道题. 题目链接:Count of Smaller Numbers After Self 这道题很有意思,给出一个数组,返回一个新的数组,新…
说来惭愧,已经四个月没有切 leetcode 上的题目了. 虽然工作中很少(几乎)没有用到什么高级算法,数据结构,但是我一直坚信 "任何语言都会过时,只有数据结构和算法才能永恒".leetcode 上的题目,截止目前切了 137 道(all solutions),只写过 6 篇题解,所以我会写题解的一般都是自认为还蛮有意思或者蛮典型的题目,就比如这道题. 题目链接:Count of Smaller Numbers After Self 这道题很有意思,给出一个数组,返回一个新的数组,新…
1023 Have Fun with Numbers(20 分) Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly t…
神仙题. 先考虑平方级别的暴力怎么做. 明显答案有单调性,先二分 \(c\). 先最短路预处理 \(dis_u\) 表示 \(u\) 到离它最近的充电站的距离(一开始把 \(1\) 到 \(k\) 全部丢到优先队列里就行了). 考虑当前站在 \(u\) 点上时,剩余的电量是 \(x\).注意到由于起点是充电站,就一定有 \(x\le c-dis_u\)(考虑最后一个走到的充电站沿最短路走到这) 如果 \(x<dis_u\),因为终点是充电站,肯定不可能再到终点. 否则就可以走到最近的充电站再回来…
神仙题. 排列计数,一种常见的做法是 \(i\) 向 \(p_i\) 连边. 然而这里这个就逼迫我们只能从 \(i\) 向 \(a_i\) 连边. 不过没关系,考虑从 \(i\) 向 \(p_i\) 连边的图(为方便叫 \(G_1\))和从 \(i\) 向 \(a_i\) 连边的图(为方便叫 \(G_2\))的区别. 首先 \(G_1\) 中每个点入度和出度都是 \(1\),所以是一堆环构成的. 考虑一个环:(下面建议画图,懒的建议看 litble 学姐的博客,自己不敢直接把图拿过来) 如果上面…
这题就是拼拼凑凑就出来了. 可能看英文题面容易题意杀(小写大写 \(n,N\)),这里复述一遍:对于每个构成凸多边形的点集(每个点恰好都是凸多边形的顶点,必须是严格的凸多边形,内角严格小于 180 度),贡献是 \(2^{内部点个数}\).内部点包括边,不包括顶点.求贡献之和. \(2^{内部点个数}\) 很容易想到枚举内部点集合的子集. 然后发现就变成了:对于每个点集(这次不一定要构成凸多边形了),如果有凸包就有 \(1\) 的贡献.(感受一下) 可以用总方案数减掉不合法的方案数.不合法的点集…
对于这种随机数据或者随机算法的题-- 都是神仙题吧. 要求的就是对每个点前 \(m\) 个点中有多少个可以到达它. 由于评分方式这么奇怪,不妨考虑随机. 随机 127 次(可以选别的数,够多而且不 T 就行),每次给前 \(m\) 个数随机赋值,然后拓扑求出能到达每个点的最小值. 可能脸黑,所以多跑几次取平均数.最后每个点的平均最小值就可以看成真的期望最小值. 有一个结论:\([0,v]\) 中取 \(x\) 个数,最小值的期望值是 \(\frac{v}{x+1}\). 所以就能算出每个点的最小…