12 2022 档案
摘要:
Goodbye 2022 今天在实验室群里偶然看见大家都在总结2022 而我 索性去翻了一下聊天记录整理出这样一篇总结 说实话我臆想中的总结 可能会在南京站知乎下发表 那个世界里我拿了牌 虽然可能是一块Cu 因为我的2022居然是被算法竞赛所贯穿的 1月 那个时候好像还在复习期末 那时候疫情并不是很
阅读全文

摘要:小杜跑酷 题链 DP肯定的 发现m只有5e5 我们该点要是跳板只会最多影响后面两列以及自己这一列的状态 所以状态最多就是3*m个 其他状态都是不变的 int dp[4][N*3]; bool mp[4][N*3]; void solve(){ int n,m;cin>>n>>m; vector<pa
阅读全文
摘要:D. Koxia and Game tilian 很容易发现就是我们要让每个数字都double choice一次才能得到答案 比如第一个样例 我们发现1 1 已经double choice一次过了 所以我们该点可以搞任何的数字就是n种选择 我们发现第二个和第三个就像一个环一样 确定了一个其他所有都被
阅读全文
摘要:D. Exact Change tilian 实在是不好贪心 那我们就暴力一点 我们知道硬币1 2的数量都不会超过3 那我们可以暴力枚举1 2硬币的数量 对于每一个a[i]我们也暴力枚举一下计算出他最少的要用多少个硬币 void solve(){ int n;cin>>n; vector<int>a
阅读全文
摘要:D. Shuffle 题链 很容易看出我们每k个来看 并且要把左右衍生到最长 那么我们这一坨的就可以算出来是C len m 我们模拟完第一个样例发现多了4 原来每个之间都会有重复的 比如1100110 我们重复的就是固定了第一个1和第三个1 然后第二个1的C31 第二陀和第三陀也就是第4个1的C31
阅读全文
摘要:E. Masha-forgetful 题链 结论就是任何长的串都可以被2,3长度的串表示 后面就是暴力hash和很常规的dp[i]表示前i个是否匹配了 void solve(){ int n,m;cin>>n>>m; tuple<int,int,int>f2[10][10],f3[10][10][1
阅读全文
摘要:C. Even Subarrays C题做法就是对于一个数我们check整个序列里的substring只需要O(n) 不管是XOR还是加减 我们只需要记录一个前缀和 然后枚举每一个R看他是否存在一个L有过区间等于这个数 然后我们可以知道完全平方数不超过500个 就直接500n做完了 void sol
阅读全文
摘要:D. Restore Permutation 题链 不难看出我们应该从后往前做 我们设t[i]=i*(i-1)/2 最后一个i肯定能在t数组直接找到 比如我们找到了是3 那么要是我们下一个是5 我们就要把这个3从以后的t[4] t[5] ....中剪掉 注意这里剪掉之后我们t还是保持单调性 这里我们
阅读全文
摘要:D. Alex and Julian 题链 很容易发现我们要是两个数互相不构成奇环的话 =(a+b)/gcd(a,b)为偶数 我们发现如果a b为奇数的时候一定可以 并且奇偶一定不同组 但是发现2 4这种又不行 模拟一下大概分组就是 1 3 5 7... 2 6 10 14... 4 12 20 2
阅读全文
摘要:D. Complete Tripartite 题链 与其他题解不同 我首先发现的是没有相连的一定是同一组 那么我们直接对于整个数组 遍历一遍 将与1同组的搞出来 要是下一个位置已经有组了 我们就继续 这样搞出来了几组 但是这些组仅仅是与他们的组最前面的是一样的 可能有个别与其他组的少一条边 与自己组
阅读全文
摘要:E. Two Chess Pieces 题链 我们假设d为无限大的时候 那么就可以将a b分开来看 也就是两个点走过的路径和*2即可 要是有d怎么办呢? 我们可以拆成一条一条链来看 要是a在这条链要走的很远 b只走一小截 那么显然我们的b要衍生到a上面d处 然后我们再计算两个点走过的路径和即可 为了
阅读全文
摘要:
现在已经是23号了 离南京已经过去了5天了 离上次更新已经过去了1周 不是因为懒 是因为前几天早上发烧到38-39 晚上接近40 其实南京前两天就发现了自己身体出了问题 不过对结果影响不大 就算在清醒状态也很小概率能想到自己连板子题都没认真写过的并且做了近千题不遇的二位前缀和 --分界线-- 今天给
阅读全文

摘要:D. Playoff 题链 我们观察样例 或者自己想一想就可以知道 这个答案一定是一段连续的数字 那么我们考虑如何确定这个答案的上下界即可 而且只要给出的字符串s有一个0 那么我们的最大数字一定不存在 要是有两个0呢 比如:3 001这个样例 我们想让大的尽可能留在后面 但是8第一轮无论如何都会被消
阅读全文
摘要:D. Journey to Un'Goro 求奇数个r段最多的方案 显然考虑前缀和 s[i]表示前i个位置r的数量 我们一段是奇数r 那么显然s[i]-s[j]为奇数 我们要让pair<i,j>数量最多 显然可以轻松算的答案是多少 肯定是一人一半 ans=up(n+1,2)*((n+1)/2) 考虑
阅读全文
摘要:D. Journey to Un'Goro 题链 考虑一个三元组内一定可以排除一个非0的 x y z 我们询问x z 和 y z 要是gx==gy 那么我们的z一定不是0 否则gx=px gy=py 排除z 要是gx!=gy 那么我们z可能是0 如果z是0 gx gy 我们随便排除一个即可 如果z不
阅读全文
摘要:K. Largest Common Submatrix 题链 其实这类题就是非常典 因为他给出的是一个不重复的矩阵 那么我们B都会对应A有且仅有一个位置 我们抽象其B->A为一个特定的向量 题意就转化为求B中同向量的最大子矩阵 求最大子矩阵显然可以用悬线法 我们枚举每一行 然后悬线法即可 我们只需要
阅读全文
摘要:B. The Great Wall 显然我们可以很快的思考出来n3的做法 直接dp[i][j]表示前i个数分成j段的max 然后我们转移配合st表 dp[i][j]=max(dp[i][j],dp[k][j-1]+query_max(k+1,i)-query_min(k+1,i)); 我们思考优化枚
阅读全文
摘要:K. Master of Both 我们通过一些性质可以知道排序 可以只比较每个串的第一个不同的地方即可 这样我们就能比较轻易的得出n2的做法 我们把它搞到一个trie树上面 要求逆序对数目 就相当于先插入的与后面插入的不同的地方 后面的比前面的字典序更小 这样贡献+1 这样我们就可以直接记一个dp
阅读全文
摘要:A. Modulo Ruins the Legend 因为是%m的意义下 我们尽量一直保持在%意义下 不然会很难注意一些不合法情况 原式可变形为(n*(n+1)/2 d + ns + sum )%m 最小 我们设a=n*(n+1)/2 b=n (ad+bs+sum)%m 设g1=gcd(a,b) 里
阅读全文
摘要:P1297 [国家集训队]单选错位 题链 我们可以发现n是2e7 那显然是线性的 我们直接对每一位考虑 1.要是a[i]=a[i-1] 那么我们正确的概率就是1/a[i] 2.要是a[i]>a[i-1] 那么我们必须选到a[i-1]的那些个 1/a[i-1]那么我们a[i]的选择就有a[i-1]个概
阅读全文
摘要:E. Draw a triangle 题链 不难发现可以用叉积来求 我们假设A指向B的向量为(-b,a) 注意这里是 -b a 假设A指向C的向量为(x,y) 题目给出了AB坐标 我们就知道了第一个向量 我们只需要求x,y这个向量就可以了 S=1/2*(ax+by)这里面就是一个线性同余了 他的最小
阅读全文
摘要:B. Cells Coloring 题链 转化题意就是将这些'.'点分成两类 第一类就是一个组内每个点都不在同行同列 这样一组的贡献就是c 第二类就是一些个没被选上的散点 每个贡献是d 我们可以观察出来 最多分多少组k就是每行每列有多少个点取max 这样我们就可以枚举k 计算散点个数 如何计算散点个
阅读全文
摘要:I. Steadily Growing Steam 题链 看完题发现可以暴力dp 最开始想的状态就是dp[i][j][k]就是左边已经i权重右边已经j权重并且用了k次乘二的maxv 然后我们时间复杂度算接近1e10左右 当时想的感觉2的次数不会太多 就在那里试了很多发 最后发现我们不必要记录两堆的权
阅读全文
摘要:闲话:赛时被D分类卡了很久 讨论了很多很傻逼的情况 但是就是没有想到交叉 赛后发现I其实更简单 D. Walker 虽然但是知道是分类讨论 不过还是很难知道他那三个情况咋想的 1.显然我们要是有一个超级快 我们可以先让他跑完小的一边再回过头跑长的一边 2.两个交叉跑过去 比如一个样例 1000 10
阅读全文