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不变,符合题意