自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Misunderstood … Missing(DP)

https://vjudge.net/contest/454412#problem/I 有攻击力A,和攻击增量D,每轮A会增加D,问最多能造成多少伤害。 有n个回合,每轮能进行3种操作: 1.造成(A+ai)的伤害1.造成(A+a_i)的伤害1.造成(A+ai​)的伤害 2.D增加bi2.D增加b_i2.D增加bi​ 3.A增加ci3.A增加c_i3.A增加ci​ 首先看到这该死的后效性就知道贪心不太行, 而且正向dp也不行,得逆向dp,并且因为第n轮一定是进行攻击操作,初始化也解决了,现在的问题就是状态

2021-08-19 15:28:21 313

原创 P1407 稳定婚姻(Tarjan)

https://www.luogu.com.cn/problem/P1407 这里最主要是建边有难点,其他就是一个Tarjan板子,刚开始我想的是夫妻之间建男⟶\longrightarrow⟶女的单边,前情侣之间建双向边,然后就一直wawawa,然后反过来就行了, 夫妻之间建双向边,此时就是一个强连通分量,可以缩成一个点,然后前情侣之间建单边,如果构成强连通,就说明Unsafe,否则Safe. #include <iostream> #include <cstring> #incl

2021-08-18 20:10:13 134

原创 Gym-101775B-Scapegoat

Scapegoat 有n个问题,第i个问题复杂度是aia_iai​,m个Inkling,每个Inkling只能承担一个问题,但一个问题可以让多个Inkling承担,问Inkling承担问题复杂度的方差最小是多少。 我们可以先让每个问题都有一个Inkling承担,然后来分配剩下的m-n个Inkling,很容易想到用优先队列来维护最大值,麻烦的是维护什么的最大值,也就是排序函数怎么写。 因为方差公式S2=∑i=1n(Xi−X‾)2=∑i=1n(aik−X‾)2∗kS^2=\sum_{i=1}^{n}{(X_i

2021-08-17 19:32:14 137

原创 欧拉(数论)

题目 题目叫欧拉,结果主要是莫比乌斯。 设g(n)=nk,F(n)=∑d∣ng(d)μ(nd)。g,μ都是积性函数,所以F也是积性函数.将n分解,n=p1s1p2s2...pmsm,F(n)=F(p1s1).F(p2s2).....F(pmsm),对F(Pisi),因为μ(1)=1,μ(p)=−1,μ(pk)=0(p为质数),所以只有d=psi和d=psi−1时才需要计算,其余值都为0,所以F(pisi)=pisik−pi(si−1)k,这样就只用分解质因数然后求积就能得出答案了设g(n)=n^k,F(n

2021-07-30 20:36:22 116

原创 集合中的质数(容斥原理)

集合中的质数 就是求∣A1∪A2∪A3...∪An∣,其中Ai表示ai的倍数的个数。|A_1 \cup A_2 \cup A_3...\cup A_n|,其中A_i表示a_i的倍数的个数。∣A1​∪A2​∪A3​...∪An​∣,其中Ai​表示ai​的倍数的个数。 如图∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣,这是最基础的容斥,可以推广到n个集合的容斥:如图|A \cup B \cup C|=|A|+|B|+|C|-|A \cap B|-|A \cap

2021-07-30 14:47:16 381

原创 求图上每个点能到达的点的个数

Real Magic 给一个无向图,问每个点能到达的点的数量。 直接并查集维护连通块点数。 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <set> #include <stack&g

2021-07-28 15:23:20 896

原创 Cube(数学)

Cube 给出八个点问是不是立方体。 如果我们给每对点之间都连线的话,会有12条相等的最小边(棱长),12条相等的次小边(面对角线),到这里就可以了,体对角线不用管。首先,对于一个四边形,如果每条边都相等,那么它是菱形,如果对角线相等,那么是矩形,即正方形,所以只要满足有这样两组边就行,特判一下等于0就行了。 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #i

2021-07-27 20:48:01 261

原创 Grammy and Jewelry(最短路+完全背包)

Grammy and Jewelry 已经菜到连完全背包都没看出来了,都已经想到最短路求出费用,然后开始硬贪心。最开始则是想到要DP但是没想到用最短路,还想直接在图上DP,然后就跳题了。 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstd

2021-07-27 20:40:53 407

原创 Fair Distribution(整除分块)

Fair Distribution 有n个机器人,m个能量条,能够进行两种操作,n–或m++,每次操作花费1美元,求使得m%n=0的最小花费 设n减少了x,则花费为∑n−(n−x)+(m−1n−x+1)∗(n−x)−m=∑n−m+(m−1n−x)∗(n−x),∑(m−1n−x)可以用整除分块O(n)来求得。对于[ni]设n减少了x,则花费为\sum n-(n-x)+( \frac{m-1}{n-x}+1)*(n-x)-m=\sum n-m+(\frac{m-1}{n-x})*(n-x),\sum(\frac

2021-07-27 20:32:52 985

原创 Hotel(线段树区间合并)

题目 有n个房间,m次操作,操作 1 x表示有x个人要入住,并且房间要挨着,就是要找到连续的x个房间,输出左端点值,操作 2 x ,y表示x~x+y-1的房间清空了。 又是日常不会然后去百度,线段树花样也太多了吧。 维护三个值sum,lmax,rmax,分别表示区间最大连续,从左端点开始的最大连续,和从右端点开始的最大连续。 tree[node].sum显然是Max(tree[node<<1].sum,tree[node<<1∣1].sum,tree[node<<1].r

2021-07-24 11:06:46 137

原创 逆序对(权值线段树)

题目 逆序对可以用归并和树状数组求,应该比线段树快,这里只是为了学习下权值线段树。 权值线段树就是维护每个数出现的次数,可以用来求数组的第K大元素。 而求逆序对个数,就是求每个数前面有多少大于自己的数,所以可以用权值线段树来写, 比如查询一个数a, a<=mid,说明a在左子树中,所以所有柚子树的元素都比a大,答案就为左子树中大于a的数加上柚子树的数的个数。 否则a在柚子树中(什么傻逼输入法啊),答案为柚子树大于a的个数。 代码 #include<bits/stdc++.h> #defi

2021-07-23 22:28:12 245

原创 Tunnel Warfare(线段树)

有三种操作,D是删点,Q是询问点x还和几个点连着,R是恢复最近一次被摧毁的点。对点x,连接着的点的个数显然是右边最近的一个被摧毁的点的坐标减去左边最近的一个点的坐标再减1,即右区间最小值-左区间最大值-1。因为有更新和查询操作,所以可以想到用线段树。 初始化每个点的最大值为0,最小值为n+1,点被删时,最大值最小值等于自己的坐标。 代码 这里要吐槽一下.

2021-07-23 15:26:09 327

原创 通信线路(分层图)

最近写图论的时候看到的新玩意,之前好像还写了个分图层DP。从巨佬的博客上学了一下。还没有看完,到时候有时间慢慢看,先%%%再说。 巨佬博客(传送) 输入样例: 5 7 1 1 2 5 3 1 4 2 4 8 3 2 3 5 2 9 3 4 7 4 5 6 输出样例: 4 题目 全是瞎扯,建议直接跳过 就大概是按照dp的思路建图,进行K个步骤的话就建K层互相联系的相同的图,比如第一层也就是原图是数字1-4,那么第二层就是数字1’-4’.连起来就是这样。(灵魂画手) 建立k层图.第k层和第k+1层图

2021-07-22 21:12:36 287

原创 August Gym - 102803A(数学)

August 刚开始看到后面两个函数直接被吓到了,后来想了想把x,y换一下就好了,这样y=abπ(arccos(x+aa)−π)就能转换成x=a[cos(π2b+π)−1],这样就可以很容易的求积分了,积出来等于2ab,所以最后答案就是πa2+4aby=\frac{ab}{\pi}(arccos(\frac{x+a}{a})-\pi)就能转换成x=a[cos(\frac{\pi}{2b}+\pi)-1],这样就可以很容易的求积分了,积出来等于2ab,所以最后答案就是\pi a^2+4aby=πab​(ar

2021-07-21 20:45:30 83

原创 Desert King POJ - 2728(01分数规划)

Desert King 大意为给出n个点和它的海拔,每条路的费用为两点的相对高度,求总费用比总路程的最小值。刚开始看到这题,上去就是贪心,然后就wa了,然后想了想发现确实不太能贪心,随便举个反例 50100,35,110,显然50100比35小,但是50+1100+10≈0.4636,而3+15+10≈0.2666\frac{50}{100},\frac{3}{5},\frac{1}{10},显然\frac{50}{100}比\frac{3}{5}小,但是\frac{50+1}{100+10}\appro

2021-07-21 16:46:05 103

原创 Slim Span POJ - 3522(最小生成树)

题目 要让生成树的最大边减最小边的值最小,直接枚举每条边为最小值时的差值,取最小差值。 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <queue> #include <sstrea

2021-07-21 11:42:21 73

原创 Gym - 103145K(并查集)

题目 给出一个图,然后每次询问给出敌人攻击值,低于攻击值的边都会被删去,每次询问独立,回答攻击过后还有多少对点连通。 看到连通首先想到并查集,但是问的不是连通块数,是连通块中点的对数,显然如果一个连通块有n个点,那么就有Cn2对点,Gn2=(n−1)n/2,所以只要稍微改动一下并查集代码,知道每个连通块点数,就能得到答案。C_n^2对点,G_n^2=(n-1)n/2,所以只要稍微改动一下并查集代码,知道每个连通块点数,就能得到答案。Cn2​对点,Gn2​=(n−1)n/2,所以只要稍微改动一下并查集代码,

2021-07-21 10:15:29 275

原创 P3758 [TJOI2017]可乐

用DP加O2优化卡过去的,过程十分痛苦,主要是内存爆炸(刚开始还想开三维DP )。 貌似正解不是DP,等我先学学再补上。 先上DP代码。 刚开始想的是dp[t][pos[[0/1/2]分别表示爆炸,不动,移动,然后写了很久样例都过不了,然后想到原地不动可以当成移动到自己(被题目骗了) 没有任何一条道路连接相同的城市,嗯,刚开始看到原地就想连接自己,看到这句话就渐渐想着不连接自己。 然后爆炸可以新建一个点0,所有点都可以到达0,但0只能到达自己,其实也可以让0不能到任何一点,但后面就需要循环t次,可能会.

2021-07-20 23:07:59 116

原创 Mondriaan‘s Dream(状压DP)

题目链接 思路 有一种1x2的砖块,问有多少种填满的方案。 砖块只能横着放或竖着放,设横着放为1 1,竖着为10_1^010​, 显然上下不能有同位的0,并且每一行的连续1的个数减去上一行对应位置的0的个数后不能为奇数, 满足条件的就dp[i][j]+=dp[i−1][k]dp[i][j]+=dp[i-1][k]dp[i][j]+=dp[i−1][k].最后一行一定是填满的,所以答案是dp[h][(1<<w)−1].dp[h][(1<<w)-1].dp[h][(1<<

2021-07-20 10:53:29 118

原创 Physical Education Lessons-动态开点线段树

看到数据范围头就痛起来了,还抱着是不是打印错误的想法上去交了一发结果re,然后在本地捣鼓,开了个巨大的数组,直接给我clion卡退了,内存瞬间爆满。然后乖乖百度,发现了一个叫动态开点线段树的线段树,折腾了一会,看懂了但没有完全看懂(下次一定去认真学学 )。就大概是要用到的节点才会开这个点,其他的不管,据说空间复杂度O(nlogn)O(nlogn)O(nlogn). 代码 #include <iostream> #include <cstring> #include <cmat.

2021-07-19 22:15:48 349 5

原创 7.17训练

A - Time Limit 题目 这题巨水 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <queue> #include <sstream> #include <st

2021-07-19 09:36:40 384

原创 牛客小白月赛36

C-杨辉三角 题目 杨辉三角第n行第i个元素为Cn−1i−1,由二项式定理有(1+x)n=∑Cni∗xi,对两边求导,n(1+x)n−1=∑i∗Cni∗xi−1,继续求导,n(n−1)(1+x)n−2=∑(i2−i)∗Cni∗xi−2,令x=1,n(n−1)∗2n−2=∑i2Cni−∑iCni,易证∑Cni=n(n−1)∗2n−3C_{n-1}^{i-1},由二项式定理有(1+x)^n=\sum{C_{n}^{i}*x^i},对两边求导,n(1+x)^{n-1}=\sum{i*C_n^i*x^{i-1}}

2021-07-16 23:44:32 166

原创 暑训最短路(待补全)

A-Til the Cows Come Home 模板题 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <queue> #include <sstream> #include

2021-07-14 17:10:51 88

原创 Codeforces Round #732 (Div. 2)

A-AquaMoon and Two Arrays 题目 给出数列a、b,每次可以选取i,j,使得a[i]–,a[j]++.问是否能通过此操作使得a=b.(不需要使操作数最小) 直接暴力,记录c[i]=b[i]-a[i],如果∑cn\sum c_{n}∑cn​!=0,就输出-1; 然后对每个c[i],直到它等于0为止一直对其++或–,在数列中找到c[j]–或++。 #include <iostream> #include <cstring> #include <cmath&g

2021-07-12 22:35:21 162

原创 Codeforces Round #726 (Div. 2)

从来没写过这么离谱的div2,这真的不是div3?9k人过c题,3k人过D,e1,差点暴毙。 传送门 A. Arithmetic Array 氵题 #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <vector> #include <cstdio> #include <

2021-06-19 11:08:42 174

原创 牛客小白月赛34

A-dd爱科学1.0 传送门 贪心,要修改最少,先找到最长非递减子序列(就是LIS把大于号改成大于等于),剩下的就是最小的修改个数。 常规的LIS是 O(n2{n^2}n2) 的,然后发现有用二分优化的O(nlogn{nlogn}nlogn)的算法。 代码 #include <iostream> #include <cstring> #include <cmath> #include <set> #include <queue> #include

2021-06-18 01:16:26 175

原创 免费馅饼(dp)

一道不怎么难的题目硬是让我写写改改搞了半小时,没初始化wa了3次,顺便发现了一个能ac的错误代码。可能是数据水了,我随便找了一个就不行。

2021-06-08 22:51:53 105

原创 Colorful Bricks(线性DP)

令dp[i][j]为i个砖中恰有j个与左边不同的方案数,对于i-1和i只有相同和不同两种情况,不同时 i和i-1相同时,易得dp[i][j]=dp[i-1][j],不同时,因为只需要和i-1不同,和其他砖块都无关,所以i有m-1种选择。所以dp[i][j]=dp[i-1][j-1]*(m-1); 则有:dp[i][j]=dp[i-1][j]+dp[i-1][j-1];

2021-06-08 21:13:44 107

原创 计数类dp--背包 摆花

小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过a[i] 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。 试编程计算,一共有多少种不同的摆花方案。

2021-06-07 11:52:01 85

原创 线性dp --守望者的逃离

恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。

2021-06-07 11:09:51 121

原创 Hamsters Training(组合数学)

组合数学 传送门 题意:给一个n,从1~n中选出n个数(可重复选)组成长度为n的非降序数组。 首先可以先分成n种情况,即选了1,2,3…,n个数,即CnkC_n^kCnk​,因为要不降序,所以可以看成将n个相同元素插入到k个容器中,用隔板法算出为Cn−1k−1C_{n-1}^{k-1}Cn−1k−1​,所以最终答案为:∑k=1nCnkCn−1k−1\sum_{k=1}^{n}C_{n}^{k}C_{n-1}^{k-1}∑k=1n​Cnk​Cn−1k−1​ 然后组合数有这样的公式∑n=1kCniCmk−

2021-05-25 17:42:38 272

原创 Codeforces Round #722 (Div. 2) ABC

A.Eshag Loves Big Arrays 题目 题意: 每次都可以将子序列中大于平均数的数字删除,问最多可删除多少数字。 思路: 显然进行n次操作后只有最小值能留下来,记录最小值个数就行了。 代码如下: #include <iostream> #include <cstring> #include <cmath> #include <set> #include <queue> #include <vector> #include

2021-05-25 10:30:18 140

原创 Codeforces 919C--Seat Arrangements

传送门 题意 有k个人想坐一起,即在同一行或同一列选取k个连续空位,’.‘表示空座位,’*'表示有人,问有多少种选法。 直接模拟。注意k等于1的时候会重复,答案要除以2。 #include <iostream> #include <cstring> #include <cmath> #include <set> #include <queue> #include <vector> #include <cstdio> #inc

2021-05-20 20:45:12 116

原创 Codeforces Round #720 (Div. 2) AB

A - Nastia and Nearly Good Numbers 题目 题意: 求满足x+y=z并且x,y,z中的两个可以被A整除,一个可以被A*B整除的互不相同三个数x,y,z。 思路 很容易想到 A,A*(B-1),A*B是满足x+y=z和整除关系的,但是B=2的时候x=y,所以特判一下2就行了 #include <iostream> #include <cstring> #include <cmath> #include <set> #include

2021-05-19 23:45:19 82

原创 Beautiful Numbers

传送门 题意 对于数m,若存在l,r,使得[pl,pl+1…pr]为1-m的排列,则m是beautiful number。从1到n,若是 则输出1否则输出0. 思路 显然1是满足的,而m要满足条件则1-m的数的最大下标与最小下标的差为m-1。 可以用两个数来存当前的最大最小下标,从2-n顺序遍历。 代码 #include <iostream> #include <cstring> #include <cmath> #include <set> #include

2021-05-18 20:46:31 146

原创 Special Christmas Cake

思维 氵题 传送门 题意:判断正n边形能否一刀切成a边形和b边形(不需要是正多边形) 思路:观察后发现其实只有三种情况,a+b=n-2,a+b=n-3,a+b=n-4; #include <iostream> #include <cstring> #include <cmath> #include <set> //#include <unordered_map> #include <vector> #include <cstdio

2021-05-12 23:14:46 62

原创 营业额统计

营业额统计 题目 思路:要找到前i个数中最接近ai的数,只能是大于等于ai的最小值或者小于等于ai的最大值,想到用set来写,lower_bound能找到大于等于ai的最小值,也能退出小于最大值。 #include <iostream> #include <cstring> #include <cmath> #include <set> //#include <unordered_map> #include <vector> #incl

2021-05-12 22:47:00 112

原创 模数非质的除法取模

卡特兰数+唯一分解定理 题目链接 思路不难,很经典的卡特兰数应用。(如果没有取模的话) 开始直接逆元,结果连样例都过不了。 注意到答案可以写成(2n!)/n!(n+1)!. 将(2n!)分解得到(2n!)=p1c1p2c2…pkck. 同理将n!和(n+1)!分解。将分子分母底数相同的指数相减,将得到的唯一分解表示用快速幂计算即可。 #include <iostream> #include <cstdio> #include <cmath> #include <cs

2021-04-01 22:33:51 458

原创 csust周赛 厂里吃鸡王

多起点最短路 题目链接 刚开始想跑n次最短路,结果 tle,其实只要跑k次最短路然后相加即可, 另外建一个点,并且和所以种类为i的建筑建一条长度为0的边,然后跑最短路即可。 代码 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #include <que

2021-04-01 21:45:08 117

原创 csust周赛 摆蔬菜1

二分+RMQ ST表zkw线段树 题目链接 二分区间,然后查询区间最值,符合条件就记录该区间和,然后输出符合条件中的最大区间和 建议用st表,之前用线段树t傻了,然后zkw线段树也比传统线段树快些。 ST表 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #i

2021-04-01 21:35:09 117

空空如也

空空如也

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

TA关注的人

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