09 2023 档案
摘要:luogu HDU 最近在复习数位dp 数位dp,就是在一些计数问题的时候按照一位一位的顺序依次计算,通常可以采用记忆化搜索的方式 这两道题就是很典型的数位dp 数位dp通常要记录是不是顶着上限,有没有前导零,到了哪一位以及一些特殊的条件要求。 数位dp通常要把某个区间的问题转变成两个区间的差来方便
阅读全文
摘要:Link 这个题有一个很特殊的点,就是最大值不会超过28,可以想一下最多可以合并多少次。 那么常规的区间dp是不能使用的,就要采用特殊的形式, 因为很难的确定应该怎么转移,那么就换一种思路,转移的对象变成另外一个端点。 表示在左边,达到的话的右端点位置
阅读全文
摘要:Link 首先想一下,如果又一列的 是 会有什么样的要求?需要这一样有 的所有数字并且没有 当我们知道这一点以后问题就很好解决了. 我们应该构造数列的时候,满足第一行的为 ,第 行的 为\
阅读全文
摘要:Link 首先这个题目的限制卡的很死,最好是O(n)解决,其次当看到异或的时候,就可以考虑按照二进制位进行计算。 对于这个题,我们定义表示以为最右端的子区间的答案的和 那么首先可以想到,贡献给这个答案的有两个部分,包括的和不包括的,其中不包括
阅读全文
摘要:Link 简单版本的结论还是很容易猜到的。 首先很容易想到的第一步就是尽可能地不覆盖地取尽可能多地区间,最后剩下了一小块。 然后在接着原来的指针一个一个地往右问,直到不能问了为止。 为什么这样是正确的呢?首先,在这样一步一步地往右查询的过程中,我们会发现总是前$k-1个数加上后面的一个数。 然后题面
阅读全文
摘要:事实上我们可以发现,如果最后,那么我们可以连一条边,从到 这样我们就得到了一个有向图,在这张有向图呢,可以证明的是 如果,那么必须全部都是自环。 若不成立,则必须每个环的大小恰好为 这样就可以解决了。 #include<cstdio> #
阅读全文
摘要:LLink 显然的,答案就是 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<sta
阅读全文
摘要:LLink 本代码没有高精。 首先很容易想到的是,0,1之间互相并不干扰,所以说我们只要分开算0和1的方案数乘起来就可以了。 那么怎么算方案数呢? 首先可以想到的一点就是,如果我们确定了要放个1的话,只要采用隔板法就可以确定了方案书。 有的可以没有怎么办?先给每一个隔间都放上一个球,答案就
阅读全文
摘要:Link 首先很容易想到地一点就是平行的直线可以划分为一组,他们的每一条线是“相同的”,这样我们第一件事情就是计算可以有多少划分方式。 然后该怎样计算最后每一种情况是多少个交点呢? 我们考虑一下,每一条直线都会和不平行的直线产生交点,这样就可以计算每一条直线地贡献了。 \(\frac{n^2-\su
阅读全文
摘要:link 首先我们要明白,floyed的本质上是一个dp,那么显然我们要先跑一边floyed,然后进行更新 当我们更新的两个点之间的距离的时候,显然我们改变的是和它们有关的距离,所以只要更新这两个边就可以了. #include<cstdio> #include<iostream> #include<
阅读全文
摘要:Link A Two Vessels 十分甚至九分地简单 #include<bits/stdc++.h> using namespace std; int t; int a,b,c; int main(){ scanf("%d",&t); while(t--){ scanf("%d%d%d",&a,
阅读全文