AtCoder
Henry_WYH
兴趣使然
展开
-
AtCoder Beginner Contest 234 F - Reordering
期末考试考完了…开始补题了最近几场ATC的ABC都很简单,前五题都是普及组左右,因此目前的目标就是能够稳出F这次F的读题没读明白,读错了,实际上是可以乱序,因此就是一个数学组合题:#define int LLconst int N = 5010,mod=998244353;int n,m,k;int f[N][N],fac[N],inv[N],finv[N],freq[27];string s;//f[i][j]表示前i个字母组成的长度为j的子序列的数量//f[i][j]+=for(k=原创 2022-01-08 22:34:05 · 389 阅读 · 0 评论 -
ABC 228 D - Linear Probing并查集
为了快速获得x位置之后第一个为-1的数,考虑使用并查集,连通当前点和下一个点的最前面点#define int long longconst int tot = 1<<20;int ans[tot+10];int n, m, q, t, x;int fa[tot+10];void init(){ rep(i,0,tot) fa[i] = i,ans[i] = -1;}int find(int x){ return x == fa[x] ? fa[x] : fa[x] = .原创 2021-11-20 22:50:00 · 354 阅读 · 0 评论 -
ABC 226 Contest E - Just one 解题报告
两种做法,dsu并查集或者dfs深搜关键是找环,细节看注释#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;//================================#define debug(a) cout << #a": " << a << endl;#defi原创 2021-11-08 00:22:09 · 171 阅读 · 0 评论 -
UNICORN Programming Contest 2021(AtCoder Beginner Contest 225) D - Play Train
类似于并查集一个ne数组一个pre数组,不能按秩合并或者路径压缩#include<unordered_set>#include<unordered_map>#include<functional>#include<algorithm>#include<string.h>#include<iostream>#include<iterator>#include<cstring>#include<原创 2021-10-31 00:50:40 · 177 阅读 · 0 评论 -
D - Restricted Permutation
今天状态不好,D都差点没有出,发一下,警示一下https://atcoder.jp/contests/abc223/tasks/abc223_d拓扑序+字典序限制要想到小根堆替换队列#include<unordered_set>#include<unordered_map>#include<functional>#include<algorithm>#include<string.h>#include<iostream>原创 2021-10-17 22:08:19 · 115 阅读 · 0 评论 -
AtCoder Beginner Contest 221 E - LEQ
算是学到了树状数组一种新的打开方式比赛的时候还在想怎么支持查找某个数,然后可以直接求幂和对于某个算出他和前面所有小于他的数的距离为k,然后快速求出2^k之和;显然是用树状数组:每次插入的时候并不是在对应位置+1,而是加一个逆元的i次幂,然后每次查询都将求得的结果乘上当前位置的2的幂即可∑2j−i−1=∑2j−1/2i\sum 2^{j-i-1}=\sum 2^{j-1}/2^{i}∑2j−i−1=∑2j−1/2i#include<unordered_set>#include<.原创 2021-10-02 23:42:25 · 140 阅读 · 0 评论 -
AtCoder Beginner Contest 220 F - Distance Sums 2
题目在这里题目描述大致意思就是给你n个点n-1条边,然后依次求出每个点到其他所有点的距离和样例Sample Input 1 31 22 3Sample Output 1 323Sample Input 2 21 2Sample Output 2 11Sample Input 3 61 61 51 31 41 2Sample Output 3 599999算法:推公式加dfs求解O(n)我们先求一个点的∑jNdist(i,j)\su原创 2021-09-26 23:06:50 · 210 阅读 · 0 评论 -
AtCoder Beginner Contest 220 D - FG operation
ABC几乎每一次D都是一道简单DP吧hh…这次的D是令f[i][j] 表示前i位,最后一位是j(j属于0~9)的方案数线性DP,顺着递推一定能够得到结果,转移方程:cnt[i][j*a[i]%10]=(cnt[i][j*a[i]%10]+cnt[i-1][j])%mod;cnt[i][(j+a[i])%10]=(cnt[i][(j+a[i])%10]+cnt[i-1][j])%mod;分别表示当前这一位可以如何由上一位转移过来#include<bits/stdc++.h>us.原创 2021-09-26 21:45:20 · 253 阅读 · 0 评论 -
AtCoder Beginner Contest 219 F - Cleaning Robot
初看这道题题面感觉很简单以为简单pair+set去重+单调增加性就能解决,后来发现并不是这样首先题面意思即重复字符串指令k次所经过的所有方格,我们设设Vk={(X1+(k−1)a,Y1+(k−1)b),(X2+(k−1)a,Y2+(k−1)b),…,(XN+(k−1)a,YN+(k−1)b)}.V_k =\{(X_1+(k−1)a,Y_1+(k−1)b),(X_2 +(k−1)a,Y_2+(k−1)b),…,(X_N+(k−1)a,YN +(k−1)b)\}.Vk={(X1+(k−1)a,Y.原创 2021-09-19 23:39:58 · 218 阅读 · 0 评论 -
AtCoder Beginner Contest 219 D - Strange Lunchbox
第一眼看出是一道动态规划,只不过限制状态有两层f[i][j][k]表示前i个物品第一个约束条件取j个第二个约束条件取k个的最小方案然后可以仿照背包问题将i那一维给删掉,其实删不删空间都够状态转移方程:注意这里是至少,因此转移方程为f[j][k]=min(f[j][k],f[max(0,j−a[i].x)][max(0,k−a[i].y)]+1)f[j][k]=min(f[j][k],f[max(0,j-a[i].x)][max(0,k-a[i].y)]+1)f[j][k]=min(f[j][.原创 2021-09-18 22:08:35 · 286 阅读 · 0 评论 -
AtCoder Beginner Contest 217 D - Cutting Woods & E - Sorting Queries
D - Cutting WoodsD题的话很简单,只需要维护区间的左右边长即可。我们使用set来存储被切割的点,每切一刀就把点加入集合。搜寻长度就lower_bound一下set,取当前和前一个数的差即可(set默认自动排序)#include<bits/stdc++.h>using namespace std;//================================= set<int> S;int l,m;//========================原创 2021-09-04 23:01:15 · 174 阅读 · 3 评论