随笔分类 - 训练记录
训练喵
摘要:C. Bottom-Tier Reversals 题链 这种翻转方式 显然我们是要从后往前固定元素 我们先来判断无解情况 因为他只允许在奇数位置rev 那么我们可以发现每个位置的奇偶性都不会改变的 所以钥匙一开始给出的序列违背了 就是无解 因为他的rev都是至少两个位置间隔 我们肯定要将两个东西打包
阅读全文
摘要:E. Buds Re-hanging 题链 观察样例我们发现我们要尽可能的分解出来bud 然后再来组合拼在一起是最优的 当然我们可以从深度最深的开始判断是不是bud 但是我们再观察 发现只要该结点有一个儿子不是bud 那么他一定就是bud 这样就少了一个log 我们考虑拆开了所有bud之后正确计算
阅读全文
摘要:D. Expression Evaluation Error 题链 观察样例 发现我们应该应该减少进位 并且必须要进位的话 我们也是选择小的位来进 这样我们的做法就完成了 肯定是将所有位都拆开 先拆成比如3213 1000 1000 1000 100 100 10 1 1 1 然后为了小位来进我们把
阅读全文
摘要:D. Many Perfect Squares 题链 一个小时没出D 好似喵 我们看到这个n只有50 然后思考了 两个平方数之差有什么关系 发现都是 (aj+x)^2 - (ai+x)^2 我们设A=aj+x B=ai+x A^2-B^2=(A+B)(A-B)=aj-ai 这样我们就可以暴力n2枚举
阅读全文
摘要:F. Copy of a Copy of a Copy 题链 我们发现这个操作是将中间不一样周围四个一样的 形如 1 0 101 010 1 0 变成全部都一样的 显然这样变之后是不可还原的 就是说这样的方格只会减少 而且题目说了 肯定有一个答案 那我们就直接对这样的格子计数 然后排序 之后就输出即
阅读全文
摘要:D. Chat Program 二分答案x 我们考虑如何O(n)check 首先我们可以将大于等于x的都看成1 否则看成0 题意转化为我们通过一次操作将这个01序列中的1变得大于k个 我们设dp[i]为i为长度m的等差数列的尾巴能改变多少个0->1 对于每个a[i]我们可以O(1)搞出他对dp[i]
阅读全文
摘要:Stop, Yesterday Please No More 和很多题解不同的是 我记录的是袋鼠的左上和右下两个点 最后我们再用洞反向去吃袋鼠即可 这样问题就转化成了 一个规则矩形和一个路径相交 看到一个规则矩形我们马上反应到就是二位前缀和可以快速计算 然后就是这个路径起点我们定义为n m 即可 他
阅读全文
摘要:E. Pchelyonok and Segments 题链 我们可以发现答案最多是sqrt(2n)个 也就是500个 考虑dp dp[i][j]表示前i个 分成了j段 且第j段的max 转移就是 dp[i][j]=max{dp[i][j],s[i]-s[i-j]}[dp[i-j][j-1]>s[i]
阅读全文
摘要:E. Crazy Robot 题链 很轻松能发现是bfs 我们肯定是从L出发 然后看他们该点可以去的地方是不是只有一条 并且旁边挨着'+' 但是打完一交发现wa3 3 2 .# .. L. 发现我们会先扩展L上面那个点 然后之后为了保证时间复杂度就不会再扩展了 但实际上 我们当且仅当一个点变成了‘+
阅读全文
摘要:D. The Strongest Build tilian 发现n只有10啊 m也是1e5 我们考虑最好的状态肯定就是大家都选最大的时候 但是如果被禁用掉了的话咋办呢 我们肯定贪心的去减少一个最小的地方 但是要是有很多地方减少的一样 那就难办了 但是我们可以直接暴力 因为m只有10 我们每次都会排除
阅读全文
摘要:D. Keep the Average High 题链 又是任何一个任意正整数 z,2x+3y=z有整数解。 namo 对于一个区间和为负数 这个区间肯定可以又一些个长度为2 长度为3 的小区间构成 要是我们这些小区间都是正数 那么就不存在一个大区间是负数了 int a[N]; void solve
阅读全文
摘要:小杜跑酷 题链 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同组的搞出来 要是下一个位置已经有组了 我们就继续 这样搞出来了几组 但是这些组仅仅是与他们的组最前面的是一样的 可能有个别与其他组的少一条边 与自己组
阅读全文