ACM-数论/动态规划
文章平均质量分 66
ACM-数论/动态规划
豆沙睡不醒
永远不要停下脚步
展开
-
2022年牛客多校第2场 J . Link with Arithmetic Progression (三分+枚举)
给一个序列,对于其中的元素可以改变为任意值,花费为差值的平方,问将其改编为等差序列的最小花费。相当于ax^2+by+c求极值,当x=-b/2a时取得极值。然后化简出来发现把公差d当作未知数得到二元一次函数。三分d来缩小范围check的时候计算代价。假设之前的序列为a1,a2,a3……修改后的序列为b1,b2,b3……ci+b1都是未知的,放到一侧。首项为b1,公差为d。差值ci=ai-bi。然后在计算ci就行了。...原创 2022-07-24 22:16:09 · 312 阅读 · 0 评论 -
【力扣·每日一题】913. 猫和老鼠(C++ 记忆化搜索 博弈)
linkk题意:思路:采用记忆化搜索,dp[t][x][y]表示走了t步后老鼠在x猫在y时的状态。初始将dp数组都设为-1,表示未被经过。dfs搜索,传的参数未当前的步数t,老鼠的位置x,猫的位置y。然后进行判断:如果当前的步数>=2n 返回0平局如果x=y 则猫赢 返回2如果x=0 老鼠赢 返回1对老鼠而言,遍历相邻的节点时 如果返回值为1 则老鼠肯定赢;如果返回值为2,则老鼠可以不走这一步;如果返回值为0,则可能是平局,但猫一定赢不了,所以标记flag=false;最后判断f原创 2022-01-04 10:42:39 · 934 阅读 · 0 评论 -
【力扣·每日一题】689. 三个无重叠子数组的最大和 (C++ 前缀和优化dp 保存路径)
dp转移,前缀和优化。多加一个$pre$的数组存储路径。原创 2021-12-08 19:35:54 · 550 阅读 · 0 评论 -
【力扣·每日一题】372. 超级次方(欧拉降幂 快速幂)
linkk题意:思路:欧拉降幂公式为:abmod p=abmod phi(p)mod pa^b\mod p=a^{b\mod phi(p)} \mod pabmodp=abmodphi(p)modp其中ppp为质数,phi(p)phi(p)phi(p)为ppp的欧拉函数由于题目里给出的ppp是固定的133713371337,所以其欧拉函数值为114011401140,可以求出bmod phi(p)b\mod phi(p)bmodphi(p)的值。再用快速幂求剩下的值就可以了代码:原创 2021-12-05 11:58:08 · 308 阅读 · 0 评论 -
2021 RoboCom 世界机器人开发者大赛-本科组(复赛)
2021 RoboCom 世界机器人开发者大赛-本科组(复赛)原创 2021-12-02 21:21:12 · 509 阅读 · 0 评论 -
牛客练习赛60 C操作集锦(dp 去重)
linkkkk题意:给出长度为nnn的子序列,问长度为kkk的子序列有多少种思路:很容易想到dp[i][j]dp[i][j]dp[i][j]表示从前iii个字符里选jjj个字母的子序列种类;根据第iii个字符选或不选,分为dp[i−1][j]+dp[i−1][j−1]dp[i-1][j]+dp[i-1][j-1]dp[i−1][j]+dp[i−1][j−1]最后要减去重复的部分:dp[i][j]−dp[pre[i]−1][j−1]dp[i][j]-dp[pre[i]-1][j-1]dp[i][j原创 2021-10-03 09:53:00 · 109 阅读 · 0 评论 -
The 15th Chinese Northeast Collegiate Programming Contest C. Vertex Deletion(树形dp)
linkkkk题意:给出一棵树,每次可以删去任意点,要求删完后不能有孤立的点,求方案数。思路:大概很容易看出来是个树形dp,状态不太好想。dp[u][0]dp[u][0]dp[u][0]表示删去这个点dp[u][1]dp[u][1]dp[u][1]表示不删这个点,而且删去所有子节点dp[u][2]dp[u][2]dp[u][2]表示不删这个点,而且至少留一个子节点对于第一种情况,此时的u一定满足条件;对于第二种情况,要求u的父亲节点也不被删去才可以满足条件;对于第三种情况,此时的u已经满原创 2021-09-05 16:49:19 · 282 阅读 · 0 评论 -
AtCoder Beginner Contest 222 E - Red and Blue Tree(dfs dp)
linkkkkk题意:给出nnn个点的树和长度为mmm的序列aaa。现需要给每条边染成red/bluered/bluered/blue色,要求按照aaa走的路径,经过的边数r−b=kr-b=kr−b=k,问方案数。思路:首先可以通过dfsdfsdfs将序列aaa的路径经过每条边的次数cic_ici统计出来。这样问题就变成了从c1,c2,……cn−1c_1,c_2,……c_{n-1}c1,c2,……cn−1中选择一些数和为rrr,剩余的数和为bbb,满足r−b=kr-b=kr−b=k假设s原创 2021-10-10 10:19:36 · 247 阅读 · 0 评论 -
2021年中国大学生程序设计竞赛女生专场C. 连锁商店(状压dp 思维 贪心)
linkkkk题意:给出nnn个景点,每个景点都属于一个公司,给出每个公司的价值。如果是第一次经过这个公司就会获得对应的价值,问从111出发到每个景点能够获得的最大价值。n<=36n<=36n<=36思路:可以看到nnn的范围不大,也就是说可以用二进制来表示有没有经过某个公司,比如100110011001就表示已经经过了1,41,41,4个公司,没有经过2,32,32,3公司。这样,到达每个节点时,就会有对应的数来表示之前经过公司的状态。记录每个点的前驱节点,也就是对于给出的原创 2021-11-01 18:07:05 · 898 阅读 · 2 评论 -
UPC-游戏智商+ 路标 (动态规划+DFS)
都是细节处理,就直接放在一篇博客里了游戏智商时间限制: 1 Sec 内存限制: 128 MB[提交] [状态]题目描述熊的智商高还是猴子的智商高,这或许是一个很难考究的问题。故事里,吉吉国王一直标榜自己是最聪明最伟大的猴子国王,他的毛毛也是这么坚信。而我们的熊大和熊二却一直相信他们熊熊才是最聪明的。于是,在导游光头强的建议下,他们决定来一场 pk。Pk 的内容是这样的,有 n 个格子...原创 2020-04-08 21:42:37 · 604 阅读 · 0 评论 -
AtCoder Beginner Contest 222 D - Between Two Arrays(前缀和优化dp)
linkkkkk题意:给出两个长度为nnn的序列a,ba,ba,b,构造一个序列ccc满足ai<=ci<=bia_i<=c_i<=b_iai<=ci<=bi并且ccc非单调递减。求方案数。n<=3000,0<=ai,bi<=3000n<=3000,0<=a_i,b_i<=3000n<=3000,0<=ai,bi<=3000思路:数据范围比较小,考虑dpdpdp记dp[i][j]dp[i][j]dp[原创 2021-10-10 09:23:53 · 386 阅读 · 0 评论 -
牛客练习赛87 牛老板 (记忆化搜索)
原题链接题意:牛老板(牛牛)是一个土豪,他有无穷数量的纸币,但他的纸币面值很奇怪:牛老板纸币的面值要么为6i{6^i}6i要么为9i{9^i}9i,其中i∈[−∞,∞]且i为整数。牛老板买了一架私人飞机售卖价格为X,牛老板希望在不找零的情况下用尽可能少的纸币付钱,请你帮牛老板计算至少需要多少张纸币。X<=1e12X<=1e12X<=1e12思路:最开始的思路是将xxx转为九进制,状压枚举每一个选的位置,表示这部分用999的纸币;剩下的部分用666的纸币,取最小值就好。因为xx原创 2021-08-21 09:51:59 · 618 阅读 · 0 评论 -
CF1341D.Nastya and Scoreboard (dp)
linkkkk题意:给出nnn个灯,再点亮恰好kkk节灯管,问能够组成的最大数,允许有前导零。思路:dp[i][j]dp[i][j]dp[i][j]表示从i−ni-ni−n花费jjj根灯管能够在iii得到的最大数.代码:string str[]={"1110111", "0010010", "1011101", "1011011", "0111010", "1101011", "1101111", "1010010", "1111111", "1111011" };int dp[2100][原创 2021-09-11 11:57:33 · 109 阅读 · 0 评论 -
codeforces1509 C. The Sports Festival (区间DP)
C. The Sports Festival原题链接题意:给定一个长度为nnn的序列,构造一个序列使得∑i=1ndi\sum_{i=1}^{n}{d_{i}}∑i=1ndi最小。其中di=max(a1,a2……ai)−min(a1,a2……ai)d_{i}=max(a_{1},a{2}……a{i})-min(a_{1},a{2}……a{i})di=max(a1,a2……ai)−min(a1,a2……ai)。思路:以为是构造就溜了,感谢KingZhang带正解是排序后区间dp。考虑每原创 2021-04-17 00:53:26 · 396 阅读 · 6 评论 -
AcWing 周赛13 3813. 最大路径权值(拓扑排序 DAG上dp)
原题链接题意:思路:51nod的强化版由于题目中存在环,对于环上的字母来说,每个字母都会出现无穷次,所以答案为infinfinf,输出−1-1−1如果不存在环,该图就是一个DAGDAGDAG,枚举每个字母,拓扑排序后用dpdpdp求解这个字母出现的最多次数就好。判环的话:如果topsorttopsorttopsort后仍有字母的入度>0>0>0,说明有环。代码:const int maxn=3e5+100;vector<int>g[maxn];int原创 2021-08-22 22:48:53 · 129 阅读 · 0 评论 -
AtCoder Beginner Contest 225 F.String Cards(dp)
linkk题意:给出nnn个字符串,选择kkk个字符串,求字典序最小的串。思路:dp[i][j]dp[i][j]dp[i][j]表示从[i,n][i,n][i,n]选择jjj个代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<ll,ll>PLL;typedef pair<int,int&原创 2021-11-06 10:29:14 · 239 阅读 · 0 评论 -
UPC——Swap (LCS转为LIS)
不懂LIS可以先访问:传送门问题 C: Swap时间限制: 10 Sec 内存限制: 128 MB题目描述如果你需要移动一样东西,显然接触或者使用磁场电场之类的可以解决。但是有没有办法进行超越距离的随心所欲的移动?对于物体或者文字进行超距离移动一直是人类的梦想,有一天这个难题终于被我们的大牛解决了!他现在需要的就是整理数列。数列就是所谓的写在纸上或者在电脑品目上的数列…整理数列需要一个叫做swap的操作,swap操作就是指大牛通过超距离的控制把数列中的某一位直接插入某两位的中间或者数列的开始或原创 2020-07-31 18:06:55 · 927 阅读 · 3 评论 -
CF1181C Flag (dp 思维)
原题链接题意:思路:设dp[i][j]dp[i][j]dp[i][j]表示以(i,j)(i,j)(i,j)为起点,相同颜色的继续向下延伸,最大的扩展距离。O(n2)O(n^2)O(n2)枚举每个点作为右上角的答案,判断同一列的i+d,i+2di+d,i+2di+d,i+2d的颜色和dpdpdp是否符合条件,判断i+3di+3di+3d是否越界。对于上一列,如果能够连接这列的话也要增加答案。代码:char s[1100][1100];int dp[1100][1100];int main(原创 2021-09-04 09:54:15 · 124 阅读 · 0 评论 -
atcoder AtCoder Beginner Contest 210 D - National Railway(dp)
传送门思路:首先考虑暴力的做法,枚举两个点计算距离后取最小值,复杂度O(n4)O(n^{4})O(n4)考虑怎么优化。首先可以确定的是,一定要枚举一个点,那么可以通过控制坐标的大小关系将绝对值去掉。假设对于点(i,j)(i,j)(i,j),只考虑点(x,y)(x,y)(x,y)满足i<=x<=n,j<=y<=mi<=x<=n,j<=y<=mi<=x<=n,j<=y<=m那么代价就变成了a[i][j]+a[x][y]+c∗(x原创 2021-07-17 22:58:27 · 289 阅读 · 3 评论 -
AtCoder Beginner Contest 214 F - Substrings(subsequence DP)
目录题意:思路代码:点击跳转题意:给定一个长度为nnn的字符串,每次不能选择相邻的字符,求子序列个数。1<=n<=2e51<=n<=2e51<=n<=2e5思路比较容易想到的dpdpdp状态为:dp[i]dp[i]dp[i]表示从[1,i][1,i][1,i]中选并且s[i]s[i]s[i]必选的方案数转移为dp[i]=∑j=0i−1dp[j]dp[i]=\sum_{j=0}^{i-1}{dp[j]}dp[i]=∑j=0i−1dp[j];这样很容易会原创 2021-08-16 11:11:10 · 322 阅读 · 2 评论 -
2021牛客国庆集训派对day1E Removal(dp 去重)
linkkk题意:给出长度为nnn的子序列,严格删除mmm个数后,有多少种子序列。思路:很容易想到,用dp[i][j]dp[i][j]dp[i][j]表示从前iii个数里删除jjj个的方案数,枚举第iii个是否删除,可以得到dp[i][j]=max(dp[i−1][j],dp[i−1][j−1])dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])dp[i][j]=max(dp[i−1][j],dp[i−1][j−1])但是这样会有重复,比如[1,2,1,2][1,2,1,2原创 2021-10-02 10:39:20 · 152 阅读 · 0 评论 -
AtCoder Beginner Contest 217 F - Make Pair (区间dp)
linkkkkk题意:有2∗n2*n2∗n个数,给出mmm对关系(a,b)(a,b)(a,b)表示a-b有联系。每次将这些数排成一排,如果相邻两个数有联系的话就可以消去,求方案数。思路:dp[l][r]dp[l][r]dp[l][r]表示将[l,r][l,r][l,r]之间的数消去的方案数。枚举中间点kkk的时候,假设k−rk-rk−r有联系,那么区间就可以分为[l,k−1],[k+1,r−1][l,k-1],[k+1,r-1][l,k−1],[k+1,r−1]两段,贡献是dp[l][k−1]∗原创 2021-09-06 17:01:22 · 228 阅读 · 1 评论 -
CF834D. The Bakery(线段树优化dp 决策单调性优化dp)
linkkkkk题意:将一个长度为 n 的序列分为 m段,使得总价值最大。一段区间的价值表示为区间内不同数字的个数。n≤35000,m≤50思路:考虑朴素的dpdpdp方程:dp[i][j]dp[i][j]dp[i][j]表示将前iii个数字分成jjj段得到的最大价值。转移为dp[i][j]=max(dp[k][j−1]+cnt[k+1][i])dp[i][j]=max(dp[k][j-1]+cnt[k+1][i])dp[i][j]=max(dp[k][j−1]+cnt[k+1][i])其中原创 2021-09-14 20:55:07 · 235 阅读 · 0 评论 -
Codeforces 1312E. Array Shrinking(区间DP 栈)
linkkk题意:给出一个长度为nnn的序列,对于相同相邻的两个数xxx可以替换为一个数x+1x+1x+1,问该序列的最短长度是多少。n<=500n<=500n<=500思路:看到数据范围不难想到是个区间dpdp[l][r]dp[l][r]dp[l][r]表示区间[l,r][l,r][l,r]能够合并成的最短序列长度。那么dp[l][r]=min(dp[l][k]+dp[k+1][r])dp[l][r]=min(dp[l][k]+dp[k+1][r])dp[l][r]=min原创 2021-10-19 19:55:36 · 329 阅读 · 0 评论 -
CF960F. Pathwalks (树上二维LIS 线段树 动态开点树状数组)
linkkkk题意:给定 n 个点 m条边的有向图,可能不连通,可能有重边,也可能会有自环。求最长的路径(可以经过重复节点),使得这条路径的编号和权值都严格单调递增,其中编号指输入的顺序。路径的长度是指经过边的数量。思路1:要求编号也单调递增的话不妨按照输入顺序加边,之后只考虑让权值严格递增即可。设dp[i][w]dp[i][w]dp[i][w]表示以iii为结尾并且最后一条边权为www的最长路径长度。那么该状态可以从所有以iii为端点并且权值<w<w<w的边转移而来。即dp[原创 2021-09-14 15:24:25 · 174 阅读 · 0 评论 -
AtCoder Beginner Contest 215 E - Chain Contestant (状压dp)
原题链接题意:给定一个长度为n(n<=1000)n(n<=1000)n(n<=1000)的仅有101010种字符的字符串。求子序列的个数,子序列满足相同字母的位置必须相邻。思路:下面是样例111的13种答案:BGBGBBBGBHBHGHBGHBHBBHGBH13由于字符的种类很少,考虑用状压解决每个字符选ororor不选。假设dp[i][j][k]dp[i][j][k]dp[i][j][k]表示从前iii个位置中选,并且结尾的字母为jjj,字母种原创 2021-08-23 19:59:41 · 268 阅读 · 0 评论 -
LDUOJ——E. 塔(dp+状态的选择)
E. 塔Description给出 NN 个木块,告诉你每块木块的高度,你要用这些木块搭出两座高度相同的塔,一座塔的高度为搭建它的木块的 高度和,并且一座塔至少要用一块木头。木块只能用一次,也可以不用。问在两座塔的高度相同的限制下,能够搭 的塔的最大高度是多少?Input第一行一个整数 NN,表示木块个数; 第二行 NN 个整数,表示 NN 块木块的高度。Output仅一个数,表示能搭建的最高的塔的高度,若不能搭建两座相同高度的塔,输出-1。SamplesInput [复制](javasc原创 2021-03-06 21:53:40 · 245 阅读 · 1 评论 -
CF1265E Beautiful Mirrors (概率dp)
原题链接思路:dp[i]dp[i]dp[i]表示走到第iii个镜子的期望天数:dp[i]=(dp[i−1]+1)∗p[i]+(1−p[i])∗(dp[i−1]+1+dp[i])dp[i]=(dp[i-1]+1)*p[i]+(1-p[i])*(dp[i-1]+1+dp[i])dp[i]=(dp[i−1]+1)∗p[i]+(1−p[i])∗(dp[i−1]+1+dp[i])当这个镜子说她漂亮时,只需要花费111天;否则,需要从起点重新开始,也就是dp[i]dp[i]dp[i]化简得:dp[i]=d原创 2021-04-12 21:24:58 · 144 阅读 · 0 评论 -
NOI2001——陨石的秘密(计数类dp)
原题链接思路:看的是lyd老师的题解dp状态找的很巧妙:dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l]表示深度不超过iii,用了jjj对花括号,kkk对中括号,lll对小括号组成的括号序列的数量。这样只需要枚举四层:枚举深度 枚举花括号的个数 枚举中括号的个数 枚举小括号的个数枚举的顺序也是要注意的,因为SSSSSS表达式的要求。接下来考虑转移:划分依据是将括号序列分为第一部分和第二部分。由于两个SSSSSS序列拼接时,深度为max(d原创 2021-03-17 19:39:26 · 242 阅读 · 1 评论 -
CF 1156D. 0-1-Tree(树形DP)
原题链接题意:给定一棵边权都是0或1的树,求有效点对的数量。有效点对的定义为:从u到v,经过权值为1的边后不会再经过权值为0的边。思路:考虑树形DP。dp[i][j]表示以i为根节点的子树里到i的路径的状态全为j的点的个数,cnt[j]表示该当前遍历的子树里到根节点的路径的状态为j的点的个数。j的状态无非四种,都从父节点向子节点的路径角度上考虑:路径的边权全为0,路径的边权全为1,路径的边权先1后0,路径的边权先0后1。状态转移时,我们来枚举i的子节点k,这样就相当于是枚举0和1的分界点(当然原创 2021-08-30 17:29:47 · 193 阅读 · 0 评论 -
AtCoder Beginner Contest 216 F - Max Sum Counting (降维 背包dp)
原题链接题意:给出你长度为n的两个序列a和b,从中找出子集S { 1 , 2 , 3 , 4 , . . . n } 从中找子集然后要求 maxi∈Sai>=∑i∈Sbimax_{i∈S}a_i>=\sum_{i∈S}b_imaxi∈Sai>=∑i∈Sbi的种数。思路:首先,对于每个下标来说,有两个属性a,ba,ba,b。按aaa从小到大排序后,枚举iii,那么aia_iai就是当前的最大值,而∑bi\sum b_i∑bi可以从[1,i][1,i][1,i]里取,而原创 2021-08-30 08:50:33 · 239 阅读 · 0 评论 -
Nordic Collegiate Programming Contest 2020 D.Damsindistress (dp)
linkkkkk题意:给定每个大坝先有水量以及总容量,超过总容量时就会流向下一级(靠近根)的大坝。问最少需要多少新的水可以使整个大坝体系的根崩溃?只能往一个里面加水。代码:啊开始的dpdpdp状态想错了,但还是记录一下,假设dp[i]dp[i]dp[i]表示从iii加水使得水量能够淹没000的水量,转移就要么从自身加水,要么从子节点转移。但是这样又要维护路径上的水量和。换一个思路,dp[i]dp[i]dp[i]表示要淹没第iii个大坝所需的水量,对于转移:首先,他自己的代价是ci−uic_i-u原创 2021-09-11 19:54:59 · 101 阅读 · 0 评论 -
2019CCPC秦皇岛HDU - 6736 F - Forest Program(dfs找环 组合数学)
linkkk题意:给出仙人掌图,问有多少种删边的方案使得该图变为一个森林。思路:跟上题类似。从每个环出发考虑方案数,长度为ttt的环的方案数为2t−12^t-12t−1,都不删的情况要减去,对于剩下的非环边,有删和不删两种选择,再乘上2x,x=2^{x},x=2x,x=非环边的数量。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;原创 2021-11-26 17:18:47 · 271 阅读 · 0 评论 -
CF711D-Directed Roads(组合数学 dfs找环)
合法的方案数=总方案数-不合法方案数原创 2021-11-26 15:57:58 · 213 阅读 · 0 评论 -
CF1225D Power Products(分解质因子 哈希)
linkkk题意:给出长度为nnn的序列和kkk,问有多少个数对(i,j)(i,j)(i,j)满足ai∗aj=xka^i*a^j=x^kai∗aj=xk思路:首先,对所有的数分解质因子。当aia_iai和aja_jaj的质因子对应的指数之和mod k==0\mod k==0modk==0的时候,是一对合法的数对。问题就转化成了如何快速判断。大概有两种方法,一是选择用map,vectormap,vectormap,vector嵌套判断,二是用哈希。暂且不怎么会第一种所以写了哈希,对每个数分原创 2021-11-10 17:25:09 · 484 阅读 · 0 评论 -
AtCoder Beginner Contest 226 E - Just one(dfs求连通块 组合数学)
linkk题意:给出nnn点mmm边的无向图,将其中的边变为有向边使得其满足对于每个点来说有且只有一个出边,求方案数。思路:首先,每个连通块都是独立的,所以分别考虑每个连通块的方案数,最后相乘即可。其次,对于每个连通块,只有边数跟点数相同时,才会有合法的方案,为222种。比如:4 41 22 33 42 4有下面两种方案:1->2,2->3,3->4,4->21->2,2->4,4->3,3->2如果有一个连通块没有合法的原创 2021-11-08 13:58:25 · 301 阅读 · 0 评论 -
2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)G.希望(组合数学 bfs)
题意:思路考虑mmm很小,分类讨论就行。如果环是mmm的话,那么中间两条边,也就是说在A,BA,BA,B树的环的长度为m−2m-2m−2以m==5m==5m==5为例,在A,BA,BA,B树的环长度为333,可以是A2+B1A2+B1A2+B1和A1+B2A1+B2A1+B2。也就是说从AAA树里选择长度为222的路径,从BBB树里选择长度为111的路径。所以记gaiga_igai表示AAA树里长度为iii的路径种数,gbigb_igbi表示BBB树里长度为iii的路径长度。这两个数组可以原创 2021-10-24 15:54:28 · 945 阅读 · 0 评论 -
Codeforces Round #748 (Div. 3) D2. Half of Same(数学 枚举 思维)
linkkkk题意:给出n(n<=40)n(n<=40)n(n<=40)个数,问能否确定一个kkk使得在有限的次数里执行操作使得数组里至少有一半的数是相同的。每次操作指的是选出一些数让其减小kkk。求最大的kkk,如果kkk可以无限大输出−1-1−1.思路:枚举数组内两两元素差值,对这些差值求两两之间的gcdgcdgcd,枚举gcdgcdgcd,看看有没有n/2n/2n/2元素的差值是该gcdgcdgcd的倍数,如果是的话,说明kkk可以等于该gcdgcdgcd。求gcdgcdg原创 2021-10-14 19:48:00 · 348 阅读 · 0 评论 -
Educational Codeforces Round 115 (Rated for Div. 2) D. Training Session(组合数学 思维)
linkkkk题意:给出nnn个人,每个人有a,ba,ba,b两种属性,保证没有两个人的a,ba,ba,b属性都相同。问能够选出三个人满足以下条件之一的方案数:三个人的aaa属性各不相同三个人的bbb属性各不相同思路:逆向思维,合法的方案等于总方案数减去不合法的方案数。总方案数相当于Cn3C_n^3Cn3不合法的方案数如何计算呢。先处理出cntaicnta_icntai表示属性a=ia=ia=i出现的次数,同理,也处理出cntbicntb_icntbi假设有A,B,CA,B,原创 2021-10-12 16:28:54 · 196 阅读 · 5 评论 -
AtCoder Beginner Contest 221 E - LEQ(组合数学 树状数组)
linkkkk题意给出长度为nnn的序列aaa,问有多少种子序列满足首元素<=<=<=尾元素思路:假设现在已经确定了首元素的下标为xxx,尾元素的下标为yyy,那么方案数为2y−x−12^{y-x-1}2y−x−1。中间的每个元素都有选/不选两种可能性。问题转化成了∑1<=x<=y<=n2y−x−1[ax<=ay]\sum_{1<=x<=y<=n}2^{y-x-1}[a_x<=a_y]∑1<=x<=y<=n2y−原创 2021-10-12 16:16:41 · 199 阅读 · 0 评论