摘要: 题目链接 题解 如果$k$整除两个接起来的数$a_i,a_j$,它们一定满足$k|(a_i\cdot10^+a_j)$,其中$dig_j$为$a_j$的数位。由于求余运算的可加、乘性,$a_i,a_j$需要满足$k|[(a_i%k)\cdot(10^%k)+a_j%k]$,也就是只需知道$a_i$、 阅读全文
posted @ 2021-01-10 10:22 violet_holmes 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 易得为使序列最小,前$k$个经过的点一定都是$a$,而这些经过的点中一些原本即为$a$不用变换,因此用$f$数组记录到点$(i,j)$能经过$a$的最大数量。另设$maxs$表示只经过原本为$a$或变换后为$a$的点的最大步数,如果$f_{i,j}+k$(最大$a$数量)\(=i+j 阅读全文
posted @ 2021-01-10 10:21 violet_holmes 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 很普通的数位dp题呐,$state$表示$>0$的数位个数。 AC代码 #include<bits/stdc++.h> #define int long long using namespace std; int dp[20][5],a[20],cnt; int dfs(int po 阅读全文
posted @ 2021-01-10 10:16 violet_holmes 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 答案一定可以为一条链,因为对于答案树中的每个节点将其子节点从大到小排序放入链尾后依旧成立。 探讨限制条件:(1)$b$只能为$n$,因为$n$一定是它所在连通分量中的最大值。(2)设$cnt_i$表示$i$作为$a$出现的次数,则$\sum\limits_^icnt_j<i$,因为每 阅读全文
posted @ 2021-01-10 10:15 violet_holmes 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 可以发现枚举两个在一组里的数会TLE,加之只有两个参数限制与数据范围,容易想到排序算法。 计算第$i$个人的分数和需要知道他在每一组里是$x$还是$y$,因此排序需要满足$a_i$前的数与$a_i$组合时为$x$更优,而$a_i$后的数与$a_i$组合时为$y$更优(反之亦可),也就 阅读全文
posted @ 2021-01-10 10:13 violet_holmes 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 因为异或结果$\not=0$的情况过多,我们可以转为考虑结果$=0$的情况,用总数减去这些区间即可。每一个数都可以和包括自己的$n$个数组为区间,因此总数$=\frac{n(n+1)}{2}$。 至于如何求结果$=0$的方案数,可以想到前缀和,但枚举左右端点需要$O(n^2)$的时间 阅读全文
posted @ 2021-01-10 10:10 violet_holmes 阅读(43) 评论(0) 推荐(0) 编辑