50min全a,希望能帮助到大家 我主页有全部代码 1 // 排个序 还用想? 因为是平方呀 2 // 这题可能有点麻烦? 首先求最小肯定可以二分 // 主要是看枚举每个字母看一段区间里面有没有 我直接用前缀和差的, 这样方便写 // 其实也可以直接记录一个最尾部的字母位置来判断 3 // 这个题比较明显,其实一开始想的是并查集,但一想不就是个联通分量吗,直接dfs即可 4 /* 这个题我喜欢 首先根据第二个样例就能发现难点在哪里 到底在哪里呢? 1 1 1 1 前两个[1,1] 可以和后两个[1,1] 组合 也就是说前面如果有一段 合法组合 后面也有一段合法组合 ,那么就能合并 如何合并呢? 我们先想不合并的: 如果以i为起点的话,后面的选择是不是c(n-i,a[i]) (组合数从i+1到n中选a[i]个 ) 加上合并不合法的就是 : 从i开头选一个第一段的结束位置 ,假设这个位置是j , 那么以i开头的方案数 就是(i到j)的方案数 *(后面以j+1,j+2,j+3.....开头的方案数+1) 组合数用的打表 加 乘法逆元,大家没acm基础的可以看这个: https://blog.csdn.net/weixin_43916298/article/details/103919099 当然这题目应该有直接计数dp的写法,我感觉我的思路比较明显就直接写了 */