10 2019 档案
摘要:"链接" 对于每个状态f[j]多记录一个维度,转移的时候利用类似于归并排序的方法合并,以保证时间复杂度可以承受 注意事项:前K大可以有重复的价值 cpp include include include using namespace std; const int MAXK=55; const
阅读全文
摘要:"题目链接" 按顺序对于每个座位找一个最近的同时编号最小的牛就行了 cpp include include include define int long long using namespace std; const int MAXN=1010; const int INF=1e18; int n
阅读全文
摘要:"题目链接" 先把1作为根求每个子树的size,算出把1作为集会点的代价,不难发现把集会点移动到u的儿子v上后的代价为原代价 v的size\ 边权+(总的size v的size)\ 边权 cpp include include include define i
阅读全文
摘要:"题目链接" 二分答案,判断需要断几条边,用f[i]表示以i为根的子树断边后的最长路径,对于一个点u,存在f[v]mid时就删到v的边f[v1]+f[v2]mid时就删f较大的边,可以sort之后搞一搞
阅读全文
摘要:"数的变换" 暴力算就是了 "用来作弊的药水" 暴力计算,对几个MOD取模hash判断
阅读全文
摘要:快速阶乘与(扩展)卢卡斯定理 p为质数时 考虑 n! mod p 的性质 当np时,不妨将n!中的因子p提出来 n! 可以写成 ape , a与p互质 如何求解a和e? 显然,e=n/p+n/p2+n/p3+…… 因为1~n有$n/p
阅读全文
摘要:"题目链接" 欧拉定理: 当a,m互质时,aϕ(m)≡1(mod m) 扩展欧拉定理: 当Bϕ(m)时,aB≡aB mod ϕ(m)+ϕ(m) cpp include include include inclu
阅读全文
摘要:"题目链接" 考虑将所有的a1x1+a2x2+……+anxn=B对a1取模,那么所有可达到的B就分为了0~a11类 如果对a1取模为k的一类B中最小的B为dis[k],那么dis[k]+a1,dis[k]+a12,……都是可以取到的,
阅读全文
摘要:"题目链接" 长和宽的gcd(x,y)=1,就没有中间结点,一种线段有两种方向,暴力统计一下就好了 注意x=0或y=0时的线段只有一种方向 cpp include include include include define int long long using namespace std; in
阅读全文
摘要:"题目链接" 考虑每条路径都经过的一个点,它可以到达每个出度为零点(终点),且每个入读为零点(起点)都能到达它, 拓扑排序记录下每个结点能到达的出度为零点的个数和沿反边能到达的入读为零点个数,判断是否等于总个数即可 cpp include include include using namespac
阅读全文
摘要:"题目链接" 首先求出原序列的逆序对个数, 然后考虑每次将目标序列最前面的数放在最后,即最小的数变为最大 设最小数的位置是p,那么逆序对的个数增加了np,减少了p1 cpp include include include define int long long using name
阅读全文
摘要:"题目链接" 首先把商店按坐标排序 dpi,j表示前i个商店买了j吨饲料并运到终点的花费,二进制拆分优化转移
阅读全文
摘要:solution y2x2=ax+b y2=x2+ax+b 当x2+ax+b为完全平方式时Ans=inf x≤y 不妨令 y=x+t x2+2xt+t2=x2+ax+b 2xtax=bt2 x×(2ta)=bt2
阅读全文
摘要:"题目链接" solution 暴力求每个数有多少个倍数,从大到小,数i的倍数有fi个,那么选1~fi个同学的答案可以为i,取第一次更新的答案最大 cpp include include include using namespace std; const int MAX
阅读全文
摘要:"题目链接" solution 用总方案数减去不发生越狱的方案数就行了
阅读全文
摘要:题目描述 .png) 数据范围 1≤N,K≤109 solution 集合S中每个元素互不影响,不妨依次考虑其中一个元素在三角形中的出现情况 问题转化为一个0/1的三角形{Ai,j},用0表示选了,1表示没选,那么如果Ai,j为1,
阅读全文
摘要:"题目链接" m=n 1是直接按字典序dfs就行, m=n时是一棵基环树,我们发现当一个点在环上时,可以把它和它的一个在环上的儿子之间的边删掉,然后回溯,到达它的第一个有其他儿子的祖先的另一个儿子上,我们只需要记录一个点的第一个有其他儿子的祖先的其他儿子的最小值,贪心就行了 cpp include
阅读全文
摘要:"题目链接" 神奇的幻方 按照题意模拟 信息传递 不难想到这是一个基环树的森林,找一个最小环就可以了 斗地主 毒瘤搜索题,时限不紧,但是要考虑全所有情况 需要注意的一些地方: 先枚举顺子、再枚举四带二、三带一/二、炸弹等 最后剩下的单牌、对子可以一次统计出来 顺子不一定越长越好,不能有2、大小王 两
阅读全文
摘要:"题目链接" 生活大爆炸版石头剪刀布 就是个模拟,不说了 联合权值 枚举每个点,统计它任意两个儿子的联合权值,统计的时候维护sum和max就行了 飞扬的小鸟 比较好的DP题,不难想到用dp[i][j]表示到达第i列,高度j的最小点击次数,直接枚举i,j转移到下一列的位置会TLE,需要优化 cpp i
阅读全文
摘要:"题目链接" 题目就告诉我们要用并查集了,操作1和3用裸的带权并查集就行了, 操作2相当于将p结点从当前树中删除,再插入到q的树中,直接删除的话比较麻烦,不妨把它的“尸体”留在原来的地方,在q的树中插入一个新的点,维护一个指向编号为p点的指针即可 cpp include include includ
阅读全文
摘要:"题目链接" 维护一个链表,以及当前位置、head、tail的指针,模拟就行了 cpp include include include using namespace std; char s[100010]; int cnt,head,tail,pos; struct Data{ char c; i
阅读全文
摘要:横纵坐标互不影响,所以问题转化到一维:在n个区间中每个区间选一个数,n个数都被选一次 将区间按右端点排序,枚举区间,每个区间选最靠左的没被选过的点 cpp include include include include using namespace std; const int MAXN=5010
阅读全文
摘要:"题目链接" 不难发现,每加一个括号,就相当于把括号内一段区间中的符号反转,于是就是看n 1个符号经过k次区间反转后的状态数,用插板法搞一搞就可以了 cpp include include include using namespace std; int n,k; struct Big_int{ i
阅读全文