- 博客(161)
- 收藏
- 关注
原创 数论算法入门
0,若有整数解x=x0,y=y0,则所有整数解为x=x0-b1t,y=y0+a1t,a1=a/gcd(a,b),b1=b/gcd(a,b)若a和b对m同余,且a和b有一公因数d,gcd(m,d)=1,a1=a/d,b1=b/d则a1和b1对m同余。设a,b是两个不全为0的整数,存在整数x,y,使ax+by=gcd(a,b);辗转相除法:gcd(a,b)=gcd(b,a mod b);若a和b对m同余,则gcd(a,m)=gcd(b,m),更相减损术:gcd(a,b)=gcd(b,a-b);
2025-06-02 16:37:43
243
原创 BFS入门刷题
用void类型,不用返回,从开始搜到结尾,然后每个点都会一层一层地搜到,最后dis数组里存的就是每个点的计数。调用STL中的queue调用坐标需要花费比较长的时间,我们可以用数组来模拟queue节省时间。作者一开始想的是每个点都要计数,所以每个点都要搜一次,然后返回一个值。
2025-06-01 22:36:16
399
原创 每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
【代码】每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
2025-05-27 08:53:19
715
原创 每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
【代码】每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
2025-05-12 18:18:52
379
原创 每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
【代码】每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
2025-05-11 23:54:22
651
原创 数据结构:树(树的定义和基本术语)
在非空树中根节点没有前驱,叶子结点(终端结点)没有后继,分支结点(非终端结点)前驱和后继都有,前驱有且仅有一个。无序树:逻辑上看,树中结点的各子树从左至右是无次序的,可以互换(例如我国行政规划关系)祖先结点/子孙结点/双亲结点(父节点)/孩子结点/兄弟结点:参照现实中的家庭关系。有序树:逻辑上看,树中结点的各子树从左至右是有次序的,不能互换(例如家庭关系)森林是m(m>=0)棵互不相交的树的集合,m=0时为空森林。子树可以看作是一个新的树,而新的树又可以分为多个子树。空树:节点数为0的树。
2025-05-10 21:18:49
578
原创 每日一题洛谷T534125 合数c++
特判1时,还要特判11和111,其他数字,k是奇数时是质数,k是偶数时是合数。字符串输入,看所有位数加起来的数是不是3的倍数。是,直接输出,不是,删除1或2。直接检测末尾数字可以特判2。特判全是1和全是2的情况。
2025-05-10 19:26:20
304
原创 每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++
【代码】每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++
2025-05-07 23:11:36
402
原创 每日一题公平!公平!还踏马是公平!c++
给出一串数字,比较快的方法是把除了最大值之外的其他值共n-1个全部加1,一直重复上述操作知道数字相等。当然,我说的是特例,也可以往最大值上加1,随便怎么加,只要保证最后的数字相等,中间的过程有无数种方法。最好的理解方式就是列举出几个例子自己验证一下。
2025-05-03 23:52:54
129
原创 每日一题洛谷P8635 [蓝桥杯 2016 省 AB] 四平方和c++
当然,还可以再优化,只需要3层for,最后一个数字用n去减前面的数字,开根,判断是不是整数。直接暴力枚举,不做任何优化的话最后会TLE一个,稍微优化一下就过了(优化:每层循环用if判断一下,如果大于n就直接跳。
2025-05-02 19:37:21
587
原创 每日一题洛谷P1014 [NOIP 1999 普及组] Cantor 表c++
【代码】每日一题洛谷P1014 [NOIP 1999 普及组] Cantor 表c++
2025-04-16 16:42:26
226
原创 蓝桥杯c++每日刷题(洛谷)
不过有个让我很疑惑的地方,a中居然有数字1(一开始设置检测2到9只能AC一个)?题目中说了连续的才能改,如果只有1个字母的话也算不上连续吧?设输入的是a,输出的是b,遍历a,如果a中该项是字母则存到b中,如果是数字(假设是p),则用while循环让b的前一项重复p遍。注意点是int p = a[i] - '0'-1;目前做过的最水的题,注意开long long。先把日期一个个列出来,然后逐一判断。
2025-04-09 23:05:11
482
原创 蓝桥杯每日刷题c++
可以设两个数组a和b,a中的数除以区间内的数永远等于b中的数,现在要找的就是这个区间。a[i]/区间=b[i]可以转化为a[i]/b[i]=区间先找区间内最大的数,该数如果要满足条件,那么该数就是a[i]/b[i]每一项中最小的数,遍历一遍即可找到再找区间内最小的数,只要最大的数依次向下减一逐个验证即可。
2025-04-08 00:07:52
1735
4
原创 c++STL入门
stl中的东西可以重复利用,stl是为了建立数据结构与算法的一套标准stl分为容器,算法,迭代器stl六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器public:int m_Age;//放入数据//遍历it!= a.end();it++) {cout << "姓名:" << (*it).m_Name << " " << (*it).m_Age << endl;return 0;
2025-04-06 19:44:03
482
原创 每日一题洛谷P8649 [蓝桥杯 2017 省 B] k 倍区间c++
【代码】每日一题洛谷P8649 [蓝桥杯 2017 省 B] k 倍区间c++
2025-04-04 22:50:51
231
原创 每日一题洛谷P8664 [蓝桥杯 2018 省 A] 付账问题c++
将钱排序,遍历一遍,同时将小于平均数的钱加起来计算(平均数是动态,因为后面的钱总比前面的多,总能给前面补钱,这里的误区是直接把平均数设置为总钱数/人数,这样的结果比答案上的方差大),大于等于平均数的钱直接乘上剩下的人数进行计算并跳出循环。思路:要使方差小,那么钱不能一下付的太多,可以让钱少的全付玩,剩下还需要的钱再让钱多的付(把钱少的补上)。
2025-04-03 21:19:24
541
原创 二分查找与二分答案入门c++
比原来的二分多一步,即寻找第一次出现的位置,所以while循环中相等的情况需要额外判断是不是第一次。其实如果没有那两个return 0的语句会RE两个,作者也不知道怎么回事。给学校排序,根据学生的分数找学校(二分),直到找到小于等于学生分数的学校。a-b=c转化为a=b+c,找到所有的a使b+c=a。找a的时候用二分,可以拿92分(样例3TLE力)介绍两个非常好用的函数,方法和上面一样,详见注释。原来是要开long long。对切出来的最大值进行二分。欧耶,过了过了过了!
2025-04-02 17:44:22
1038
原创 链表(单链表、双链表、循环链表、静态链表)入门
顺序表中每个结点只存放数据元素,而单链表中每个节点除了要存放数据元素之外,还要存储指向下一个结点的指针。单链表与顺序表相比,优点是不要求大片的连续空间,改变容量方便,缺点是不可随机存取,要耗费一定空间存放指针。两种方法一样typedef struct LNode {//定义单链表结点类型//每个节点存放一个数据元素//指针指向下一个节点要表示一个单链表时,只需要声明一个头指针L,指向单链表的第一个结点用数组代替指针描述单链表,这种链表叫静态链表。
2025-04-01 13:08:00
378
原创 每日一题洛谷P8716 [蓝桥杯 2020 省 AB2] 回文日期c++
讲一下作者采用的方法。八位数,如果要是回文数,至少应该是ABCDDBCA,A有9种,B、C、D有10种,所以最多只要枚举9*10*10*10个数字就能出答案。方法有挺多的,比如说先枚举日期再判断是不是回文数,或者先枚举回文数再判断日期是否合法等等。
2025-03-31 22:09:57
422
原创 每日一题洛谷P8749 [蓝桥杯 2021 省 B] 杨辉三角形c++
【代码】每日一题洛谷P8749 [蓝桥杯 2021 省 B] 杨辉三角形c++
2025-03-31 12:52:37
317
原创 线性表入门
线性表的定义:如果有如下几个元素:a1,a2,a3......an,数据类型相同,可以构成一个有限序列,那就可以称为线性表。a2在a3的前面,可以说a2是a3的直接前驱元素,a3在a2的后面,可以说a3是a2的直接后继元素。a1只有一个直接后继,an只有一个直接前驱,其他元素只有一个直接前驱和直接后继。上述线性表元素有n个,n叫做线性表的长度,n=0时线性表称为空表。ai时线性表中第i个数据元素,i称为ai在线性表中的位序,i是从1开始的。举几个生活中的例子:星座是线性表。
2025-03-30 23:17:16
377
原创 每日一题洛谷P10901 [蓝桥杯 2024 省 C] 封闭图形个数c++
排序思想,只不过这时的排序与之前的略有不同,com函数中要先比较封闭图形再比较真实的大小,多了一步,但是原理还是一样的。
2025-03-30 15:49:38
233
原创 Codeforces Round 1014 (Div. 2)2092A - Kamilka and the Sheep c++
对于两个数ai和aj,加上d后是ai+d和aj+d,求gcd,可以根据gcd的性质做出转化(辗转相除法)当aj+d是ai-aj的倍数时,gcd可以最大化,此时gcd=ai-aj。可以概括为:如何选出两个数,加上d,使它们的gcd最大?所以我们只要找到max和min然后相减就行。不过该题可以做一些数学上的转化。如果直接暴力求解会超出时间限制。下面是A题的题目以及题解。作者昨天第一次打cf,
2025-03-30 12:04:06
503
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人