- 博客(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增加bi3.A增加ci3.A增加c_i3.A增加ci首先看到这该死的后效性就知道贪心不太行, 而且正向dp也不行,得逆向dp,并且因为第n轮一定是进行攻击操作,初始化也解决了,现在的问题就是状态
2021-08-19 15:28:21
328
原创 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
143
原创 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
148
原创 欧拉(数论)
题目题目叫欧拉,结果主要是莫比乌斯。设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
126
原创 集合中的质数(容斥原理)
集合中的质数就是求∣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
404
原创 求图上每个点能到达的点的个数
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
926
原创 Cube(数学)
Cube给出八个点问是不是立方体。如果我们给每对点之间都连线的话,会有12条相等的最小边(棱长),12条相等的次小边(面对角线),到这里就可以了,体对角线不用管。首先,对于一个四边形,如果每条边都相等,那么它是菱形,如果对角线相等,那么是矩形,即正方形,所以只要满足有这样两组边就行,特判一下等于0就行了。#include <iostream>#include <cstring>#include <cmath>#include <bitset>#i
2021-07-27 20:48:01
292
原创 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
430
原创 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
1011
原创 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
146
原创 逆序对(权值线段树)
题目逆序对可以用归并和树状数组求,应该比线段树快,这里只是为了学习下权值线段树。权值线段树就是维护每个数出现的次数,可以用来求数组的第K大元素。而求逆序对个数,就是求每个数前面有多少大于自己的数,所以可以用权值线段树来写,比如查询一个数a,a<=mid,说明a在左子树中,所以所有柚子树的元素都比a大,答案就为左子树中大于a的数加上柚子树的数的个数。否则a在柚子树中(什么傻逼输入法啊),答案为柚子树大于a的个数。代码#include<bits/stdc++.h>#defi
2021-07-23 22:28:12
258
原创 Tunnel Warfare(线段树)
有三种操作,D是删点,Q是询问点x还和几个点连着,R是恢复最近一次被摧毁的点。对点x,连接着的点的个数显然是右边最近的一个被摧毁的点的坐标减去左边最近的一个点的坐标再减1,即右区间最小值-左区间最大值-1。因为有更新和查询操作,所以可以想到用线段树。初始化每个点的最大值为0,最小值为n+1,点被删时,最大值最小值等于自己的坐标。代码这里要吐槽一下.
2021-07-23 15:26:09
338
原创 通信线路(分层图)
最近写图论的时候看到的新玩意,之前好像还写了个分图层DP。从巨佬的博客上学了一下。还没有看完,到时候有时间慢慢看,先%%%再说。巨佬博客(传送)输入样例:5 7 11 2 53 1 42 4 83 2 35 2 93 4 74 5 6输出样例:4题目全是瞎扯,建议直接跳过就大概是按照dp的思路建图,进行K个步骤的话就建K层互相联系的相同的图,比如第一层也就是原图是数字1-4,那么第二层就是数字1’-4’.连起来就是这样。(灵魂画手)建立k层图.第k层和第k+1层图
2021-07-22 21:12:36
317
原创 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
98
原创 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
116
原创 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
80
原创 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
288
原创 P3758 [TJOI2017]可乐
用DP加O2优化卡过去的,过程十分痛苦,主要是内存爆炸(刚开始还想开三维DP )。貌似正解不是DP,等我先学学再补上。先上DP代码。刚开始想的是dp[t][pos[[0/1/2]分别表示爆炸,不动,移动,然后写了很久样例都过不了,然后想到原地不动可以当成移动到自己(被题目骗了)没有任何一条道路连接相同的城市,嗯,刚开始看到原地就想连接自己,看到这句话就渐渐想着不连接自己。然后爆炸可以新建一个点0,所有点都可以到达0,但0只能到达自己,其实也可以让0不能到任何一点,但后面就需要循环t次,可能会.
2021-07-20 23:07:59
131
原创 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
131
原创 Physical Education Lessons-动态开点线段树
看到数据范围头就痛起来了,还抱着是不是打印错误的想法上去交了一发结果re,然后在本地捣鼓,开了个巨大的数组,直接给我clion卡退了,内存瞬间爆满。然后乖乖百度,发现了一个叫动态开点线段树的线段树,折腾了一会,看懂了但没有完全看懂(下次一定去认真学学 )。就大概是要用到的节点才会开这个点,其他的不管,据说空间复杂度O(nlogn)O(nlogn)O(nlogn).代码#include <iostream>#include <cstring>#include <cmat.
2021-07-19 22:15:48
362
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
397
原创 牛客小白月赛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
175
原创 暑训最短路(待补全)
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
102
原创 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
189
原创 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
183
原创 牛客小白月赛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
183
原创 免费馅饼(dp)
一道不怎么难的题目硬是让我写写改改搞了半小时,没初始化wa了3次,顺便发现了一个能ac的错误代码。可能是数据水了,我随便找了一个就不行。
2021-06-08 22:51:53
113
原创 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
114
原创 计数类dp--背包 摆花
小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过a[i] 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。试编程计算,一共有多少种不同的摆花方案。
2021-06-07 11:52:01
88
原创 线性dp --守望者的逃离
恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。
2021-06-07 11:09:51
131
原创 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=1nCnkCn−1k−1然后组合数有这样的公式∑n=1kCniCmk−
2021-05-25 17:42:38
310
原创 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
152
原创 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
130
原创 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
89
原创 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
155
原创 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
69
原创 营业额统计
营业额统计题目思路:要找到前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
122
原创 模数非质的除法取模
卡特兰数+唯一分解定理题目链接思路不难,很经典的卡特兰数应用。(如果没有取模的话)开始直接逆元,结果连样例都过不了。注意到答案可以写成(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
493
原创 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
129
原创 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
124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人