fac
  • 2024-06-22[题解]AT_abc151_e [ABC151E] Max-Min Sums
    思路考虑将\(\max\)和\(\min\)的贡献分开计算。显然我们对这个序列进行一次排序不会影响最终的答案,因此我们可以先排序一下。然后有一个很经典的trick,就是你枚举每一个数\(x\),将\(x\)令为最大值(最小值)。因为我们先前排序过一次,因此我们可以轻易的计算出比\(x\)小(大)的
  • 2024-06-20【题解】P6323 | 容斥 分拆数
    本题存在低于\(O(nc)\)的做法。逆序对是大小关系,我们在小的那个数处统计每对逆序对,考虑从大到小插入每一个数,这样所有数都比他大,这样它插入在第\(i\)个就会产生\(i\)个逆序对,假设现在有\(x\)个数则它可以产生\([0,x]\)中个逆序对,且每种都恰好有一种插法。那么我们现在
  • 2024-05-26CF1089I Interval-Free Permutations
    标签:析合树析合树就是用来处理这一种值域连续段的问题的。OI-wiki上对于析合树的讲解。我们回顾一下题目,要求不存在长度为\([2,n-1]\)之间的连续段,换句话说,就是根节点下恰有\(n-1\)个节点,且没有任何一个字段是题目中要求的连续段。我们记这样的答案为\(A_n\)也就
  • 2024-05-22P2606 [ZJOI2010] 排列计数
    P2606[ZJOI2010]排列计数树形dp序列中每个位置的限制只有另外一个位置,那么我们将这样的限制连线,就可以得到一棵树。在这题中,这棵树刚好是小根堆,一棵完全二叉树。题目就转化为一共有多少种小根堆。那么显然的\(a_1=1\),然后左子树和右子树分剩下的\([2,n]\),并且左右子树不互
  • 2024-05-20CSP历年复赛题-P1009 [NOIP1998 普及组] 阶乘之和
    原题链接:https://www.luogu.com.cn/problem/P1009题意解读:  利用高精度计算阶乘之和,需要用到高精度乘法(高精度乘低精度)、高精度加法。  首先,思考不利用高精度如何解题,直观方法就是遍历i从1到n,每次乘i得到i的阶乘,然后累加到结果,代码如下:#include<bits/stdc++.h>usingnam
  • 2024-04-30CF1765C Card Guessing 题解
    考虑期望的线性性,求每种情况猜对的概率和,最终再除掉\({4n\choosen,n,n,n}\)。考虑枚举最少的出现次数\(mn\),记四种卡的出现次数分别为\(c_1,c_2,c_3,c_4\),\(c_1+c_2+c_3+c_4=i\lek\),则这种情况的方案数为:\[{i\choosec_1,c_2,c_3,c_4}{4n-i\choosen-c_1,n-c_2,n-c_3,n-c_
  • 2024-04-292015 ACM ICPC Singapore Regional D(折半枚举+二分)
    D-AssociationofComputerMaintenance题意给定至多350个小于100的质数,对于所有质数之积k将它分解为两个数a和b使得a*b=k。输出最小的a+b,并对1e9+7取模分析首先考虑想如果想让a+b最小,即让abs(a-b)最小。随后根据限制条件k的因子数不超过1e10,容易想到将k拆分成k1和k2,此
  • 2024-04-18[题解]ABC282E Choose Two and Eat One
    ABC282EChooseTwoandEatOne又一个图论的回顾——Kruskal最小(最大)生成树算法。看到\(n\)的范围只有\(500\),应该没有什么特别的算法。那么我们考虑建一个*\(n\)个顶点的完全图,节点\(x\)到节点\(y\)的边权值就是\(x^y+y^x\)。然后跑一遍最大生成树,得到的和就是最大结果了。如
  • 2024-04-07【思维专练】专题训练 1
    前言思维训练1,几乎没有什么算法,枚举or搜索or二分CF1681DRequiredLength\(\mathtt{TAGS}\):暴搜+剪枝前置函数下文中称:\(len(x)\)为\(x\)十进制下的位数。First.为什么是搜索开始看到这道题想到了贪心:每次找出最大的一个数乘上去。但是很显然:可以先乘一
  • 2024-04-07Codeforces 1906H Twin Friends
    考虑到\(N\)的字符组成其实是固定的。所以可以把方案数拆为\(A\)的方案数\(\times\)\(A,B\)相匹配的方案数。对于\(A\)的方案数,就是多重集组合数,为\(\dfrac{n!}{\prod\limits_{i=0}^{25}(cnt_{A,i}!)}\)。接下来考虑求解\(A,B\)相匹配的方案数。考虑到对于
  • 2024-04-062024.4.6 组合数学补题
    CF128CGameswithRectangle个人认为突破点是“严格包含”,一开始没注意严格不知道怎么处理。严格的话就是横竖分别在若干条边中,分别选出2k条边。横竖互不影响可以乘法原理,只考虑一个方向即可。#include<iostream>#include<cstdio>#include<algorithm>#definemaxn10000
  • 2024-04-04CF1924D Balanced Subsequences 题解
    先判掉\(k>\min(n,m)\)的情况。首先有个明显的计算最长合法括号子序列的贪心方法:初始一个值为\(0\)的计数器,从左到右枚举每个字符,遇到(时将计数器加一,遇到)时如果计数器不为\(0\)就减一然后将答案加一。考虑绘制它的折线图。初始时纵坐标为\(0\),从左到右枚举每个字符
  • 2024-03-31CF1942E Farm Game 题解
    我们先默认第一头牛是John的,另一种情况本质相同,最后答案乘上\(2\)就可以了。先说结论:我们将相邻两头牛配对,那么最终答案即满足至少一对牛间隔了奇数个空位的方案数。证明很简单,分\(3\)种情况讨论:每对牛间都间隔了奇数个空位。那么John开始时让所有牛往右行动,在Nhoj行
  • 2024-03-23CF1946E 题解
    Blog赛场上差一点做出来。首先发现左右两部分是比较独立的,所以可以分开计算后合并。注意到我们可以把整个数集分成左右两部分,即\(\binom{n-1}{p_{m1}-1}\)。然后我们不妨只考虑左边。发现左边的最大值也已经确定,且最大值右边的所有数可以随便选,即\(\binom{p_{i+1}-
  • 2024-03-19CF785D - Anton and School - 2 | 组合数
    links给定一个只包含(和)的括号序列,求形如(())、((())),的子序列总数。答案取模。\(n\leq2\times10^5\)\(O(n^2)\)的暴力显然,关键是如何计算组合数。枚举最后一个(,设左边还有\(x\)个(,右边有\(y\)个),则答案为\[\sum\limits_{i=1}^{\min(x+1,
  • 2024-03-17基于C语言实现整数行列式
    在本文章内,将会实现行列式的建立、销毁、打印、计算四个操作。鉴于笔者技术有限,此行列式只针对整数int型,请读者自行扩充~_~。1.行列式的建立与销毁我们首先建立行列式的数据类型,由于行列式规模的不确定,采用动态分配方法。typedefstruct{ intn; int*p;}determinant;
  • 2024-03-10lgB3717 计算组合数
    给出T次询问,每次给出n和m,求C(n,m)对998244353取模的结果。为了避免输出太多内容,只需要输出所有查询结果的异或和。1<=T<=5E6;0<=m<=n<=5E6先O(n)预处理出所有数的阶乘及其对应的乘法逆元,然后O(1)处理每次询问。#include<bits/stdc++.h>usingnamespacestd;#defineintlon
  • 2024-03-10lgP3807 lucas定理计算组合数
    有T次询问,每次给出整数n,m,p,计算C(n+m,n)%p的值。输入保证p为质数。1<=n,m,p<=1E5;1<=T<=10n较大,p较小且为质数时,可以用lucas定理来计算组合数:lucas(n,k,p)=lucas(n/p,k/p,p)*C(n%p,k%p,p)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definer
  • 2024-03-09CF645F
    其实不会反演也可以做。首先显然要考虑给你每个数个数,怎么计数。最简单的方法是从大枚举到小,设\(c_i\)为\(i\)的个数,\(f_i\)为\(\gcd=i\)的\(k\)元组出现了多少次,则\(f_i=\binom{c_i}{k}-\sum_jf_{ij}\),就是\(\gcd\)为\(i\)或\(i\)的倍数减去\(\gcd\)为\(i\)
  • 2024-03-09CF1919E
    @Explodingkonjac学长讲的做法,题解区有一篇讲这个的,但是感觉细节真的好多……我们先尝试构造出来一个合法序列。怎么构造呢?先枚举\(\suma_i=s\),然后先将序列\(a\)设为\(\max(p_n,0)\)个\(1\)后面接\(\max(p_n,0)-s\)个\(-1\),也就是先到最大值再到最终值。然后考虑往
  • 2024-03-09CF1799G
    同样来自@Explodingkonjac学长的讲题。但是我没认真听讲,所以自己想出来了。原本的想法是设对于每一组分别设\(dp_{i,j}\)为当前枚举到第\(i\)个位置,已经钦定了\(j\)个该组中的人投给自己组的方案数。转移就是枚举有多少人投给\(i\)然后容斥。但是可能是我没有处理好,总
  • 2024-03-07Dash 2.16版本新特性介绍
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master大家好我是费老师,几天前Dash发布了其2.16.0版本,随后在修复了一些潜在问题后,于今天发布了可稳定使用的2.16.1版本,执行下面的命令进行最新版本Dash的安装:pipinstalldash-U2.16版本中为
  • 2024-03-01AC475B 2024省选联测26 排列
    题意对于所有满足\(1\lea<b\len\)的\((a,b)\)的排列,需要满足:对于\(1\lea<b<c\len\),\((a,c)\)处在\((a,b)\)和\((b,c)\)之间。另外再给出\(m\)个限制,形如\((a,b,c,d)\)要求\((a,b)\)在\((c,d)\)的前面。Sol其实这道题没有那么hard
  • 2024-02-27[ABC303Ex] Constrained Tree Degree 题解
    AtCoder题面洛谷题面如果每个点的度数都知道了,那问题就转化成了P2290[HNOI2004]树的计数,直接求Prufer序列的个数即可,因为一个度数为\(d_i\)的点在Prufer序列中的出现次数是\(d_i-1\),所以答案是:\(\frac{(n-2)!}{\prod_{i=1}^{n}(d_i-1)!}\)。可以把\((n-2)!\)放到
  • 2024-02-22[ABC259Ex] Yet Another Path Counting 题解
    Description有\(N\)行\(N\)列的网格图,只能向下或向右走,合法路径的开端和结尾的格子上数字一样找到合法路径条数,对\(998244353\)取模\(1\leqN\leq400,1\leqa_{i,j}\leqN^2\)。Solution有一个\(O(n^4)\)的做法是每次枚举起点和终点然后用组合数计算答案,但是由于同