2.4

T1:

太菜,不会sam

就只会暴力

枚举k,枚举两端,再暴力check,如果一样ans++


T2:

还是只会暴力

把一个数,分成若干段,然后检验这个是否在数列里

分成若干段可以直接爆搜是否在每一个位置上插隔板

检验的话,就从第一个数开始构造字符串,一直够到比原数长

然后再比较原数和这个串是否相配,直接暴力扫

如果相配,找到第一个数的位置(分类讨论:位数小于它的+位数等于它的)

与ans取min

复杂度:O(2^n*n^2)


T3:

考场上完全蒙了,rand了10

现在知道了,数据范围几百的基本就是网络流

目前不会构造,只会证明一个构造是对d

构造:

我们把1~n称为入点,把n+1~n+n称为出点

从源点开始,与入点连一条1的边

每个出点与汇点连一条1的边

然后有一条边(u,v)

就从入点u连向出点v(u,v+n),容量无限

然后跑最大流

n-最大流就是答案

证明:

有一条边,可以把两个点连起来时,最大流(ans)++,而需要的路径(s)--,

所以可以看出,二者成反相关系

然后如果有u->v,现加一点a,满足u->a

那么由于源点到u只有1,所以再加一条边也无法增大ans

而n却++了,所以s++,符合题意

同理,如果有多个点指向同一个点也没关系

而如果新加一个点,它只被一个还没有连向别人的点连

那么,网络流上多了一条路,因此ans++

同时n++,所以s不变,符合题意

原文地址:https://www.cnblogs.com/shenbear/p/12260798.html