首页 > 其他分享 >Atcoder Beginner Contest 287

Atcoder Beginner Contest 287

时间:2023-01-28 21:44:24浏览次数:57  
标签:Atcoder 连通 前缀 Beginner 后缀 sum 287 权值 dp

赛时吃了三个法师,不过问题不大。


赛时

AB 简单字符串处理。

C 中需要满足:

  • \(m=n-1\)
  • 只有两个度数为 \(1\) 的点,剩下点的度数都为 \(2\)。
  • 记得判连通!!

D 根据题目要求观察发现,每一次匹配都是 \(S\) 的一个前缀和 \(T\) 的一个前缀匹配,\(S\) 的一个后缀和 \(T\) 的一个后缀匹配,且前缀长度递增,后缀长度递减。

于是考虑预处理出 \(S\) 和 \(T\) 的最长公共前缀和最长公共后缀,然后考虑每一个答案,若需要的前缀比最长公共前缀长,需要的后缀比最长公共后缀短,即满足条件。

E 经典 trick,将所有字符串 sort 排序,答案必定诞生在相邻字符串之间,依次查找更新即可。


F 树形背包,观察数据范围,考虑 \(O(n^2)\) 做法。

考虑设 \(dp_{i,j,0}\) 表示以 \(i\) 为根的子树中,\(i\in V\),且一共被分成了 \(j\) 个连通块的方案数;\(dp_{i,j,1}\) 表示以 \(i\) 为根的子树中,\(i\notin V\), 且不包括 \(i\) 所在的连通块的情况下一共被分成了 \(j\) 个连通块的方案数。根据题目要求,有如下转移方程:

\[dp_{u,j+k,0}=\sum_{v\in son_u} dp_{u,j,0}\times dp_{v,k,0}\\ dp_{u,j+k+1,0}=\sum_{v\in son_u} dp_{u,j,0}\times dp_{v,k,1}\\ dp_{u,j+k,1}=\sum_{v\in son_u} dp_{u,j,1}\times (dp_{v,k,0}+dp_{v,k,1}) \]

最后 \(ans_i=dp_{1,i,0}+dp_{1,i-1,1}\)。


G 考虑权值线段树。离散化所有权值后,维护权值区间的权值和与个数和。

对于操作 \(1\),将原权值所在位置单点修改,并将新权值位置单点修改。

对于操作 \(2\),将权值所在位置进行单点修改。

对于操作 \(3\),线段树上二分即可。

注意数组不要开小,线段树值域大小包括了操作的值域。


H 赛后再补。

标签:Atcoder,连通,前缀,Beginner,后缀,sum,287,权值,dp
From: https://www.cnblogs.com/ydtz/p/17071338.html

相关文章

  • AtCoder Beginner Contest 130
    AtCoderBeginnerContest130https://atcoder.jp/contests/abc130补补之前的A-Rounding#include<bits/stdc++.h>usingnamespacestd;intmain(){inta......
  • Atcoder ABC244E - King Bombee 题解
    原题:AtcoderABC244E-KingBombee题意给你一张图,从\(S\)到\(T\),经过\(k\)条边,经过\(X\)号点偶数次的方案数。做法设\(f_{i,j,k}\)表示经过\(i\)条边,......
  • AtCoder Beginner Contest 159
    A-TheNumberofEvenPairs相加为偶数只有偶加偶和奇加奇两种情况,其实就是在\(n\)个数中取两个(\(C\binom{2}{n}\)),在\(m\)个数中取两个(\(C\binom{2}{m}\))。B-String......
  • AtCoder Beginner Contest 126
    AtCoderBeginnerContest126https://atcoder.jp/contests/abc126A-ChangingaCharacter#include<bits/stdc++.h>usingnamespacestd;intmain(){int......
  • AtCoder Beginner Contest 162
    A-Lucky7大水题,模拟即可。#include<iostream>#include<cstdio>usingnamespacestd;intmain(){strings;cin>>s;if(s[0]=='7'||s[1]==......
  • AtCoder Beginner Contest 172
    A-Calc(abc172a)题目大意给定一个\(a\),输出\(a+a^2+a^3\)解题思路模拟即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=long......
  • 【最短路】Atcoder Beginner Contest 286----E
    题目:E-Souvenir(atcoder.jp)题解:首先这道题可以很容易看出来是求最短路。最开始自己是用bfs写的,出现了WA,TLE,RE等错误。因为对于每种情况会有Q次询问,如果每次询问都......
  • 【多重背包】Atcoder Beginner Contest 286----D
    题目:D-MoneyinHand(atcoder.jp)分析:经典的多重背包。用dp[i]表示i能否正好凑出。先复习一下多重背包。多重背包就是有N组物品,每组最多有k个,每组可以选多个。分组背......
  • AtCoder Beginner Contest 286 解题报告
    AtCoderBeginnerContest286解题报告\(\text{ByDaiRuiChen007}\)ContestLinkA.RangeSwap直接模拟交换过程即可时间复杂度\(\Theta(n)\)#include<bits/stdc++......
  • AtCoder Beginner Contest 286
    A-RangeSwap(abc286a)题目大意给定长度为\(n\)的数组\(a\)和\(p,q,r,s\),交换\(a[p..q]\)和\(a[r..s]\)并输出交换后的数组\(a\)。解题思路模拟即可。神奇......