省选模拟赛2022/3/11

比赛时间安排

7.30-7.50
t1 又是本质不同?!又是sam?不可能不可能,好好看看,发现样例推不过!弃疗
t2 暴力挺简单的,而且貌似能O(n^2)预处理过30
t3 暴力dfs就行

7.50-8.00
先把t2的最暴力的写了,然后预处理优化,没问题,31分

8.00-8.10
t3的dfs写完了

8.10-8.15
把t2的k=1写了(之前没写因为没看见)

8.15-8.40
t3打表发现a+b=n+1时候是个杨辉三角

8.40-9.40
又去看了一下t1,题意总算弄明白了,暴力n^7可写哈哈哈
写完之后去打表发现aij是全排列时候的规律,这个过程挺曲折的,我大眼一看没什么规律,不过发现n=1的时候是m*(m+1)/2,n=2是n=1的4倍,n=3是n=1的10倍,感觉没规律,把这些倍数作差,发现每次增加的是n*(n+1)/2,于是非常激动地把这个写了上去(怎么wa了呢o(╥﹏╥)o)

9.40-10.30
细想t1还有没有没有拿到的分数,想试试能不能进行预处理之类的东西,发现并不行,然后对于<10的也没有什么想法,决定先去写后面的吧
t2我观察到k<=3,想到向量内积那个题了,就是推性质嘛,于是我很快发现k=2的时候,其实就是找偶数的位置,然后计算一下贡献,我想的是找到每个偶数点,那么包含他的区间一定合法,只要快速求出这个东西就没事了,然后就一直推推推推推……自闭了

10.30-12.00
我只能把希望寄托于t3了,看到15的数据,我觉得我可以冲一下。
我先思考,其实n能把整个序列分成两部分,变成 / \这个趋势,那么我只要枚举一下n的位置,然后把两边的一乘就行了!!非常激动(其实这个过程我想了20分钟)
而且还有一点,两边不管分配什么数字,最后都能被离散化成1~i,那么只需要成一个组合数,且两边都能使用同一个dp,所以dp数组就设出来了
f [ i ] [ j ] [ k ] [ t ] f[i][j][k][t] f[i][j][k][t]表示在 1 到 i 1到i 1i中选数,已经选了 j j j个,当前 j j j个数的最大值是 k k k,有 t t t个递增的
然后就写,写完了之后几经周折,终于小数据对了,然后我发现 i i i根本没用,就删了,变成3维,貌似卡一卡能过200!!!!激动的我赶紧对拍,发现5之后的数据都不对了
然后就是调bug,把dp的思路一遍又一遍捋,但是可惜,最后还是不知道哪里错了

赛后总结反思

  1. t1可以用字符串hash,这个套路竟然忘掉了,不应该
  2. t3的思路和73分的完全一致,就是dp设置太复杂,转移太复杂,不过相比于之前一头雾水,已经有很大进步了!
  3. 整体下来,几乎没有闲下来的时间,都很有用,时间安排上比之前好一些
  4. t2,k=2的时候可以转变成对每一个左端点算贡献,总之不是非常难想的做法,应该想到

与正解的差距

T1

暴力20分有个做法是去讨论每一行的贡献应该是多少,只需要找到在哪些矩阵中这一行第一次出现就行了,也就是要找一个上界,用上面的部分乘上下面的部分就行(下面直接到底,因为就算下面有重复的,当前这一行也是第一个出现的,也会产生贡献)
正解是trie树,合并
把每一行看成字符串,建出trie树,在每个结点上用set维护,当前这个串出现在第几行,(因为在trie树同一节点上的串一定完全相同)这样实现边插边计算贡献(计算的时候上界和下届都要求)
这样只计算了以第一列开头的串的贡献,那么我们就把第一层合并成一个新根,这样就能计算第二层了,以此类推

T2

正解用只会更改log次值的性质,减少了循环次数,并且枚举每一个左端点,算后面有多少个右端点能产生贡献,这个技巧也应该掌握,因为左端点是从后向前的,所以就约等于搞了一个后缀和,统计答案也很方便

T3

表示73分的思路和我的一模一样啊
区别就是状态设置,73分的少一维,用 f [ i ] [ j ] f[i][j] f[i][j]表示在 1   i 1~i 1 i中选树,最大值是 i i i,选了 j j j个数的方案数,其实我也想到可以把最大值的那一维去掉,可是发现转移就出现问题了,所以最后没删(依然错了)。这个转移就很巧妙。
F [ i ] [ j ] = F [ i − 1 ] [ j − 1 ] + F [ i − 1 ] [ j ] × ( i − 1 ) F[i][j]=F[i-1][j-1]+F[i-1][j]\times(i-1) F[i][j]=F[i1][j1]+F[i1][j]×(i1)
前一部分是第 j j j个数选 i i i,后一部分是第 j j j个数不选 i i i,那么我们可以先让他选 i i i,然后再从前面 i − 1 i-1 i1个数里任意选一个,和他交换位置,就好啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值