这是一段来自知乎匿名用户的评论:
我以为黑暗的路上只有我一人,踉踉跄跄。当我燃起微弱希望的一刻,看到了满目的行者。大家相视一笑,继而散作满天星。
这篇博客记录下atcoder上的绿色难度的刷题记录;
定义\(\mathrm{mex}(x_1, x_2, x_3, \dots, x_k)\)为不出现在\(x_1, x_2, x_3, \dots, x_k\)中的最小非负整数;
给定长度为\(n\)的序列\(A\),求出最小的\(\mathrm{mex}(A_{i + 1}, A_{i + 2}, A_{i + 3}, \dots, A_{i + M})\);
这类不出现在指定区间的最大值、最小值,貌似一般都需要记录每个数字出现的位置;
首先记录下每个数字的位置\(t[A[i]]\),每次让\(t[A[i]]++,t[A[i-m]]--\);并且用\(ans\)记录当前的\(mex\),如果\(t[A[i-m]]=0\),那么\(A[i-m]\)不出现在当前\(\text{mex}\)序列中,并且如果\(A[i]\le ans\),那么它比ans更优;
这篇博客记录下atcoder上的棕色难度的刷题记录;
这里由于\(k\)最大只有\(16\),因此可以用暴力,这里使用二进制进行枚举,第\(i\)位为0表示,选择将球放在\(C_i\)中,否则放在\(D_i\)中;之后判断\(m\)个\(condition\)满足了多少个,然后更新最大值;
算法竞赛中经常会使用memset来给数组赋值,有时候会发现给数组赋除0、-1
外的其他值,似乎会产生一些错误;
从c++官网,我们可以得到memset
的声明及解释;
void * memset ( void * ptr, int value, size_t num );
它的作用是:Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).
意思是将ptr
指向的num
个字节,用value
来赋值,这个value
被解释成unsigned char
;
{1} 集合 集合中的元素可以是任何对象 集合表示 枚举法 叙述法:具有某种性质的元素 文氏图 集合基数 集合A中的元素的个数是|A|; 若一个集合的基数是有限的,则该集合为有限集 若一个集合的基数是无限的,则称该集合为无限集 \[A = {a,b,c},|A| = 3\] \[B = {a,{b,c}},|B| = 2\] 空集 空集是唯一的 \(|\emptyset| = 0,|{\emptyset}| = 1\) 全集 全集在文氏图中一般用方形表示; 元素的基本特性 集合中的元素是无序的,\(\{1,2,3,4\}\)与\(\{2,3,1,4\}\)相同 集合中的元素是不同的,\(\{1,2,2,3,4,3,4,2\}\)与\(\{1,2,3,4\}\)相同 外延性原理 两个集合\(A,B\)相等,当且仅当他们的元素 ...