自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陈颜的博客

公众号『陈颜Blog』

  • 博客(16)
  • 收藏
  • 关注

原创 牛客计算系数(Lucas+二项式定理)

题目链接隐隐约约记得展开式和组合数的关系,但是记不起来,百度了才知道二项式定理。(x+y)n=C(n,0)×xn×y0+C(n,1)×xn−1×y1+C(n,2)×xn−2×y2......+C(n,n)×x0×yn(x+y)^n=C(n,0)\times x^n \times y^0+C(n,1)\times x^{n-1} \times y^1+C(n,2)\times x^{n-2} \times y^2......+C(n,n)\times x^0 \times y^n(x+y)n=C(n,0)

2020-06-30 22:26:25 4337

原创 6.28随笔(C++类的多态性和虚函数)

C++中类的多态性通过虚函数来实现虚函数与纯虚函数虚函数定义方法:在基类的函数前面加上virtual关键字定义某个函数为虚函数是为了能够使用基类指针来调用派生类函数#include <iostream>using namespace std;class A{public: void print1() { cout << 1 << endl; } virtual void print2() {

2020-06-28 09:28:52 4559

原创 Lacus定理—-求较大组合数

之前介绍的费马小定理,用来处理C(n,m)C(n,m)C(n,m)组合数取模ppp,要求ppp为质数,n,mn,mn,m小于1e51e51e5(应该是受阶乘数组限制,1e61e61e6差不多也行)当n、mn、mn、m达到1e8、1e10甚至更大的时候怎么办呢?这时候就需要Lacus定理。Lacus定理重点:可以解决n、mn、mn、m比较大,ppp为质数且较小的组合数问题(我看这个博客讲的比较简单,一眼就能懂)性质:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]…a[0],B

2020-06-27 00:07:14 4768

原创 逆元

常用的求逆元的方法有扩展欧几里得和费马小定理, 因为扩展欧几里得我还不会, 这里介绍一下费马小定理。 逆元的定义有正整数aaa和质数ppp,满足ax%p=1ax\%p=1ax%p=1的最小正整数xxx就称为是aaa的逆元逆元的作用为什么要用到逆元呢?在加、减、乘法中,都有如下等式:(a+b)%p=(a%p+b%p)%p(a+b)\%p=(a\%p+b\%p)\%p(a+b)%p=(a%p+b%p)%p(a−b)%p=(a%p−b%p)%p(a-b)\%p=(a\%p-b\%p)\%p(a−b)

2020-06-26 13:41:01 4480

原创 牛客组合数问题

题目链接这个题略毒瘤,很简单的组合数(帕斯卡公式)+毒瘤前缀和众所周知,使用帕斯卡公式可以预处理出组合数,而且是类似杨辉三角。这题中的前缀和是二维前缀和,求8 3时,答案是红色区域而不是整块减去绿色区域。主要还是审题不够仔细吧。另外处理这种三角前缀和时,需要特判边界的情况。AC代码:/* * @Author: hesorchen * @Date: 2020-04-14 10:33:26 * @LastEditTime: 2020-06-25 21:31:07 * @Link: http

2020-06-25 21:47:43 5363

原创 洛谷P1825

题目链接一个BFS,虽然洛谷难度标签是提高,但是感觉还行。很熟悉的传送门,比较特殊的地方是需要剪枝(可能是因为我题目刷少了,还没遇到过BFS剪枝AC代码:/* * @Author: hesorchen * @Date: 2020-04-14 10:33:26 * @LastEditTime: 2020-06-24 23:36:50 * @Link: https://hesorchen.github.io/ */#include <map>#include <set&g

2020-06-24 23:47:34 5067

原创 洛谷P1032

题目链接一个比较简单的DFS题,数据范围很小,直接暴力即可。DFS问题关键的一点是剪枝,写搜索问题的时候应该自然而然地想到剪枝,并且尽可能的降低时间复杂度几个比较常见的剪枝技巧:1.已经超过之前的最优解,可以直接return2.已经出现过之前的情况,可以直接returnAC代码:/* * @Author: hesorchen * @Date: 2020-04-14 10:33:26 * @LastEditTime: 2020-06-20 21:24:46 * @Link: https:

2020-06-24 22:57:49 5279

原创 分组背包

昨天牛客遇到一个多重背包问题,没想到二进制优化。于是补了一下题,发现了很多漏洞 当你在家里发现一只蟑螂的时候,其实已经有一万只蟑螂了 (蟑螂=漏铜分组背包,在01背包的基础上加上了组别限制,同属于一组的物品只能选一次。例题:洛谷 P1757分组背包是01背包的变形,如何确保同组的物品只选一次呢?只需将遍历同组物品的循环放在遍历背包容量的循环之下,这样,当背包容量为i时,只由j组中的某个物品k更新得到最大值细节看代码以及注释:/* * @Author: hesorchen * @Date: 20

2020-06-21 12:20:08 5206

原创 6.13随笔(牛客练习赛C二维动点)

好好打比赛每场都或多或少有些收获,昨天被牛客的C卡死,细节满满,今天早上又写了很久,收获还是蛮大的辗转相除法求最大公约数原理什么的就不说了,我之前的写法都是ll gcd(ll x, ll y){ return (x % y == 0) ? y : gcd(y, x % y);}写法1这种写法挺常见的,不过有一个弊端,就是如果y为0的时候会出现%0的RE稍微改一下:ll gcd(ll x, ll y){ return (y == 0) ? x : (gcd(y, x %

2020-06-13 13:20:41 5206

原创 6.10随笔(关于C语言float和double类型的精度问题)

先看下面的代码以及输出:int main(){ double a = 80.845; float b = 80.845; printf("%.2lf %.2f\n", a, b); double c = 2.005; float d = 2.005; printf("%.2lf %.2f\n", c, d); double e = 2.05; float f = 2.05; printf("%.1lf %.1f\n", e, f

2020-06-10 22:12:12 6940

原创 跳石头———经典二分

传送门可能是今天状态不好,一个很简单的二分,挺早之前就ac过了,但是今天牛客遇到了,发现写不出来,说明当时还没搞懂。题意不说了,这里就说一下几个点:1.在什么情况下才可以搬掉石头?应该是石头2到石头1的距离小于二分出的答案mid的时候。为什么呢?因为mid是二分出来的答案,也就是最短跳跃距离的最大值,既然他是最短跳跃距离的最大值,那么必然不能存在两个石头的距离小于mid,否则与mid矛盾。2.ans的更新二分算法的几个点,其中一个就是ans的更新,这题ans的更新条件就是搬掉的石头 要小于等于

2020-06-09 21:33:45 5520

原创 python字典dict

字典是另一种可变容器模型,且可存储任意类型对象。文章目录通过键访问值修改字典删除与清空内置函数与方法字典的每个键值(key->value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:a = {key1 : value1, key2 : value2 }示例1通过键访问值a = {'hesor': 10, 20: 'chen'}print(a['hesor'], a[20])'''Output:10 chen'''示例.

2020-06-08 22:21:16 5255

原创 python函数

函数定义与调用定义:函数代码块以def关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。函数内容以冒号起始,并且缩进。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。def say(name, word): 'My first function' print(name, ':', word)

2020-06-07 21:24:35 5353

原创 6.3随笔(类中的友元以及静态)

今天摸鱼时间不算长,期末了,作业什么的比较多C++友元函数以及友元类友元函数先直接给出性质:类的友元函数定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。如果要声明函数为一个类的友元函数,需要在类定义中该函数原型前使用关键字 friend。下面是一个简单的例子:#include <iostream>using namespace std;class person

2020-06-03 23:02:11 5166

原创 51nod2657二进制数字

2657 二进制数字题目大意:长度为nnn的010101串,问总共有多少串满足不含三个连续的000或111,n<=1e5n<=1e5n<=1e5,输出答案取余1e9+71e9+71e9+7方法一:找规律,可以发现a[i]=a[i−1]+a[i−2]a[i]=a[i-1]+a[i-2]a[i]=a[i−1]+a[i−2]方法二:由于每个位置的01状态只由前面两个位置的01状态推导,方案数也是由前两个位置的01状态转移,所以可以用DP解决ll dp[100010][2][2];/*

2020-06-03 11:05:47 5520 2

原创 6.2随笔

今天打牛客,用python写了一题,结果发现用空格隔开的两个数不知道怎么输入代码:n, m = map(int, input().split())如果输入格式如下:31 2 3代码:n = int(input())a = []a = list(map(int, input().split()))如果输入格式如下:3123代码:n = int(input())a = []for i in range(n): a.append(int(input()))p

2020-06-02 21:55:12 5196

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除