10 2021 档案
摘要:题意:有$n$个待完成的任务,每个任务都有编号,有一队列,如果队列没满,就将任务入队,否则,查询队列中是否有和当前任务编号相同的任务,如果有,将其提到队位,贡献+1,否则,排出队头。现在问你队列的容量最少为多少能满足贡献不小于$k$. 题解:很明显,$k$具有单调性,我们可以二分答案。现在来看che
阅读全文
摘要:题意:$n$x$m$的01矩阵,每次可以向下或向右移动,从$(1,1)\(走到\)(n,m)$,且满足路径上的$0$的个数不少于$p$,$1$的个数不小于$q$,问你有多少条不同的路径数。 题解:设$dp[i][j][k]\(表示在\)(i,j)$,当前路径有$k$个$0$的方案数,这很简单,裸dp
阅读全文
摘要:题意:长度为$n$的数组,确定一个数$k$,然后连续选$k,k-1,...,2,1$个不相交的区间,并且满足区间$sum$和严格递增,问你$k$的最大取值。 题解:我们从后往前遍历,设$dp[k][i]$表示当前位置为$i$,选择区间长为$k$的$[i,n]$中的最大取值,因为我们要求区间是严格递增
阅读全文
摘要:牛客小白月赛39 A.憧憬 签到,$O(n^2)$枚举即可。 #include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back #define me memset
阅读全文
摘要:题意:有一长度为$n$的数组,现在需要将每个数字染成黑色或红色,然后从左往右,红色数字拼接在一起,黑色数字拼接在一起,得到的两个数能够分别被$A$和$B$整除,同时黑色和红色涂色数尽可能相近,输出涂色方案。 题解:数据范围比较小,考虑四维dp,设$dp[i][j][a][b]$表示当前红色涂了$i$
阅读全文
摘要:题意:有一长度为$n$的括号序列,有$q$个询问,两种操作,1是交换$l$和$r$位置的字符,2是询问$l$到$r$的括号序列是否合法。 题解:先将括号序列用$1$和$-1$表示,不难发现,对于一个合法的括号序$[l,r]$,其区间和一定为0,且区间内任一位置的前缀和都不能小于$0$,即前缀和最小值
阅读全文
摘要:2020-2021 ICPC Southwestern European Regional Contest (SWERC 2020) A. Gratitude 字符串再加上个pair排序即可 #include <bits/stdc++.h> using namespace std; #define
阅读全文
摘要:题意:给你一个二进制数,求有多少对$(x,y)$满足图中的两个条件。 题解:对于$x+y=x\oplus y$,我们知道异或是不进位的,那么就要保证$x$和$y$的任意一位不同时为$1$,先看$x+y=n$的情况,这很容易就能算出来,关键是$x+y\le n$怎么搞,我们假设$dp[0][i]$表示
阅读全文
摘要:E. Staircases 题意:一张$n$x$m$的图,有两种楼梯形,$L$和$7$形,即向下向右和向右向下这样无限重复,单点和横着的两个点和竖着的两个点也算,有$q$个询问,每次将每个点的权值异或$1$,如果某个点的值为$0$,那么这个点就不能用,再询问贡献。 题解:在纸上手玩几个例子,发现某个
阅读全文
摘要:题意:有一张$n$个点的有向图,\(u-(I/C)>v\),表示$u$说$v$是$I/C$,假如$u$是$C$那么他说的是真话,否则是假话,现在要你给所有点赋值$I/C$,问你怎么赋值才能保证合法且$I$的数量最大。 题解:\(u-(I)>v\),假如$u$是$I$,那么$v$是$I$,假如$u$是
阅读全文
摘要:题意:有一张DAG,每条边都有边权,每一天都需要计算$1$到$m$的最短路,但是有些点在某些天不能到达,假设某一天的路径和前一天的路径不同,需要额外的$k$个费用,保证任何时候$1$到$m$一定连通,问你$n$天下来的最少总费用。 题解:假设$dp[i]$表示前$i$天的最少总费用,$cost[i]
阅读全文
摘要:题意:长度为$n$的序列$a$,求其子序列$b$的最长长度,使得$b[i]$&\(b[i-1]\neq 0\ \ \ 2\le i\le k\). 题解:$dp[j]$表示二进制的$j$位的最大贡献,对于每个$a[i]$,遍历它的二进制每一位$1$,那么当前状态就可以从这些$1$的位置转移过来,先找
阅读全文
摘要:题意:长度为$n$的序列$a$,$m$个询问,每次询问$[l,r]$中有多少种数。 题解:假设我们现在查询的区间是$[l,r]$,这其中某个数字重复出现了,如果我们将询问离线储存下来,按右区间从小到大遍历的话,那么这个数字只要取区间中最后一次出现的位置就好。那么有了这个这个结论,我们就可以用前缀和来
阅读全文
摘要:题意:两条垂直边之间有$n$个点,问点的半径至少为多少可以将两条边完全封死。 题解:首先对半径进行二分,然后分别统计能到达左边和右边的点,将相交的点用并查集合并起来,然后判断能到达左边的点和右边的点是否在同一个集合即可。 代码: #include <bits/stdc++.h> #define ll
阅读全文
摘要:Exawizards Programming Contest 2021(AtCoder Beginner Contest 222) A - Four Digits 水题 B - Failing Grade 水题 C - Swiss-System Tournament 题意:有$2n$个玩家,玩$m$
阅读全文
摘要:题意:给你一个长度为$n$的序列,问你有多少子序列满足第一个元素不大于最后一个元素。 题解:假设子序列的尾元素在原序列的位置为$j$,如果$i\ (i<j)$位置满足$A[i]\le A[j]\(,那么,\)[i,j]$的合法子序列个数为$2^{j-i-1}$,因为一定选$i$和$j$,中间的部分有
阅读全文