摘要:
读懂题意后发现这道题最主要是要求出字典序最小的排列,考察了匈牙利算法的实质。 首先对于$D_i$的定义,我们可以解出可能的$T_i$,然后将$i$与$T_i$连边,求最大匹配。 如果最大匹配$<N$则说明$"No\ Answer"$。 但是要求字典序最小。 第一中方法在我$AC$后翻看题解而写的。 阅读全文
摘要:
这道题题意清晰明了。 最好的方法用前缀差求,即$[0,B]-[0,A-1]$。 首先拆位把每位存到数组中,并求出位数$L$。 然后把这些数当成$L$位进行统计,不足$L$位的先补前缀$0$。 最后减去多余的前缀$0$即可。 下面求$[0,A]$各个数出现次数的方法大体是: 例如$[0,1320]$: 阅读全文
摘要:
这道题是一个不错的题,难点就在于建模。 交换操作过程中,同一行的黑块是不会被拆开,同理纵块也是。 接着目标状态就是一条对角线上全都是黑块。 我们倒过来想,看看能否从目标状态变成初始状态。 对于所有的黑块$(x,y)$(左边行右边列,点分行列),我们连条边$x \leftarrow \rightarr 阅读全文
摘要:
先放$Dinic$。 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define re register 6 #define rep(i, a, b) for (re int i = a; i <= b; ++i) 7 #defin 阅读全文
摘要:
这道题要用到“尺取法”(又名“滑动窗口算法”),具体的描述可参考P2716 【和谐的雪花】——AC-Evil的洛谷博客 这道题跟上面的这题几乎一样。 阅读全文
摘要:
这道题很容易看出是一道单调队列题。 首先我们根据珠子的位置排序。 然后按顺序枚举一个个珠子。 如果该种珠子没有出现过标记上它的位置,如果出现过修改并打上当前位置。当所有珠子都出现后,将当前位置减去打标记位置最小的一个即为当前解。 可以证明正确性。 显然选择珠子越靠后越好。 最小位置的查找要$O(K) 阅读全文
摘要:
这道题是一个状压动归题。子集生成,每一位表示是否选择了第$i$个数。 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移。 初始化:$f[\{\}]=1$,其他为$0$。 目标:$f[全集]$。 注意常数即可。 阅读全文