class Solution { public: int getSum(int n) { int sum = 0; while (n) { sum += (n % 10) * (n % 10); n /= 10; } return sum; } bool isHappy(int n) { unordered_set<int> set;
#include <stdio.h> static int ci=0; int sum(int i) { ci++; int m=0; if (i<100) { m=i+sum(i+1); printf("%d ",m); return m; } else return i; } main() { int a=0,b=1; a=sum(b);
只是 DP 优化罢了,其他乱七八糟的 DP 根本不会。 全文只是我自己的理解,有逻辑上的错误请指出来 qwq 斜率优化 DP 斜率优化的流程是这样的。 首先列出 DP 式子,接着钦定两个在当前位置之前的变量。 形式化地,当前转移目标为 \(i\),钦定 \(1 \le j_1<j_2<i\)。 接着钦定 \(j_1<j_2\) 且
1、管理 -> 选型 -> 启用数学公式支持 2、使用markdown编辑器 3、示例:$\sum_{1}^{m}\theta ^TX^i$ \[\sum_{1}^{m}\theta ^TX^i \]说明:公式使用\(\$\),或\(\$\$\)独立一行,具体参考markdown语法 4、在线公式编辑器:https://www.codecogs.com/latex/eqneditor.php
[1] Preface The problem does not require advanced knowledge and heavy implementation at all, but starting in the right direction may not be easy. [2] Solution Let us look at the maximum among \(L_i\) and minimum among \(R_i\) and let \(L_l=M, R_r=m\
熵 $H = -\sum_{i = 1}^{n} p(x_{i}) \log p(x_{i})$ $n$ 是分类的数目,熵越大代表随机变量 $X$ 的不确定性越大。 可知 $0 \leqslant H(P) \leqslant \log n$ 条件熵 $H(Y|X)$ 表示已知随机变量 $X$ 的条件下随机变量 $Y$ 的不确定性。 定义 $H(Y|X)=\sum_{
一、介绍 功能 快速求前缀和 O(logn) 修改某一个数 O(logn) 原理 c[x]:以x结尾的长度lowbit(x)的所有数的和 父节点找所有子节点(求和操作):c[x] = a[x] + c[x-1] + ... + c[lowbit(x-1)],x为偶数时,每一次去掉最后一个1;x为奇数时,没有子节点 子节点找父节点(修改操作):p = x + low
Oracle行转列就是把某一个字段的值作为唯一值,然后另外一个字段的行值转换成它的列值。 案例原始数据如下: 方法一:利用group by实现 select t.mr_sl_id, sum(decode(xmdm, '01', t.xmje, 0)) 床位费, sum(decode(xmdm, '02', t.xmje, 0)) 诊察费, sum(
上一个写太长导致 typora 卡爆了,只好新开一个。。 动态规划题目选解(一) CF730J Bottles Present 4 首先 \(k\) 很好算出来:记 \(\sum a_i=\text{sum}\),从大到小贪心选到 \(\sum b_i\ge \text{sum}\) 即可。 考虑 \(t\) 怎么算:如果我们选出的这 \(k\) 个瓶子内的水量分别为 \(x_1,x_
赛时应该口胡了个大概,可惜没有转化成更纯粹的问题。 问题可以看做有多少不同的 \(x\) 满足 \(x=\sum_{i=1}^{m}(\frac{1}{k})^{a_i},1-x=\sum_{i=1}^{n}(\frac{1}{k})^{b_i}\)。 以上结论可以将平均数的过程建成一棵树,然后 \(x\) 代表权值为 \(1\) 的叶子结点,\(y\) 代表权值为 \(0
XM6138 分糖果 stO jc Orz 解题思路 很神奇的一题。 看到题目首先想到的就是二分答案。那么问题转化为了如何验证一个答案 \(x\)。 我们定义函数 \(f_{i,j}\) 表示考虑前 \(i\) 个小朋友,是否可以分成 \(j\) 段,使得每一段都满足和小于 \(x\)。这个函数很好转移: \[f_{i,j}\leftarrow
class Solution { public: vector<vector<int>> res; vector<int> path; int sum; void dfs(int start, vector<int>& candidates, int target) { if (sum > target) return; if (sum == target) {
class Solution { public: vector<vector<int>> res; vector<int> path; int sum = 0; void dfs(int start, vector<int>& candidates, int target) { if (sum > target) return; if (sum == target) {
算了,不摆烂了,事情太多,没摆烂的时间了。在我研究出如何把某平台上多年积累的流量变现前,就继续用这个博客记录日常吧。之后所有内容基于时间,就懒得设置标签分类之类的了。 昨晚参加完卓工面试后,时隔两年,再次打了\(Div.2\),嗯,然后敲完\(A\)就睡着了没办法,刚军训完太累了辣……能在\(Di
更好的阅读体验 从《具体数学》第五章 二项式系数中选了一些个人认为比较 useful 的内容,添加了部分解释和证明。 组合数 在 \(n\) 个元素中选择 \(m\) 个的方案数,记作 \(\dbinom{n}{m}\),定义为: \[\dbinom{n}{m}=\dfrac{n!}{m!}{(n-m)!} \]其中 \(n,m\) 为非负整数。 当 \(m\) 为非
由于某种程度上有点闲着没事干所以看了看硬币游戏这个题然后感觉应该学习一下概率生成函数于是就看了看几个题然后似乎发现了什么不得了的科技所以我觉得应该写篇博客总结一下(没错我就不加标点) 首先生成函数的定义不再赘述(其实是不想写) 对了前置知识:同济大学出版社 高等数学 上册
https://leetcode.cn/problems/shifting-letters-ii/ 1 class Solution { 2 public: 3 string shiftingLetters(string s, vector<vector<int>>& shifts) { 4 int n = s.size(); 5 vector<int> f(n + 1); 6 /* 差分数组
lyin场切黑题太强了 首先康托展开是用来求一个全排列的排名的东西。复杂度\(O(n^2)\),树状数组可以到\(O(n\log n)\)。板子 简单说一下原理:首先一个长为\(n\)的排列数是\(n!\)没什么问题。所以我们可以对于每一位考虑有当前位之后有多少排列要比该排列小。 举个例子:\(3,1,4,2,5\)这
Codeforces Round #818 (Div. 2) 赛时:476+904+1176+930+0+0 补题:476+904+1176+930+600+0 A. Madoka and Strange Thoughts 求满足 \(a,b\leq n\) 且 \(\frac{lcm(a,b)}{gcd(a,b)}\leq 3\) 的个数。 \(n\leq 10^8,t\leq 10^4\) 。 赛时打表 \(1\) 分钟看出规律,设差分序列 \(b_i=
目录题意思路代码 目录 题意 将n个将军卡片分成两份,要求两份卡片之间的差值尽可能小,求最大的那一份卡片的和,这里有m组卡片是不能放在同一份的 思路 对有矛盾的组我们建图进行01染色,对于每一个连通块得到所有的0点和1点的差值的绝对值,我们存在数组ve中,单点也加入ve中,相当于一份是x
题目 假设有10种物品,问平均需要抽多少次,才能把所有物品都抽到一遍? 分析 首先要知道 \(Min-Max\) 容斥: \(min(S) = \sum_{\varnothing \ne T\subseteq S} (−1)^{|T|+1}max(T)\) \(max(S) = \sum_{\varnothing \ne T\subseteq S} (−1)^{|T|+1}min(T)\) \(kthmax(S)=\sum_{\varn
传送门 思路 考虑使用莫队 当加入一个数时,如果不是第一次加入,就不用管它; 否则,我们在权值线段树上记录它的贡献 为了方便修改,线段树上需要记录的是:它的排名减一的斐波那契数与它的乘积,以及它的排名的斐波那契数与它的乘积,记为 \(pre,sum\) 假如我们加入一个数 \(x\),那我们需要统计
编程题 完美的序列 我不知道为什么这样是正确的 int prefectSequence(vector<int>& input) { int left = 0, right = 1; long sum = input[0]; int maxLen = 0; while (right < input.size()) { if (input[right] >= sum) { maxLen = max(maxLen, right - left +
题意:给定 \(n=x+y+z\),求满足以下要求的长度为 \(n\) 的序列的数目:序列由 \(x\) 个 \(1\),\(y\) 个 \(-1\),\(z\) 个 \(0\) 组成,序列任意前缀和非负,和在 \([l,r]\) 之间。 考虑确定 \(z\) 和序列和的方案数。 看做卡特兰数类似折线图考虑。则在不能过线的前提下要到 \((x+1,y-x)\)。
求 \(n\) 个点的树上对于每个点距离小于 \(k\) 的点的数量(边权均为 \(1\) )。 \(n\leq 5\times 10^5,k\leq 10\) 。 设 \(f[u][i]\) 表示距离 \(u\) 点 \(i\) 距离以内并且在子树内的点,那么在 \(DFS\) 时可以用 \(O(nk)\) 的时间处理 \(f[u][i]=\sum f[v][i-1]\) ,其中 \(v\) 是 \(u