
数学
会飞的蟋蟀
学习中!!
展开
-
luogu P1582 倒水
题解 一开始很容联想到二叉树的结构,初始的杯子数就是子节点,两个相邻子变父,这样不断往上走。 当然其实和树没有什么关系只是可以形象化理解。 容易知道任何 2^k个水杯都可以最后合成 1 个,那么我们只要不断地对现有的杯子求 <= 当前杯子数的 2^k,然后n减去2^k,这表示这么多的杯子可以合成一个,所以再 k–,如此往复直到 k==1,这时所剩 的杯子数目 n 就必须想能办法合成...原创 2018-08-29 11:55:57 · 137 阅读 · 0 评论 -
luogu P2158 [SDOI2008]仪仗队 【模版】
题解 数论类型的题目,一头雾水。第一次见到欧拉函数,这里记录一下。 Code 筛法 /* 特性 : 1.若a为质数,phi[a]=a-1; 2.若a为质数,b mod a=0,phi[a*b]=phi[b]*a 3.若a,b互质,phi[a*b]=phi[a]*phi[b](当a为质数时,if b mod a!=0 ,phi[a*b]=phi[a]*phi[b]) */ int m[n...原创 2018-09-06 10:55:31 · 249 阅读 · 0 评论 -
luogu P1338 末日的传说
题解 本质就是算逆序对数。 n个降序排列的数能提供 (n-1)*n/2 个逆序对,这是n个数能创造出的最多逆序对数。 那如何排列出任意m个逆序对呢? 显然第一步是找出能覆盖 m 的最小 n 来,即 (n-1)*n/2 >= m。 n 能覆盖,那么 n-1 就不能覆盖 m,而 m 与 n-1 的覆盖 之间的差值 dis = m-(n-1)*(n-2)/2,如何填补? 这个差值 d...原创 2018-09-06 11:35:54 · 167 阅读 · 0 评论 -
USACO 2.4.5 分数化小数 Fractions to Decimals
题解 想出来的解法比较暴力。 前提知识:能够用整数表示出的小数都是有理数,所以不会存在无限不循环小数(无理数)。 判断是否无限循环,遍历小数点后100-200位若全是0那肯定不是无限小数 ( 确实存在后面这么多0的无限小数,但不在题目数据范围内 ),否则肯定无限。 若无限循环就要找环,环长怎么样?从头到尾数相同,暴力遍历即可。 最后注意 N 要开大点。 Code // head ...原创 2018-09-07 15:24:35 · 471 阅读 · 0 评论 -
LeetCode 279. Perfect Squares
题解 很多解法,包括不限于dfs,dp,甚至数学解法(最快)。 给出dp解法 dp [ i ] : 代表对 i 拥有的最少平方和数量。 易得 dp[ i ] = min{ dp[ i - k*k ] | k= 1,2,3… && k*k <= i } Code class Solution { public: int dp[10000]={0}; i...原创 2018-10-01 13:51:31 · 114 阅读 · 0 评论 -
LeetCode 78. Subsets && 90. Subsets II
题解 也是两题一起写。第二问的差别在于是否有重复数字。 这种求组合的,思路大体有三种:dfs,迭代,位操作。 dfs不说了很熟悉,我用位操作搞定了第一问,这里关注一下迭代。 我叙述一下迭代的过程,例如对{1,2,3},先预设返回值res为{{}}。 遍历原数组,对每个数字,依次取得现有返回值res内所有组,加上此数字, 再加回res。 第一次: {{},{1}} 第二次: {{},{1},{2},...原创 2018-10-09 11:36:40 · 171 阅读 · 0 评论 -
LeetCode 164. Maximum Gap
题解 求连续极大差,要求O(n)。 利用鸽笼原理。 先给出一个前置条件,即最大差不小于(max-min)/(n-1),为什么? 想象一个阶梯,阶梯间的最大高度差和平均高度差的关系。 有了这个差值,我们可以把原数组依据其所在区间分为n-1个桶。 显然落于同一个桶内的数我们不关心,我们只关心相邻桶间的数。 n个数,除了最大最小之外,还有n-2个数,入n-1个桶,至少有一个桶没有数。 答案就是跨越这个空...原创 2018-10-25 11:07:59 · 142 阅读 · 0 评论 -
LeetCode 470. Implement Rand10() Using Rand7()
题解 这题关键在于创造的随机数分布要均衡。 先看这个比较trick的解法。 int rand10() { int i,j; while( (i=rand7())<6 );// 让i分布于 6 or 7 则P(i=6 or 7)=0.5 while( (j=rand7())>5 );// 让 j 分布于 1-5 则P(j=1:5) = 0....原创 2018-10-29 11:23:56 · 226 阅读 · 0 评论 -
LeetCode 319. Bulb Switcher
题解 自然地会想到模拟开关的方法,开一个数组记录开关情况,最后奇数者亮。 例如 int bulbSwitch(int n) { vector<int> cot(n+1,1); int res=0; if(n==1) return 1; for(int pos=1;pos<=n;pos++){ ...原创 2018-10-24 15:08:11 · 146 阅读 · 0 评论