CSP苦难征途,数学
CSP考试备战
Vegdie
oier
展开
-
CSP-J复赛游记——2021-10-23
今天带着被吊打、有可能爆零的心态参加了复赛,感觉不错,从来我都是初赛水平较差的。到场先看了T1,模拟加优化,签到但花了半小时,还不知道对不对……看T2,没看懂题……想不出来(一小时)抛弃直接看T4,因为看着T3的题目很长,所以不敢看,发现有一定思路。试着做了做,用结构体存线段,把每块的左右端点记录下来,合并有点困难,然后就抛弃了。(半小时)2个半小时了!!慌了!!!于是看T3,耐心读题之后发现并不难,用一个数组判重,半个小时搞定,if写了一大堆,但是写完有一种很潇洒的感觉。心里有底了!!至少是个原创 2021-10-23 15:55:20 · 869 阅读 · 3 评论 -
抽屉原理……
第一抽屉原理原理1: 把多于n个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件。抽屉原理抽屉原理证明(反证法):如果每个抽屉至多只能放进一个物体,那么物体的总数至多是n×1,而不是题设的n+k(k≥1),故不可能。原理2:把多于mn(m乘n)+1(n不为0)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于(m+1)的物体。证明(反证法):若每个抽屉至多放进m个物体,那么n个抽屉至多放进mn个物体,与题设不符,故不可能。原理3:把无数还多件物体放入n个抽屉,则至少有一个抽屉里有无数个原创 2021-09-10 18:20:02 · 543 阅读 · 0 评论 -
划分数问题——盘子与小球——排列组合——递推式思维转化
0#引入考试时遇到同球同盘的问题,一开始想用插板法,终究失败,只拿了20分,回家问了老师,老师告了我方法并让我自己研究剩下三种。1#同球同盘——递推或递归(+记忆化改进优化)这个我有真题http://www.kencoding.net/problem.php?id=1369,大家可以去做一下我先把递推公式列在这里:(n是球数,m是盘子数){f(0,0)=1f(n,1)=1f(n,m)=f(n,n) if(n<m)f(n,m)=f(n−m,m)+f(n,m−原创 2021-08-02 09:08:14 · 2251 阅读 · 0 评论 -
2021年6月5日算法总结笔记
算法总结:1.枚举算法for + if 经常需要优化2.模拟算法不重复不遗漏的根据规则 高精度3.贪心算法九成以上先排序 结构体排序 排队接水 安排活动 陶陶摘苹果升级版4.二分算法(分治算法)非常非常非常非常重要 mid=(l+r)/2;最大值最小 砍树最小值最大递归和递推搜索:万能的 代码很长,有模板动态规划树 VS 图 ...原创 2021-06-05 19:31:57 · 1942 阅读 · 0 评论 -
概率与排列组合——2017NOIP-pj第19题——一家四口人,至少两个人生日属于同一月份的概率是
第 19 题一家四口人,至少两个人生日属于同一月份的概率是(C )(假定每个人生日属于每个月份的概率相同且不同人之间相互独立)。A. 1/12B. 1/144C. 41/96D. 3/4本题共 1.5 分解:只要去掉四个人都不在同一个月的概率即可,因为题目是至少1−P(412)124=1−12×11×10×912×12×12×12=1−5596=41961 -\frac{P{4\choose12}}{12^4} = 1-\frac{12\times11\times10\times9}{12\原创 2021-04-12 21:29:53 · 4708 阅读 · 0 评论 -
交叉相乘略
交叉相乘,是一种数学计算方法。例如:a/c=b/da/c=b/da/c=b/d交叉相乘后得:ad=bcad=bcad=bc 其实就是去分母,两端同时乘以cdcdcd。所以得出的ad=bcad=bcad=bc。相乘实质即运用乘法公式(x+a)(x+b)=x2+(a+b)x+ab(x+a)(x+b)=x^2+(a+b)x+ab(x+a)(x+b)=x2+(a+b)x+ab的逆运算。不等式亦如此计算方法a/c=b/d交叉相乘后得:ad=bc其实就是去分母,两端同时乘以cd所以得出的ad=bc...原创 2021-03-27 20:24:17 · 2131 阅读 · 0 评论 -
信息编码表示:ASCLL、汉字信息编码略
ASCLL全称:美国国家信息交换标准代码(American Standard Code for Information Interchange)。ASCLL码是一种7位二进制编码,能表示27=128种国际上最通用的西文字符,是目前计算机中,特别是微型计算机中,使用最普遍的字符编码集。字符分为:大小写字母、数字0~9(整数)、其他符号、控制符需要记住的一些值:'A' = 65'a' = 97' ' = 32(空格)'0' = 48口诀:大A加上空格等于小a。ASCLL码由基本和扩充的AS原创 2021-03-26 22:23:20 · 3917 阅读 · 0 评论 -
NOIP 2008 普及组初赛试题 解题报告、题解及选择题思路,高质量
选择题第 1 题微型计算机中,控制器的基本功能是( A)。A. 控制机器各个部件协调工作B. 实现算术运算和逻辑运算C. 获取外部信息D. 存放程序和数据注:控制器直接找“控制”第 2 题设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的是( B)。A. (A∧B)∨(C∧D∨ -A)B. ((A∧B)∨C)∧ -DC. (B∨C∨D)∧D∧AD. A∧(D∨ C)∧B注:∧为与,∨为或,补充一下¬是为逻辑非符号提供:¬ ¬ ∧ ∨第 3原创 2021-03-25 22:36:06 · 1557 阅读 · 0 评论 -
【模板】8大排序算法模板函数
排序(1):冒泡排序排序(2):直接插入排序排序(3):希尔排序排序(4):快速排序排序(5):简单选择排序排序(6):堆排序排序(7):归并排序排序(8):基数排序8中模板函数都在其中,只需要加入主程序调用即可#include <iostream>#include <vector> using namespace std; // 基础冒泡排序vector<int> bubbleSort_1(vector&..原创 2021-03-24 21:18:00 · 248 阅读 · 0 评论 -
C++算法竞赛中避免大量输入输出导致超时方法广要
因为C++的cin和cout每一次输入和输出都需要寻找一次变量的类型,所以会大大降低速度。解决方法有如下几种:(1)使用cstdio或stdio.h中的标准格式化输入输出scanf和printf,我们都知道在scanf和printf中,会有一片控制格式的区域,这样就避免了cin、cout的缺陷。(2)照常使用cin cout,在代码的开头加上一个ios::sync_with_stdio(0);//关闭同步流加快速度,c++党必学。就可以把寻找类型避免掉,达到scanf、printf的速度。例如原创 2021-03-20 23:37:45 · 1501 阅读 · 0 评论 -
PROBLEM#(1)五张卡片上分别写有0、1、2、3、5,每张…………
五张卡片上分别写有0、1、2、3、5,每张卡片各用一次可以组成一些五位数,其中5的倍数有( )个。A. 24B. 42C. 18D. 20正确答案:B这道题需要分类讨论(1)作为开头不能为0(2)作为5的倍数,结尾只能是0或5(1)0结尾:P(44)=24P(_4^4) = 24P(44)=24【乘法原理,排列公式】(2)5结尾:(首位不能为0)即3×P(33)=3×3×2×1=183\times {P(_3^3)} = 3 \times 3 \times 2\times 1原创 2021-03-20 21:35:09 · 843 阅读 · 0 评论 -
STL学习笔记之next_permutation函数
STL库中的next_permutation函数详解std::next_permutation C++官网讲解default (1)template <class BidirectionalIterator> bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);custom (2)template <class BidirectionalIterator,原创 2021-02-24 16:27:37 · 588 阅读 · 0 评论 -
C++优先队列priority_queue
优先队列名叫priority_queue既然是队列那么先要包含头文件#include , 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。它本质是一个堆实现的其方法有和队列基本操作相同:top 访问队头元素empty 队列是否为空size 返回队列内元素个数push 插入元素到队尾 (并排序)emplace 原地构造一个元素并插入队列pop 弹出队头元素swap 交换内容定义:priority_queue<Type, Cont原创 2021-02-22 21:30:24 · 1964 阅读 · 0 评论 -
G++报错出现 [errror]Id returned 1 exit status错误可能出现的原因
昨天调试C++程序时,出现了这个错误,但好在通过自己一段一段程序的调试,终于还是把错误给发现了。我写下来,希望别人遇到这样的错误时,能够及时发现。当出现如下错误时:d:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\MicreaVI\AppData\Local\Temp\ccXn3gWx.o:P1553.cpp:(.text+0x76): undefined reference to `decima原创 2021-02-13 14:12:01 · 2796 阅读 · 1 评论 -
OJ刷题Runtime Error(RE)RE报错原因及解决方案
数组开太小,不满足题目要求,建议给题目流出10个左右的空余,最好开在全局变量,能用最好用动态数组。数组开太大,抄出题目要求,这个没什么说的,一般不超过一个亿,有内存要求的题目最好紧凑一点,也是,最好用动态数组。出现了除以0的情况,这种情况不一定很明显,一定要细心检查,比如一个for循环i从0到10,每次用n除i就会出现一个n/0。在Dev中编译会出现[Warning]division by zero的警告,运行时程序会卡住,在OJ中,程序卡住没有返回值,程序一直等着,也就超时了——即RE算法不够优化.原创 2021-02-10 21:03:37 · 13403 阅读 · 3 评论 -
最小生成树(还没写完)
最小生成树目标:在网络(带权图)的多个生成树中(生成森林),寻找一个各边权值之和最小的生成树。首先明确:使用不同的遍历图的方法,可以得到不同的生成树(广度与深度);从不同的顶点出发,也可能得到不同的生成树。按照生成树的定义,n个顶点的连通网络的生成树肯定有n个顶点和仅仅n-1条边构造最小生成树的准则:必须只使用该网络中的边来构造最小生成树必须使用且仅使用n-1条边来联结网络中的n个顶点不能使用产生回路的边欲在n个城市间建立通信网,则n个城市应铺n-1条线路;但因为每条线路都会有对应原创 2021-02-05 21:50:25 · 357 阅读 · 0 评论 -
简化二叉树表示表达式用有向无环图表示
例如:((a + b) * (b * (c + d)) + (c + d) * e) * ((c + d) * e)发现有多个c+d的子树,为了简化,我们使用有向无环图原创 2021-02-03 10:12:04 · 786 阅读 · 0 评论 -
深入浅出线段树,Segment Tree学习笔记略
树什么是线段树性质及特点基本概念4倍维护函数构建用结构体建树查询更新删除以及插入这个操作是不行的,因为如果删除或插入一个元素,那么整个树的结构就会崩塌,下标就不对应了,如果重新更新那么需要耗费很多的时间,唯一可行的办法是提前预留空间,这里不演示插入。区间统一加值、改值并更新,懒操作(Lazy 操作)懒操作——统一加值对于线段树而言,对区间的值的修改,如果修改到叶子结点,其复杂度为O(n)线段树之所以能提升效率,是因为其在计算某个区间的特性时,大量使用了内部结点(记录了一原创 2021-02-02 17:50:12 · 2878 阅读 · 1 评论 -
素数筛法略
用筛法求素数的基本原理,是把从1开始的某一范围内的正整数从小到大顺序排列,逐步筛掉非素数留下素数。用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。如有:1 2 3 4 5 6 7 8 9 1011 12 13 14 15 16 17 18 19 2021 22 23 24 25 26 27 28 29 301不是素数,去掉。剩下的数中2最小,是素数,去掉2的倍数,余原创 2021-01-31 08:06:28 · 1886 阅读 · 0 评论 -
等差数列公式注
末项 = 首项+(项数-1)*公差(增量)由这个推导出首项 = 末项 - (项数-1)*公差(增量)公差 = (末项 - 首项)/ (项数 - 1)项数 = (末项 - 首) / 公差首项是a0,末项是a末,公差是δ,项数是S通项公式为∑=(a0+a末)×S2\sum = \frac{(a_0+a_末) \times S} {2}∑=2(a0+a末)×S...原创 2021-01-30 20:29:16 · 1906 阅读 · 0 评论 -
欧拉函数略
在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。φ(x)φ(x)φ(x),如果xxx是质数,那么φ(x)=x−1φ(x)=x-1φ(x)=x−1通式为可能看不懂,简单点就是例原创 2021-01-30 14:03:13 · 409 阅读 · 0 评论 -
φ字符—欧拉函数符号LaTeX表示
\phiϕ\phiϕ原创 2021-01-30 13:38:39 · 2741 阅读 · 0 评论 -
C++手动开启O2、O3优化略
#pragma GCC optimize(2)只需将这句话放到程序的开头即可打开O2优化开关。O2优化能使程序的编译效率大大提升从而减少程序的运行时间,达到优化的效果。C++程序中的O2开关如下所示:听说还有O3、O1优化,可不可以#pragma GCC optimize(3)?目前optimize(2)是确凿正确的...原创 2021-01-30 11:51:21 · 7867 阅读 · 0 评论 -
关于最大公约数gcd算法的扩展
更多数字的最大公约数可以逐步分解为更小的最大公约数gcd(a, b, c) = gcd(gcd(a, b), c);两个数的最小公倍数就是这两个数的乘积除以最小公倍数lcm(a, b) = (a * b) / gcd(a, b); //定义lcm()为最小公倍数函数...原创 2021-01-23 20:43:26 · 325 阅读 · 0 评论 -
最大公约数——欧几里得算法最简便
如果a%x=0,我们称x是a的约数(或因数),也称a是x的倍数a与b的最大公约数,是指一个最大的整数x,使得x同时是a和b的约数,我们将a与b的最大公约数记作gcd(a,b)求最大公约数的方法:欧几里得算法(辗转相除)循环版本:int gcd(int a, int b){ int tmp; while (b) { tmp = b; b = a%b; a = tmp; } return a;}递归一句话版本int gcd(int a, int b){ retur.原创 2021-01-23 20:38:22 · 197 阅读 · 0 评论 -
如何智能地在每个数组数字中间加一个「,」?
回答摘录,以下全部转自知乎如何智能地在每个数字中间加一个「,」?问题:头尾部都没有',',用c语言实现。我感觉用if感觉太复杂了,有没有更简单的?我现在还没有想到有效的方法。有可能我没有说清楚。。。例如:输入:a[6]={1,2,3,4,5,6}输出:1,2,3,4,5,6答主:Flint_Stone,我,最笨的方法,转换为字符串使用C还是C++,如果C++可以直接使用string#include <string>#include <原创 2021-01-02 22:32:32 · 558 阅读 · 0 评论 -
八位二进制表示的数小练习
下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。A、296B、133C、256D、199正确答案:D这考察二进制范围的理解,和细心。惯性思维知道八位二进制的数一共有28个,所以我们就取了256,选了C,打住,人家可是从零开始的呀,所以是0~255,最高是255,256表示不了!所以剩下的最大的是199,故选D...原创 2020-12-28 20:41:21 · 1451 阅读 · 0 评论 -
斐波那契数列实现方法递归解决、递归优化算法
首先基础的递归算法#include <stdio.h>#include <string.h>#include <windows.h>#include <iostream>DWORD time_start, time_end;int book[1001];int fac(int i){ if ((i == 1) || (i == 2)) return 1; if (i > 2) { retur原创 2020-12-06 17:03:01 · 679 阅读 · 1 评论 -
深搜的剪枝优化技巧
【概述】搜索算法的时间复杂度大多是指数级的,难以满足对程序运行时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法——剪枝。搜索的进程可以看做是从树根出发,遍历一颗倒置树(搜索树)的过程,所谓剪枝,就是通过某些判断,避免一些不必要的遍历过程,形象的说,就是减去搜索树中的某些枝条。显而易见,应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条舍弃哪些枝条保留,设计出好的剪枝判断方法,可以使得程序运行时间大大缩短,否则会适得其反。剪枝的原则:正确、准确、高效【优化技巧】原创 2020-11-28 21:04:02 · 468 阅读 · 1 评论 -
for循环基础练习学案:打印平行四边形
时间复杂度:1000ms空间复杂度:524288K题目链接题目描述现在需要打印一个 nn 行的由字母 A 组成的平行四边形,我们来跟他比赛一下谁写得又快又好吧!当 n = 5 时,这个平行四边形是这样的: AAAAA AAAAA AAAAA AAAAAAAAAA输入格式输入一行包含 11 个整数 n(1≤n≤100) 。输出格式输出 nn 行,为题目要求的平行四边形输出时每行末尾的多余空格,不影响答案正确性样例输入3样例输出 AAA AAAAAA原创 2020-11-15 12:34:14 · 4386 阅读 · 0 评论 -
error:control reaches end of non-void function [-Werror=return-type]
问题场景描述:leetcode刷题时遇到这类报错,代码没问题,可就是编译不通过,很是怀疑人生。问题解决:在函数的最后添加一条return语句,只要返回的数据类型对即可!记住,一定要返回,虽然永远也用不上。虽然有时我们在一块程序里已经有return,但不是在这块代码的结尾,leetCode也会编译不通过。所以我们也要在函数的代码块结尾也return一下。出现这种错误的时候,一般LeetCode...原创 2020-03-08 10:44:38 · 5902 阅读 · 1 评论 -
面试技巧-决定 Offer 有否
1. 首先,理清这些重要问题类型算法面试,作为技术面试中至关重要的环节,决定 Offer 有否。许多面试者并非能力问题,而是没有掌握好正确的技巧。知己知彼方能百战不殆,本章节将会带您深入了解那些典型的面试问题类型,以便您制定适合自己的学习方向。面试 和 算法题,作为在电话 / 现场面试中短短一个小时时间内,提供给面试者白板编程解决的算法题目,它与笔试上机、编程竞赛中的题目在难度与形式上还是有...转载 2020-03-01 11:59:42 · 254 阅读 · 0 评论 -
普及组noip2015年问题求解——重新排列1234和根节点数为2015的二叉树最多有__个叶子节点
1、重新排列1234使得每一个数字都在原来的位置上,一共有几种排法?正确答案:9种解析:考察数学基础之排列与组合1.用枚举法解决,可以排出2143,2341,2413,3142,3412,3421,4123,4312,4321共9种排法2.另外,也可以用乘法原理解题:先考虑第一位可以为2、3和4,有三种放法;再考虑数字1,有三种方法,当第一位和数字1放好以后,由于每一个数字都不在原来的位...原创 2020-02-15 17:44:30 · 3176 阅读 · 0 评论 -
BMI指数测量——c++ 1.0.0
BMI身体质量指数(BMI,Body Mass Index)是国际上常用的衡量人体肥胖程度和是否健康的重要标准,主要用于统计分析。肥胖程度的判断不能采用体重的绝对值,它天然与身高有关。因此,BMI 通过人体体重和身高两个数值获得相对客观的参数,并用这个参数所处范围衡量身体质量。计算公式体重指数BMI=体重/身高的平方(国际单位kg/㎡)理想BMI(18.5~23.9) = 体重(单位Kg)...原创 2020-02-11 13:40:04 · 2614 阅读 · 0 评论